У меня возникли проблемы с добавлением дополнительных маршрутов к вновь созданной таблице маршрутов VPC по умолчанию в сценарии NAT с использованием Ansible и модуля ec2_vpc_route_table. Соответствующие выдержки из моей Playbook являются ...Как добавить маршруты в таблицу по умолчанию/основной маршрут VPC с помощью Ansible ec2_vpc_route_table?
Создание VPC
- name: Create Production VPC
ec2_vpc:
region: "{{ aws.region }}"
aws_access_key: "{{ aws.access_key }}"
aws_secret_key: "{{ aws.secret_key }}"
state: present
cidr_block: 10.0.0.0/16
resource_tags: { "Name":"Production" }
internet_gateway: yes
dns_hostnames: yes
dns_support: yes
subnets:
- cidr: 10.0.10.0/24
resource_tags: { "Name":"A - NAT" }
- cidr: 10.0.20.0/24
resource_tags: { "Name":"B - Public" }
- cidr: 10.0.30.0/24
resource_tags: { "Name":"C - Private" }
wait: yes
register: prod_vpc
Собирайте факты и добавлять новые маршруты
- name: Gather default Route Table facts
ec2_vpc_route_table_facts:
region: "{{ aws.region }}"
filters:
vpc-id: "{{ prod_vpc.vpc.id }}"
register: vpc_default_route
- name: Add NAT routes
ec2_vpc_route_table:
aws_access_key: "{{ aws.access_key }}"
aws_secret_key: "{{ aws.secret_key }}"
vpc_id: "{{ prod_vpc.vpc.id }}"
region: "{{ aws.region }}"
route_table_id: "{{ vpc_default_route.route_tables[0].id }}"
lookup: id
tags:
Name: NAT
subnets:
- '10.0.10.0/24'
routes:
- dest: 0.0.0.0/0
gateway_id: igw
Так прежде всего, я пытался включать создание маршрутов в задаче ec2_vpc
, но на самом деле это привело к созданию второй таблицы маршрутов, а не включению маршрутов в таблицу по умолчанию.
Итак, во-первых, Почему вторая таблица создается вместо того, чтобы добавлять маршруты по умолчанию?
Потому что включение его в создание vpc не работало, я опустился выше, что просто указывает значение по умолчанию, или main
Таблица маршрутов. Сейчас проблема заключается в том, что, когда я пытаюсь использовать ec2_vpc_route_table
добавить маршрут NAT, анзибль выдает следующее сообщение об ошибке ...
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "Unable to associate subnets for route table RouteTable:rtb-..., error: EC2ResponseError: 400 Bad Request\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Response><Errors><Error><Code>InvalidParameterValue</Code><Message>cannot disassociate the main route table association rtbassoc-...</Message></Error></Errors><RequestID>...</RequestID></Response>"}
Эта ошибка делает это звучит как, dispite тот факт, что я явно обеспечивая route_table_id
, и lookup: id
, что он не обновляет существующую таблицу, но в основном воссоздает ее, пытаясь удалить исходный код (который является таблицей маршрутов main
).
Как добавить дополнительные маршруты к существующей таблице маршрутов main
?
До сих пор единственным обходным решением, которое я смог использовать, является вызов EC2 CLI с помощью метода command: ...
, но это, очевидно, не идеально.
Мы на Ansible 2.3.0 (devel 14a2757116)
Любая помощь будет принята с благодарностью!
В исходном коде есть некоторые [примечания] (https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/cloud/amazon/ec2_vpc.py#L585), в которых указано, что _boto может Пока не устанавливаем основную таблицу. Не уверен, что он все еще действительный оператор. –
@ KonstantinSuvorov Спасибо, что указали, что это немного объясняет. Проблема в том, что я на самом деле не пытаюсь ее удалить, я пытаюсь добавить к ней, но, похоже, поведение заключается в удалении и перестройке. – oucil