main.yml 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. - name: Launch EC2 instances
  2. amazon.aws.ec2_instance:
  3. availability_zone: "{{ ec2_launch_zone | default(omit) }}"
  4. exact_count: "{{ ec2_launch_count }}"
  5. filters: '{ "tag:{{ ec2_launch_tag_name }}": "{{ ec2_launch_tag_value }}", "instance-state-name": [ "running" ] }'
  6. image_id: "{{ ec2_launch_ami }}"
  7. instance_type: "{{ ec2_launch_ec2type }}"
  8. key_name: "{{ ec2_launch_key }}"
  9. network:
  10. assign_public_ip: "{{ ec2_launch_pub_ip }}"
  11. interfaces: "{{ ec2_launch_eni is defined and [ { 'id': ec2_launch_eni } ] or omit }}"
  12. region: "{{ ec2_launch_region }}"
  13. security_groups: "{{ ec2_launch_sec_groups is defined and ec2_launch_sec_groups | split(';') or omit }}"
  14. tags: '{ "{{ ec2_launch_tag_name }}": "{{ ec2_launch_tag_value }}" }'
  15. volumes:
  16. - device_name: "{{ ec2_launch_vol_dev }}"
  17. ebs:
  18. delete_on_termination: "{{ ec2_launch_vol_del }}"
  19. encrypted: True
  20. volume_size: "{{ ec2_launch_vol_size }}"
  21. volume_type: "{{ ec2_launch_vol_type }}"
  22. vpc_subnet_id: "{{ ec2_launch_subnet | default(omit) }}"
  23. wait: True
  24. register: ec2_launch_instances
  25. notify: known_hosts
  26. delegate_to: localhost
  27. - name: Wait a few ticks for AWS to settle
  28. ansible.builtin.pause:
  29. seconds: 7
  30. when: ec2_launch_instances.changed
  31. - name: Find tagged instances
  32. amazon.aws.ec2_instance_info:
  33. region: "{{ ec2_launch_region }}"
  34. filters: '{ "tag:{{ ec2_launch_tag_name }}": "{{ ec2_launch_tag_value }}",
  35. "instance-state-name": [ "running" ] }'
  36. register: ec2_launch_tagged
  37. when: ec2_launch_sec_groups is defined
  38. delegate_to: localhost
  39. - name: Update instance security groups
  40. amazon.aws.ec2_instance:
  41. instance_ids: [ "{{ ec2_launch_tagged.instances[0].instance_id }}" ]
  42. security_groups: "{{ ec2_launch_sec_groups | split(';') }}"
  43. vpc_subnet_id: "{{ ec2_launch_subnet }}"
  44. when: ec2_launch_sec_groups is defined and ec2_launch_subnet is defined
  45. delegate_to: localhost
  46. - name: Update ENI security groups
  47. amazon.aws.ec2_eni:
  48. eni_id: "{{ ec2_launch_tagged.instances[0].network_interfaces[0].network_interface_id }}"
  49. security_groups: "{{ ec2_launch_sec_groups | split(';') }}"
  50. subnet_id: "{{ ec2_launch_subnet }}"
  51. when: ec2_launch_sec_groups is defined
  52. delegate_to: localhost
  53. - name: Grab our local and global addresses
  54. include_role:
  55. name: ec2_hosts
  56. vars:
  57. ec2_hosts_tag: "{{ ec2_launch_tag_name }}"
  58. - name: Update route53 A record
  59. include_role:
  60. name: route53
  61. vars:
  62. route53_record: "{{ item.key }}.{{ ec2_launch_domain }}"
  63. route53_value: "{{ item.value }}"
  64. loop: "{{ ec2_hosts | dict2items }}"
  65. register: ec2_launch_A
  66. - name: Update route53 AAAA record
  67. include_role:
  68. name: route53
  69. vars:
  70. route53_type: AAAA
  71. route53_record: "{{ item.key }}.{{ ec2_launch_domain }}"
  72. route53_value: "{{ item.value }}"
  73. loop: "{{ ec2_hosts_v6 | dict2items }}"
  74. register: ec2_launch_AAAA
  75. - name: Trigger keys update
  76. debug: msg="IP addresses changed"
  77. when: ec2_launch_A.changed or ec2_launch_AAAA.changed
  78. notify: known_hosts
  79. - name: Find tagged instances
  80. amazon.aws.ec2_instance_info:
  81. region: "{{ ec2_launch_region }}"
  82. filters: '{
  83. "tag:{{ ec2_launch_tag_name }}": "{{ ec2_launch_tag_value }}",
  84. "instance-state-name": [ "running" ]
  85. }'
  86. register: ec2_launch_tagged
  87. delegate_to: localhost
  88. when: ec2_launch_ebs_match
  89. - name: Find tagged EBS volumes
  90. amazon.aws.ec2_vol_info:
  91. region: "{{ ec2_launch_region }}"
  92. filters: '{ "tag:{{ ec2_launch_tag_name }}": "{{ ec2_launch_tag_value }}" }'
  93. register: ec2_launch_ebs
  94. delegate_to: localhost
  95. when: ec2_launch_ebs_match
  96. - name: Attach matching volumes
  97. amazon.aws.ec2_vol:
  98. region: "{{ ec2_launch_region }}"
  99. id: "{{ ec2_launch_ebs.volumes[0].id }}"
  100. instance: "{{ ec2_launch_tagged.instances[0].instance_id }}"
  101. delegate_to: localhost
  102. when: ec2_launch_ebs_match