Ansible : 파일 내용에 변수 설정


93

ansible-playbook파일 내용에 변수를 설정하고 싶은데 ec2 모듈을 사용하고 있습니다. 현재 내가하고있는 방법은 다음과 같습니다.

  1. 파일 이름이있는 Var
  2. cat파일 에 대한 셸 작업
  3. 의 결과를 사용하여 catec2 모듈에 전달합니다.

내 플레이 북의 예시 콘텐츠.

vars:
  amazon_linux_ami: "ami-fb8e9292"
  user_data_file: "base-ami-userdata.sh"
tasks:
- name: user_data_contents
  shell: cat {{ user_data_file }}
  register: user_data_action
- name: launch ec2-instance
  local_action:
...
  user_data: "{{ user_data_action.stdout }}"

이 작업을 수행하는 훨씬 쉬운 방법이 있다고 가정하지만 Ansible 문서를 검색하는 동안 찾을 수 없습니다.


이것은 나를 위해 일했습니다. lookup (pipe) 명령에 변수를 포함하는 방법을 찾지 못했습니다.
ericson.cepeda

답변:


91

파일의 내용을 얻기 위해 Ansible에서 조회 를 사용할 수 있습니다.

user_data: "{{ lookup('file', user_data_file) }}"

주의 : 이 조회는 원격 파일이 아닌 로컬 파일에서 작동합니다.

다음 은 문서완전한 예입니다 .

- hosts: all
  vars:
     contents: "{{ lookup('file', '/etc/foo.txt') }}"
  tasks:
     - debug: msg="the value of foo.txt is {{ contents }}"

90
조회는 로컬에서 실행되는 반면 cat@TesterJeff 예제 의 명령은 원격 컴퓨터에서 실행됩니다.
Alex Dupuy

8
원격 조회를 위해 소리내어 먹으을 확인하고 모듈을 가져 오기
마르코 페라리

15

slurp 모듈을 사용하여 원격 호스트에서 파일을 가져올 수 있습니다 : (제안 해 주신 @mlissner에게 감사드립니다)

vars:
  amazon_linux_ami: "ami-fb8e9292"
  user_data_file: "base-ami-userdata.sh"
tasks:
- name: Load data
  slurp:
    src: "{{ user_data_file }}"
  register: slurped_user_data
- name: Decode data and store as fact # You can skip this if you want to use the right hand side directly...
  set_fact:
    user_data: "{{ slurped_user_data.content | b64decode }}"

8

fetch 모듈 을 사용 하여 원격 호스트에서 로컬로 파일을 복사하고 모듈조회 하여 가져온 파일의 내용을 읽을 수 있습니다.


6
나는 ansible에 완전히 익숙하지 않지만 왜 이것을 위해 slurp를 사용하지 않습니까? 파일의 내용을 가져 오기 위해 리모컨에서 작동하는 것 같습니다.
mlissner

0

조회는 localhost에서만 작동합니다. 원격으로 만든 변수 파일에서 변수를 검색하려면 include_vars :를 사용하십시오 {{ varfile }}. 의 내용은 {{ varfile }}형식의 사전이어야합니다 {"key":"value"}. 콜론 뒤에 공백을 포함하면 ansible이 문제가되는 것을 알 수 있습니다.


7
이건 말도 안돼. include_vars대상의 파일이 아니라 제어 시스템에서 로컬로 작동합니다.
techraf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.