Ansible-yum_repository模块


一、yum_repository模块

yum_repository模块用于配置yum仓库。

https://docs.ansible.com/ansible/latest/modules/yum_repository_module.html

参数 说明
name 仓库名 name.repo 源的名称 [name]
description 描述
baseurl 包下载路径
gpgcheck= 1 or 0 包gpg验证
enabled = yes|no 是否开启本源
state= absent 删除源

增加一个/etc/yum.repos.d/dvd.repo配置文件

[root@manage01 ~]# ansible -m yum_repository group1 -a "name=dvd description=BaseOS baseurl=file:///media/cdrom gpgcheck=0 enabled=yes"
192.168.8.23 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "repo": "dvd",
    "state": "present"
}
192.168.8.21 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "repo": "dvd",
    "state": "present"
}
192.168.8.22 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "repo": "dvd",
    "state": "present"
}

删除某个yum源

[root@manage01 ~]# ansible -m yum_repository group1 -a "name=dvd state=absent"
192.168.8.23 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "repo": "dvd",
    "state": "absent"
}
192.168.8.22 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "repo": "dvd",
    "state": "absent"
}
192.168.8.21 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "repo": "dvd",
    "state": "absent"
}

使用apt_repository

在 Ubuntu 系统中,yum_repository 模块并不适用,我们需要使用 apt_repository 模块来管理 APT 仓库。

1. 添加 APT 仓库

假设你要在本地主机上(或远程主机)添加一个名为 myrepo 的 APT 仓库,可以使用以下命令:

ansible localhost -m ansible.builtin.apt_repository -a "repo='deb http://example.com/repo stable main' filename='myrepo' state=present"

参数说明

  • repo: 指定要添加的仓库字符串。
  • filename: 指定生成的 APT 配置文件的名称(不包括 .list 扩展名)。
  • state: 指定仓库的状态,present 表示添加仓库。

示例输出

假设你在本地主机上执行此命令,输出可能如下:

localhost | CHANGED => {
    "changed": true,
    "repo": "deb http://example.com/repo stable main",
    "state": "present"
}

2. 删除 APT 仓库

假设你要删除之前添加的 myrepo 仓库,可以使用以下命令:

ansible localhost -m ansible.builtin.apt_repository -a "repo='deb http://example.com/repo stable main' filename='myrepo' state=absent"

参数说明

  • repo: 指定要删除的仓库字符串。
  • filename: 指定要删除的 APT 配置文件的名称(不包括 .list 扩展名)。
  • state: 指定仓库的状态,absent 表示删除仓库。

示例输出

假设你在本地主机上执行此命令,输出可能如下:

localhost | CHANGED => {
    "changed": true,
    "repo": "deb http://example.com/repo stable main",
    "state": "absent"
}

3. 使用 APT 密钥

如果你需要添加一个带有 GPG 密钥的仓库,可以在添加仓库的同时指定密钥文件路径,或者在添加仓库后单独添加密钥。以下是一个示例:

# 添加仓库
ansible localhost -m ansible.builtin.apt_repository -a "repo='deb https://packages.cloud.google.com/apt cloud-sdk main' filename='google-cloud-sdk' state=present update_cache=yes"

# 添加 GPG 密钥
ansible localhost -m ansible.builtin.apt_key -a "url=https://packages.cloud.google.com/apt/doc/apt-key.gpg state=present"

参数说明

  • url: 指定 GPG 密钥的 URL。
  • state: 指定密钥的状态,present 表示添加密钥。

示例输出

假设你在本地主机上执行此命令,输出可能如下:

localhost | CHANGED => {
    "changed": true,
    "repo": "deb https://packages.cloud.google.com/apt cloud-sdk main",
    "state": "present"
}
localhost | CHANGED => {
    "changed": true,
    "id": "54A647F9048D5688D7DA2ABE6A030B21BA07F4FB",
    "state": "present"
}

总结

通过 apt_repository 模块,你可以轻松地在 Ubuntu 系统上管理 APT 仓库的配置。使用 repo 参数指定仓库的 URL,filename 参数指定生成的配置文件的名称,state 参数控制仓库的存在状态(presentabsent)。你还可以使用 apt_key 模块来添加 GPG 密钥。