web-dev-qa-db-ja.com

コピーを実行し、何かが変更された場合にのみ設定します

Ansibleの場合、タイムゾーンを設定し、(Ubuntu)ベースシステムの設定を入力する役割があります。

- name: set timezone
  copy: content='Europe/Berlin'
        dest=/etc/timezone
        owner=root
        group=root
        mode=0644
        backup=yes

- name: update timezone
  command: dpkg-reconfigure --frontend noninteractive tzdata

これら2つのコマンドは、何があっても実行されます。これは、同じターゲットに対してAnsibleを2回実行しても、結果の概要にchanged=2が表示されることを意味します。

default                    : ok=41   changed=2    unreachable=0    failed=0

理想的には、2回目の実行ではすべてがokである必要があります。

私はupdate timezoneset timezoneに何らかの依存関係を持っているはずだと思いますが、これを実現する最善の方法がよくわかりません。

4
Nico Schlömer

これは、registerおよびwhen changedを使用して行うことができます。

register を使用すると、copyコマンドの結果が変数に保存されます。次に、この変数を使用して、update timezoneタスクでwhen条件を作成できます。

また、タイムゾーンコンテンツの最後に改行\nを必ず追加してください それ以外の場合、Ansibleは常にコピーを実行します

- name: set timezone
  copy: content='Europe/Berlin\n'
        dest=/etc/timezone
        owner=root
        group=root
        mode=0644
        backup=yes
  register: timezone

- name: update timezone
  command: dpkg-reconfigure --frontend noninteractive tzdata
  when: timezone.changed

ただし、dpkg-reconfigureコマンド用にhandlerを作成することでこの問題を解決することもできます ここで説明

tasks:
  - name: Set timezone variables
    copy: content='Europe/Berlin\n'
          dest=/etc/timezone
          owner=root
          group=root
          mode=0644
          backup=yes
    notify:
      - update timezone
handlers:
 - name: update timezone
   command: dpkg-reconfigure --frontend noninteractive tzdata
10
Henrik Pingel

copyプレイ用の変数を登録し、changedがあるかどうかを確認するだけです。

例えば:

- name: make a file
  copy: ...
  register: whatever

- name: run a command
  command: ...
  when: whatever.changed
3
Michael Hampton

Systemd機能を使用して使用されているUbuntuのバージョンによっては、次の情報も役立つ場合があります。

- name: Set timezone
  command: timedatectl set-timezone Europe/Berlin
  changed_when: false
2
Mars

UbuntuでタイムゾーンをAnsible(> = 1.6)に設定するには、locale_genコマンドを使用します。

- name: set timezone
  locale_gen: name=Europe/Berlin state=present

注:locale_genは、現在Ansibleに同梱されている追加モジュールです。 may将来のバージョンで削除される予定です。

1
Ashley