#list #loops #ansible
#Список #циклы #ansible
Вопрос:
В моем воспроизведении ansible я использую vars_prompt для получения значений для интерфейсов портов коммутатора. Цель игры — получить данные из prompt (метод, который я использую сейчас, но открыт для cli) и добавить в список. Я могу добиться этого без проблем, когда у меня есть только один порт, но когда мне нужно более одного порта, он не разбивается на несколько элементов, как должно быть в списке.
Смотрите мой код ниже:
»’
hosts: all
gather_facts: false
vars:
port_list: []
vars_prompt:
- name: SwitchPort
prompt: "Please enter port name(format e.g, Ethernet1/1,Ethernet2/1)"
tasks:
- name: add port items to port_list
set_fact:
ports: "{{port_list}} ['{{SwitchPort}}']"
- name: print ports
debug:
var: item
loop: "{{ports}}" '''
Когда я перехожу к vars_prompt: SwitchPort var Ethernet1 / 1, я получаю это, которое я могу использовать. Когда я передаю его «Ethernet1 / 1, Ethernet2 / 1», он возвращает Ethernet1 / 1, Ethernet2 / 1, а не два элемента в списке, как я хотел. Может кто-нибудь помочь мне с добавлением данных в пустой список из переменной cli?
Ответ №1:
Вы ничего не делаете для разделения SwitchPort
на список. Вы, вероятно, хотите что-то вроде этого:
- name: add port items to port_list
set_fact:
ports: "{{ port_list SwitchPort.split(',') }}"
С этим изменением, если я введу Ethernet1/1,Ethernet2/1
в командной строке, результат будет:
TASK [print ports] ***************************************************************************
ok: [localhost] => (item=Ethernet1/1) => {
"ansible_loop_var": "item",
"item": "Ethernet1/1"
}
ok: [localhost] => (item=Ethernet2/1) => {
"ansible_loop_var": "item",
"item": "Ethernet2/1"
}