如何使用原始模块使剧本幂等?

如何使用原始模块使剧本幂等?

我的服务器默认没有安装 python2(目标服务器主要在 Alpine Linux 下),我使用下面的剧本来解决这个问题。

- hosts: all
  become: yes
  remote_user: root
  gather_facts: no
  pre_tasks:
      # Python is not installed by default
      - name: 'Install python'
        raw: apk --no-cache add python

  tasks:
      - name: 'Upgrade Operating System'
        apk:
                available: yes
                upgrade: yes

      - name: 'Install base software'
        apk:
                name: '{{ item }}'
                state: latest
        with_items:
                - tmux
                - vim
                - git

我使用原始模块,因为没有安装 python 包,我得到了这个输出:

TASK [Upgrade Operating System] ******************************************************************************************************************************************
fatal: [172.16.160.254]: FAILED! => {"changed": false, "failed": true, "module_stderr": "Shared connection to 172.16.160.254 closed.\r\n", "module_stdout": "/bin/sh: /usr/bin/python: not found\r\n", "msg": "MODULE FAILURE", "rc": 0}

实际上,剧本工作正常,但每次“安装 python”任务运行时状态都是“changed=1”。

是否可以使其幂等(播放重述“changed=0”并且一切都“ok=x”)?如果是的话你能帮我做到这一点吗?

答案1

我不是 100% 确定,但我认为由于 APK 的工作原理,它可能已经几乎是幂等的了。据我所知,如果你告诉它添加一个已经安装的包,APK 将返回成功而不做任何事情(至少,这就是当我尝试在我已经安装了 python2 的系统上安装 python2 时它正在做的事情) )。唯一潜在的警告是,如果有更新的版本,它将升级软件包,但我认为如果不将 shell 脚本嵌入到剧本中,就没有任何方法可以解决这个问题(您必须解析输出以apk version确定是否会更新)。

相关内容