Я настраиваю полную среду с помощью Ansible. По какой-то причине Ansible не принимает значения переменных.
Я использую Ansible 2.1.1.0.
Вот пример того, что я пытаюсь сделать:
Я зарегистрировал свой vpc в register: ec2_vpc
.
syntax-1 # This doesn't work
- name: Add to host vars
add_host:
name: "vpc subnets"
groups: vpc_vars
vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
vpcid: "{{ ec2_vpc.vpc_id }}"
- debug: var=vpc_subnet_id
- debug: var=vpcid
syntax-2 # These works
- name: Record vpc id
debug: var=ec2_vpc.vpc_id
- name: Record subnet id
debug: var=ec2_vpc.subnets[0].id
Результат вышеуказанной полосы:
TASK [debug] *******************************************************************
ok: [localhost] => {
"vpc_subnet_id": "VARIABLE IS NOT DEFINED!"
}
TASK [debug] *******************************************************************
ok: [localhost] => {
"vpcid": "VARIABLE IS NOT DEFINED!"
}
TASK [Record vpc id] ***********************************************************
ok: [localhost] => {
"ec2_vpc.vpc_id": "vpc-4sdh3832f"
}
TASK [Record subnet id] ********************************************************
ok: [localhost] => {
"ec2_vpc.subnets[0].id": "subnet-edfjdh3482"
}
Почему мой первый синтаксис не выбирает значение, а возвращает VARIABLE IS NOT DEFINED!
Обновлено: Здесь мой второй синтаксис описывает, что я правильно сортирую значение из результата JSON зарегистрированной переменной. Но я хочу, чтобы он работал для моего 1-го синтаксиса, что означает, что я хочу добавить переменные хоста в динамический инвентарь. Чтобы я мог повторно использовать его в другой пьесе
add_host
модуль создает хост в динамическом списке хостов. Затем вы запускаете другую игру (в той же книге) против этой группы хостов, и внутри этой игры вы сможете получить доступ к установленным вами переменным.
Например, со следующим синтаксисом:
- hosts: all
# ...
tasks:
- name: Add to host vars
add_host:
name: host_1
groups: dynamic_hosts
vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
vpcid: "{{ ec2_vpc.vpc_id }}"
- hosts: dynamic_hosts
# ...
tasks:
- debug: var=vpc_subnet_id
- debug: var=vpcid
В add_host
в приведенном выше примере создается файл инвентаризации в памяти со следующим содержимым:
[dynamic_hosts]
host_1 vpc_subnet_id="{{ ec2_vpc.subnets[0].id }}" vpcid="{{ ec2_vpc.vpc_id }}"