원시 모듈을 사용하여 플레이북을 멱등성으로 만드는 방법은 무엇입니까?

원시 모듈을 사용하여 플레이북을 멱등성으로 만드는 방법은 무엇입니까?

내 서버에는 기본적으로 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가 이미 설치된 시스템에 설치하려고 하면 그렇게 됩니다.) . 유일하게 주의할 점은 최신 버전이 있으면 패키지를 업그레이드한다는 것입니다. 하지만 플레이북에 셸 스크립트를 포함하지 않고는 이 문제를 apk version해결할 수 있는 방법이 없다고 생각합니다. 업데이트 예정) .

관련 정보