21

我的 ansible playbook 中有以下任务:

- name: Install EPEL repo.
  yum:
    name: "{{ epel_repo_url }}"
    state: present
    register: result
    until: '"failed" not in result'
    retries: 5
    delay: 10

我可以传递给 state 的另一个值是“已安装”。两者有什么区别?此处提供一些文档:http: //docs.ansible.com/ansible/yum_module.html

4

3 回答 3

22

状态为“当前”和“已安装”可互换使用。他们都做同样的事情,即它将确保安装您的情况下所需的包'yum'。

而状态为“最新”意味着除了安装之外,如果它不是最新的可用版本,它将继续并更新。

每当您构建堆栈/应用程序或进行生产时,始终建议使用“ Present ”或“ Ins​​talled ”状态。这是因为软件更新,无论是你的应用程序的部署,还是依赖版本的碰撞,它都与服务器配置无关,并且可能真的会破坏你的生产。

您可以在此处阅读和了解更多信息。

于 2016-11-03T22:40:54.627 回答
17

它们做同样的事情,即它们是彼此的别名,参见 yum 模块源代码中的这条注释:

# removed==absent, installed==present, these are accepted as aliases

以及它们在代码中的使用方式:

if state in ['installed', 'present']:
    if disable_gpg_check:
        yum_basecmd.append('--nogpgcheck')
    res = install(module, pkgs, repoq, yum_basecmd, conf_file, en_repos, dis_repos)
elif state in ['removed', 'absent']:
    res = remove(module, pkgs, repoq, yum_basecmd, conf_file, en_repos, dis_repos)
elif state == 'latest':
    if disable_gpg_check:
        yum_basecmd.append('--nogpgcheck')
    res = latest(module, pkgs, repoq, yum_basecmd, conf_file, en_repos, dis_repos)
else:
    # should be caught by AnsibleModule argument_spec
    module.fail_json(msg="we should never get here unless this all"
            " failed", changed=False, results='', errors='unexpected state')

return res

https://github.com/ansible/ansible-modules-core/blob/devel/packaging/os/yum.py

于 2016-11-03T20:23:47.377 回答
4

在 2.x中installed并被removed弃用,取而代之的是Ansible 2.9present之后absent不再可用

于 2019-03-08T10:22:46.547 回答