의사 Makefile에는 다음 요구 사항이 있습니다.
/etc/postfix/sasl_passwd.db: /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd
즉, postmap <...>
이 실행 중에 /etc/postfix/sasl_passwd.db
존재하지 않거나 변경된 경우에만 실행하고 싶습니다 /etc/postfix/sasl_passwd
.
나는 다음과 같은 작업을 생각해 냈습니다.
- name: /etc/potfix/sasl_passwd
become: yes
template:
src: templates/sasl_passwd.j2
dest: /etc/postfix/sasl_passwd
mode: 0600
register: sasl_passwd
- name: /etc/postfix/sasl_passwd.db exists?
shell: test -f /etc/postfix/sasl_passdb.db
failed_when: False
register: sasl_passwd_exists
- name: postmap /etc/postfix/sasl_passwd
become: yes
shell: postmap /etc/postfix/sasl_passwd
args:
creates: /etc/postfix/sasl_passwd.db
when: sasl_passwd.changed or sasl_passwd_exists.rc != 0
- 이것은 해킹처럼 보입니다.
- 항상 "/etc/postfix/sasl_passwd.db가 있습니까?"라고 표시됩니다. 단계가 변경되었습니다(예: 프롬프트에서 노란색).
when
전제 조건을 무시하기 때문에 자르지 않습니다 sasl_passwd
. 즉, 모든 종류의 파일이 sasl_passwd.db
디스크에 저장되면 절대 실행되지 않습니다.
postup
변경 후에 명령을 실행 하려면 어떻게 해야 합니까 sasl_passwd
?
답변1
묻다:"항상 "/etc/postfix/sasl_passwd.db가 존재합니까?"라고 표시됩니다. `단계가 변경되었습니다(프롬프트에서 노란색). "
- name: /etc/postfix/sasl_passwd.db exists?
shell: test -f /etc/postfix/sasl_passwd.db
failed_when: False
register: sasl_passwd_exists
답: 모듈shell
속성 없음creates
멱등성이 아닙니다. 모듈 사용통계자료대신에
- name: /etc/postfix/sasl_passwd.db exists?
stat:
path: /etc/postfix/sasl_passwd.db
register: sasl_passwd_exists
결과 보기"sasl_passwd_exists". 이 조건을 사용하세요
when: not sasl_passwd_exists.stat.exists
묻다:"어떤 유형의 sasl_passwd.db가 디스크에 있으면 절대 실행되지 않습니다."
- name: postmap /etc/postfix/sasl_passwd
become: yes
shell: postmap /etc/postfix/sasl_passwd
args:
creates: /etc/postfix/sasl_passwd.db
when: sasl_passwd.changed or sasl_passwd_exists.rc != 0
A: 속성 삭제creates
. 파일이 존재하면 작업이 실행되지 않습니다./etc/postfix/sasl_passwd.db존재하다. 당신이 원하는 것이 아닌가요? 다음에서 명령을 실행하고 싶습니다."sasl_passwd.changed"(또는 존재하지 않을 때).
- name: postmap /etc/postfix/sasl_passwd
become: yes
shell: postmap /etc/postfix/sasl_passwd
when: sasl_passwd.changed or
(not sasl_passwd_exists.stat.exists)
노트
쉘을 통해 명령을 실행하려면(<, >, | 등을 사용한다고 가정) 실제로 쉘 모듈이 필요합니다. 잘못 인용된 경우 쉘 메타 문자를 구문 분석하면 예상치 못한 명령이 실행될 수 있으므로 더 안전합니다.가능할 때마다 명령 모듈을 사용하십시오..
- 사용매니저. 이것이 Ansible 방식입니다"변경 사항에 대한 조치". 예를 들어
tasks:
- name: Notify handler when db does not exist.
stat:
path: /etc/postfix/sasl_passwd.db
register: sasl_passwd_exists
changed_when: not sasl_passwd_exists.stat.exists
notify: run postmap
- name: Create sasl_passwd and notify the handler when changed.
become: yes
template:
src: templates/sasl_passwd.j2
dest: /etc/postfix/sasl_passwd
mode: 0600
notify: run postmap
handlers:
- name: run postmap
become: true
command: postmap /etc/postfix/sasl_passwd
(검증되지 않은)
- 핸들러는 한 번만 실행됩니다. 인용하다매니저:
이러한 "알림" 작업은 게임의 각 퀘스트 블록이 끝날 때 트리거되며 여러 다른 퀘스트에서 알림을 받더라도 한 번만 트리거됩니다.