나는 기본적으로 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
.