
擬似 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
(未検証)
- ハンドラは一度だけ実行されます。引用するマネージャー:
この「通知」アクションは、ゲーム内の各クエストブロックの終わりにトリガーされ、複数の異なるクエストから通知を受けても一度だけトリガーされます。