it-swarm.com.ru

Ansible: установить переменную для содержимого файла

Я использую модуль ec2 с ansible-playbook Я хочу установить переменную для содержимого файла. Вот как я сейчас это делаю.

  1. Вар с именем файла
  2. Задача оболочки для cat файла
  3. используйте результат cat для передачи в модуль ec2.

Пример содержимого моей пьесы.

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.

75
TesterJeff

Вы можете использовать lookups в 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 }}"
74
jabclab

Вы можете использовать модуль 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
Gert van den Berg

Вы можете использовать модуль извлечения для копирования файлов с удаленных хостов на локальные и модуль поиска для считывания содержимого извлеченных файлов.

6
Taha Jahangir

поиск работает только на локальном хосте. Если вы хотите извлечь переменные из файла переменных, который вы создали удаленно, используйте include_vars: {{ varfile }}. Содержимое {{ varfile }} должно быть словарем в форме {"key":"value"}, вы найдете, что ansible доставит вам неприятности, если вы добавите пробел после двоеточия.

2
DR1979