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을 사용하여 새 플레이북을 생성합니다.

질문:
기본 플레이북에 다른 항목을 추가하지 않고 새로 추가된 호스트에서 새로 생성된 플레이북을 실행할 수 있는 방법이 있습니까?
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의 핵심 기능으로, 모듈처럼 재정의될 수 없습니다.

관련 정보