我刚刚在AWS上用ansible创建了一个vpc:
- name: Ensure VPC is present
ec2_vpc:
state: present
region: "{{ ec2_region }}"
cidr_block: "{{ ec2_subnet }}"
subnets:
- cidr: "{{ ec2_subnet }}"
route_tables:
- subnets:
- "{{ ec2_subnet }}"
routes:
- dest: 0.0.0.0/0
gw: igw
internet_gateway: yes # we want our instances to connect internet
wait: yes # wait for the VPC to be in state 'available' before returning
resource_tags: { Name: "my_project", environment: "production", tier: "DB" } # we tag this VPC so it will be easier for us to find it later
请注意,此任务是从另一个负责填充变量的playbook中调用的。
另请注意,我知道ec2_vpc
模块已弃用,我应该尽快更新这段代码。
但我认为这些要点与这个问题无关。
所以你可以注意到resource_tags
我有一个该项目的名称。当我第一次运行这本剧本时,我没有名字。
VPC第一次成功创建,但后来我想为它添加一个名称。所以我尝试在游戏中添加它,却不知道Ansible如何知道我想要更新现有的VPC。
事实上,Ansible创建了一个新的VPC并且没有更新现有的VPC。
所以问题是,如何更新现有的资源而不是创建新资源?
答案 0 :(得分:0)
在ansible irc上进行了对话(不记得用户名,对不起),看来这个特定的模块不擅长更新资源。
看起来答案在于新的ec2_vpc_net模块,特别是选项multi_ok,默认情况下不会复制具有相同名称和CIDR块的VPC。
docs:http://docs.ansible.com/ansible/ec2_vpc_net_module.html#ec2-vpc-net