1 つのプレイブックを使用して、異なるサーバーに異なるロールを展開します。

1 つのプレイブックを使用して、異なるサーバーに異なるロールを展開します。

Fe 「ansible-galaxy init」で2つのロールを作成しました: deploy_back と deploy_front

また、playbook.yml ファイルも作成しました。

- name: Create cluster
  become: yes
  hosts: all

  roles:
  - deploy_front
  - deploy_back

「ansible-playbook playbook.yml」経由で起動すると、両方のサーバーに 2 つのロールがデプロイされます。 1 つのプレイブックで異なるサーバーに異なるロールをデプロイするにはどうすればよいですか?

playbook.ymlを書くと

- name: Create cluster
  become: yes

  hosts: front
  roles:
  - deploy_front

  hosts: db
  roles:
  - deploy_db

出力は次のようになります。...重複する辞書キー (ホスト) が見つかりました... 重複する辞書キー (ロール) が見つかりました.... 最後に定義された値のみを使用します

答え1

自分の宣言と他の宣言を別々のプレイに分ける必要がありますhosts:。コードは次のようになります。

- name: Create front cluster
  become: yes
  hosts: front
  roles:
  - deploy_front

- name: Create db cluster
  become: yes
  remote_user: different-db-user
  hosts: db
  roles:
  - deploy_db

答え2

「重複キー」というメッセージが表示される理由は、YAML の構造によるものです。

プレイブックは、順序付けられたリスト形式のプレイのコレクションです。各プレイは、一連のキーワード/値のペアによって指定されます。共通遊ぶキーワードとしてはname、、、、などがhostsあります。becomeroles

YAML では、リスト内の異なる項目を指定するには、ダッシュ ( -) 文字を使用します。両方のサンプルplaybook.xmlプレイブックでは、左端のダッシュ文字は 1 つだけです。つまり、プレイブックには 1 つの項目リスト、または 1 つのプレイ プレイブックしかありません。

hosts2 番目の例の2 番目の宣言の前にダッシュ文字を追加するとplaybook.yml、2 つのプレイを含む有効なプレイブックが作成されます。

- name: Create cluster
  become: yes

  hosts: front
  roles:
  - deploy_front

- hosts: db
  roles:
  - deploy_db

元の 2 番目の例では、1 つのプレイのみが定義されています。さらに、その 1 つのプレイでhostsとキーワードの両方が 2 回定義されています。YAML は、とキーワードrolesの両方に 2 つの異なる定義があると警告しています。 hostsroles

関連情報