使用Ansible导入/添加yum .repo文件

时间:2018-12-30 08:22:45

标签: ansible yum vagrant-provision

我正在尝试使用Ansible从自定义存储库安装MariaDB(或任何软件),但是我不确定如何使用yum / yum_repository模块导入.repo文件。

Ansible

这是我的剧本:

-
    hosts: all
    become: true
    remote_user: root
    tasks:
        -
            name: set system timezone
            timezone:
                name: America/Toronto
        -
            name: add custom repository
            yum_repository:
                name: centos_o
                description: custom repositories
                baseurl: http://example.net/mirror/centos_o.repo
        -
            name: ensure mariadb is installed
            yum:
                name: mariadb-server-5.5.*
                state: installed

我尝试了所有includemetalinkbaseurlmirrorlist,但都没有碰到运气。另外,我缺少GPG关键步骤,但我什至无法正确添加回购。

centos_o.repo文件如下所示:

# JENKINS
[jenkins]
name=CentOS-$releasever - JENKINS
baseurl=http://example.net/mirror/jenkins/
enabled=0
gpgcheck=1

# MariaDB 5.5
[mariadb]
name=CentOS-$releasever - MariaDB
baseurl=http://example.net/mirror/mariadb/yum/5.5/centos$releasever-amd64/
enabled=0
gpgcheck=1

# MariaDB 10.0
[mariadb]
name=CentOS-$releasever - MariaDB
baseurl=http://example.net/mirror/mariadb/yum/10.0/centos$releasever-amd64/
enabled=0
gpgcheck=1

Shell

这是我要转换为Ansible的Shell脚本版本:

yum clean all
yum-config-manager --add-repo=http://example.net/mirror/centos_o.repo
yum-config-manager --enable mariadb
rpm --import http://example.net/mirror/mariadb/RPM-GPG-KEY-MariaDB

如果有什么不同,我可以在CentOS机器上使用Vagrant的Ansible local预配器来运行它。

2 个答案:

答案 0 :(得分:2)

使用带有创建标志的shell命令。如果回购文件存在,则将跳过该步骤。您需要确保知道什么叫回购文件。

- name: Add CentOS_o repository
  shell: yum-config-manager --add-repo=http://example.net/mirror/centos_o.repo
  args:
    creates: /etc/yum.repos.d/centos_o.repo 

如果您需要在网址中添加任何体系结构,请使用

- name: Add CentOS_7_speciality repository
  shell: yum-config-manager --add-repo=http://example.net/{{ ansible_distribution | lower }}/{{ ansible_distribution_major_version }}/{{ ansible_architecture }}/
centos_o.repo
  args:
    creates: /etc/yum.repos.d/centos_o.repo 

Ansible会将变量替换为

{{ ansible_distribution | lower }} == centos
{{ ansible_distribution_major_version }} == 7
{{ ansible_architecture }} == x86_64

答案 1 :(得分:1)

appears正确,他们没有提供您所追求的。他们的模型如此,您将调用yum_repository: 3次,每次使用baseurl=文件中已有的每个.repo值一次。

因此,根据您的情况,我建议您像在shell中一样,仅使用command:来运行yum-config-manager --add-repo。唯一的问题是yum-config-manager --add-repo=不是幂等的,在这种情况下,您必须手工保护command:,以防止它每次运行都一遍又一遍地添加相同的仓库文件