|
|||||||
Переменные в Ansible
Время создания: 28.11.2019 11:34
Раздел: Компьютер - Linux - Оркестрация - Ansible
Запись: xintrea/mytetra_syncro/master/base/1574930040sahhnw05im/text.html на raw.github.com
|
|||||||
|
|||||||
Переменные можно создавать:
Переменные могут быть описаны:
Переменные на уровне плейбука Классический способ задать переменные плейбука: --- - name: Run cfg commands on router vars: - var1: "http" - var2: "httpd" tasks: - name: Task 1 ... Внимание! Переменные, созданные через vars, существуют только в рамках того блока (и подчиненных блоках), в котором они объявлены. Можно создавать переменные на уровне плейбука, взятые из определенного файла: --- - name: Run cfg commands on router hosts: 192.168.100.1 gather_facts: false connection: local vars_files: - vars/cisco_bgp_general.yml Где cisco_bgp_general.yml - это файл, лежащий в подкаталоге ./vars. Переменные на уровне задачи Переменные на уровне задач могут быть созданы через модуль set_facts. В следующем примере показно создание переменной с именем oktet и ее последующее использование: - name: Получение 3-го октета IP-адреса shell: | cat /etc/network/interfaces | grep -P '^\s*address\s*\d*\.\d*\.\d*\.\d*' | grep -P -o '\d*\.\d*\s*$' | grep -P -o '^\d*' register: result - name: Обработка вывода команды получения 3-го октета IP-адреса set_fact: oktet="{{ result.stdout }}" - name: Получен 3-й октет IP-адреса debug: msg: '{{ oktet }}' Модуль set_fact можно использовать для создания сразу нескольких переменных. Кроме того, можно создавать переменные-словари и переменные-списки. - name: Создание переменных Ansible set_fact: simpleVar1: 12345 simpleVar2: "This is string" varAsDict: dictKey1: "Value for key 1" dictKey2: "Value for key 2" dictKey3: "Value for key 3" varAsList: - listValue1 - listValue2 - listValue3 Внимание! Переменные, созданные через set_fact, начинают существовать с момента их определения, и область видимости не зависят от иерархии блоков, в которых они создаются. По-сути, создаются факты - т. е. глобальные переменные, которые содержат какую-то информацию. Изменение значения данных переменных происходит по ходу выполнения ansible-кода. Эти переменные видны после создания и в подключаемых (include...) yml-файлах. То есть, их можно рассматривать просто как глобальные переменные в традиционных языках программирования. Передача переменных из основного плейбука в подключаемый В Ansible переменные в подключаемые плейбуки передаются автоматически. То есть, если задачи подключаются из другого файла через директиву include_tasks, то в подключаемом файле все перемененные основного файла доступны. Подключение задач, расположенных в другом файле, происходит следующим образом: basePlaybook.plb.yml --- - hosts: ourHosts vars: userName: "vasya" userConfigDir: "/home/{{ userName }}" tasks: - include_tasks: subSetVideomode.plb.yml Сами задачи в дополнительном файле оформляются не как полноценный плейбук, а как просто набор задач: subSetVideomode.plb.yml - name: Создание директории автозапуска для пользователя {{ userName }} file: path: "{{ userConfigDir }}/autostart" state: directory owner: "{{ userName }}" group: "{{ userName }}" - name: Создание команд настройки монитора ... Передача переменных в подключаемый плейбук в цикле Помимо автоматически пробрасываемых переменных, в подключаемый плейбук можно передать переменные из списка через цикл. При каждой итерации цикла будет вызываться плейбук с переменной цикла, в которой будет находиться итерируемое значение. В следующем примере происходит последовательный вызов подчиненного плейбука по строкам списка, причем каждая строка представляет из себя массив переменных: basePlaybook.plb.yml --- - hosts: ourHosts tasks: - include_tasks: ../subroutine/subSetVideomode.plb.yml loop: - [ "user", "/home/user/.config" ] - [ "teacher", "/home/teacher/.config" ] - [ "root", "/root/.config" ] loop_control: loop_var: userData subSetVideomode.plb.yml --- - name: Получение параметров пользователя set_fact: userName: "{{ userData[0] }}" userConfigDir: "{{ userData[1] }}" - name: Создание директории автозапуска для команд установки видеорежима file: path: "{{ userConfigDir }}/autostart" state: directory owner: "{{ userName }}" group: "{{ userName }}" |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|