Ansible 플레이북에서 명령에 조건부 강제를 추가하는 방법은 무엇입니까?

Ansible 플레이북에서 명령에 조건부 강제를 추가하는 방법은 무엇입니까?

projectA다음 플레이북에서 프로젝트 파일을 강제로 복사하고 싶습니다 .

- name: Populate /usr/local/mywork/ binaries where necessary
  copy:
    src: "output/here/usr/local/mywork/{{item}}"
    dest: "/usr/local/mywork/{{ item }}"
    force: '{{ item == "projectA" }}'
  with_items: "{{ server_files }}"

나는 추가했다 force: '{{ item == "projectA" }}'.

그러나 이것은 작동하지 않습니다. 뭔가 잘못된 것인가요?

답변1

주어진 나무

shell> tree /tmp/test
/tmp/test
├── files
│   ├── projectA
│   ├── projectB
│   └── projectC
└── mywork
    ├── projectA
    ├── projectB
    └── projectC

2 directories, 6 files

파일 내용이 다릅니다

shell> cat /tmp/test/files/*
1
1
1

shell> cat /tmp/test/mywork/*
0
0
0

옵션:

  • true인 경우 내용이 소스 파일과 다를 때 원격 파일이 대체됩니다.

  • false인 경우 대상이 존재하지 않는 경우에만 파일이 전송됩니다.

아래 스크립트

shell> cat pb.yml 
- hosts: localhost
  vars:
    server_files: [projectA, projectB, projectC]
  tasks:
    - copy:
        src: "/tmp/test/files/{{ item }}"
        dest: "/tmp/test/mywork/{{ item }}"
        force: "{{ item == 'projectA' }}"
      loop: "{{ server_files }}"

예상대로 작동하며 파일만 복사합니다.프로젝트 A. 쇼 진행--확인--차이점모드는 제공

shell> ansible-playbook pb.yml -CD

PLAY [localhost] *****************************************************************************

TASK [copy] **********************************************************************************
--- before: /tmp/test/mywork/projectA
+++ after: /tmp/test/files/projectA
@@ -1 +1 @@
-0
+1

changed: [localhost] => (item=projectA)
ok: [localhost] => (item=projectB)
ok: [localhost] => (item=projectC)

PLAY RECAP ***********************************************************************************
localhost: ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

파일 내용이 변경되지 않으면 아무 것도 변경되지 않습니다.프로젝트 A그것은 동일합니다

shell> cat /tmp/test/files/projectA
1
shell> cat /tmp/test/mywork/projectA
1
shell> ansible-playbook pb.yml -CD

PLAY [localhost] *****************************************************************************

TASK [copy] **********************************************************************************
ok: [localhost] => (item=projectA)
ok: [localhost] => (item=projectB)
ok: [localhost] => (item=projectC)

PLAY RECAP ***********************************************************************************
localhost: ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

관련 정보