Ansible: ジョブで新しいプレイブックを実行する

Ansible: ジョブで新しいプレイブックを実行する

以下を想定します。

メインスクリプト.yml

- name: Play-1
  hosts: localhost
  connection: local
  gather_facts: no
  roles:
    - role: my-role
      vars:
        newhost: 192.168.1.1

生成された_プレイブック.yml

- name: Play-1
  hosts: newhost
  gather_facts: yes
  
  tasks:
  - name: Task1
  - name: Task2
  - name: Task3

役割の主な使命:

- name: "Role MAIN-1"
  add_host:
    name: newhost
    ansible_host: "{{newhost}}"

- include: generated_playbook.yml

間違い:


ERROR! conflicting action statements: hosts, tasks

The error appears to be in 'generated_playbook.yml': line 1, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

- name: Generated Playbook
  ^ here

新しいキャラクターを作ってメインスクリプトに含めました。
このロールでは、インメモリインベントリに新しいホストを追加し、j2テンプレートサンプル出力generate_playbook.ymlを使用して新しいプレイブックを作成します。

Q:
プライマリプレイブックに他のエントリを追加せずに、新しく追加されたホストで新しく作成されたプレイブックを実行する方法はありますか?
import-playbookを使用するか、役割に含めようとしましたが失敗しました。

答え1

それは不可能です。から引用ansible.buildin.import_playbook

プレイリストを含むファイルは、最上位レベルにのみ含めることができます。

これはい明らかにこう言った

- name: This DOES NOT WORK
  hosts: all
  tasks:
    - debug:
        msg: task1

    - name: This fails because I'm inside a play already
      import_playbook: stuff.yaml

ノート

  • いいえinclude_playbook。何を見るか含む_*そして輸入_*モジュールを使用できます。
shell> ansible-doc -t module -l | grep include_

include_role    Load and ...  
include_tasks   Dynamically inclu...
include_vars    Load variables from files, dynamically...
shell> ansible-doc -t module -l | grep import_

import_playbook Imp...        
import_role     Import a ro...
import_tasks    Impo...
  • 次のメモの引用モジュールのインポート:

これはモジュールではなくAnsibleの重要な機能であり、モジュールのように上書きすることはできません。

関連情報