Я использую модуль ec2, и ansible-playbook
я хочу установить переменную для содержимого файла. Вот как я сейчас это делаю.
- Var с именем файла
- задача оболочки
cat
в файл - используйте результат
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.
ansible
ansible-playbook
Тестер Джефф
источник
источник
Ответы:
Вы можете использовать поиск в Ansible, чтобы получить содержимое файла, например
Предупреждение: этот поиск будет работать с локальными файлами, а не с удаленными.
Вот полный пример из документации :
источник
cat
команда в примере @ TesterJeff выполняется на удаленном компьютере.Вы можете использовать модуль slurp для получения файла с удаленного хоста: (Спасибо @mlissner за его предложение)
источник
Вы можете использовать модуль выборки для копирования файлов с удаленных хостов на локальные и модуль поиска для чтения содержимого извлеченных файлов.
источник
поиск работает только на localhost. Если вы хотите получить переменные из переменного файл , который вы сделали удаленно использовать include_vars:
{{ varfile }}
. Содержимое{{ varfile }}
должно быть словарём в форме{"key":"value"}
, вы обнаружите, что анзибль вызывает у вас проблемы, если вы добавляете пробел после двоеточия.источник
include_vars
работает локально на управляющей машине, а не с файлами на целевой машине.