앤서블 플레이북 include.yml

앤서블 플레이북 include.yml

나는 기본적으로 Redhat이든 Debian이든 원격 호스트로부터 동적 정보를 얻고 이에 따라 OS 버전에 따라 http 패키지를 설치할 특정 파일을 실행하고 싶습니다.

[root@ansi1 ansible]# cat include.yml
---
 - hosts: all
   tasks:
   - name: Getting os info
     include_vars: "{{ ansible_os_family }}.yml"

   - include: setup-RedHat.yml
     when: ansible_os_family == 'RedHat'
[root@ansi1 ansible]#
[root@ansi1 ansible]#
[root@ansi1 ansible]#
[root@ansi1 ansible]# cat setup-RedHat.yml
---
 - hosts: all
   tasks:
   - name: htttp install
     yum: name=httpd state=present

앤서블 플레이북 include.yml

실수:

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.

The error appears to have been in '/etc/ansible/setup-RedHat.yml': line 2, column 4, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

---
 - hosts: all
   ^ here


The error appears to have been in '/etc/ansible/setup-RedHat.yml': line 2, column 4, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

---
 - hosts: all
   ^ here

답변1

include섹션에서 이 모듈을 사용할 때 tasks플레이북은 포함할 수 없고 작업 목록만 포함할 수 있습니다. 즉, 파일에는 setup-RedHat.yml다음 콘텐츠만 포함되어야 합니다.

- name: htttp install
  yum: name=httpd state=present

- name: more tasks...

답변2

include_vars이 지시문은 값으로 제공된 파일에서 현재 플레이북에 대한 Ansible 변수를 가져오기 위한 것입니다. 이 경우 변수(및 에서 선언되었을 수 있음)는 파일에서 상속됩니다 "{{ ansible_os_family }}.yml".

ansible_os_family실제로 Ansible은 원격 시스템에서 자동으로 정보를 수집하여 컨텍스트에서 릴리스의 상위 릴리스(있는 경우)로 확인되거나 상위 릴리스가 없는 경우 자체적으로 정보를 수집합니다. 따라서 예를 들어 데비안 파생 프로그램에서 이 프로그램을 실행하면 찾고 있는 파일 이름은 Debian.yml.

관련 정보