
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
あります。become
roles
YAML では、リスト内の異なる項目を指定するには、ダッシュ ( -
) 文字を使用します。両方のサンプルplaybook.xml
プレイブックでは、左端のダッシュ文字は 1 つだけです。つまり、プレイブックには 1 つの項目リスト、または 1 つのプレイ プレイブックしかありません。
hosts
2 番目の例の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 つの異なる定義があると警告しています。 hosts
roles