[ansible] Ansible : 파일 내용에 변수 설정

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 문서를 검색하는 동안 찾을 수 없습니다.



답변

파일의 내용을 얻기 위해 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 }}"


답변

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 }}"


답변

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


답변

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


답변