Guillaume Coré
2019-02-21 144dbf8bf274b7740b4efbde080af572032200d1
OCP 4: DRY, run dynamically 'delete_zone.yml' for each zone

both Private and Public
1 files added
1 files modified
179 ■■■■■ changed files
ansible/configs/ocp4-coreos-deployer/delete_zone.yml 52 ●●●●● patch | view | raw | blame | history
ansible/configs/ocp4-coreos-deployer/destroy_env.yml 127 ●●●●● patch | view | raw | blame | history
ansible/configs/ocp4-coreos-deployer/delete_zone.yml
New file
@@ -0,0 +1,52 @@
---
- name: Get all records from the environment private zone
  route53_facts:
    hosted_zone_id: "{{ _hostedzoneid }}"
    query: record_sets
  register: records
  until: records is succeeded
  retries: 10
  delay: "{{ 60|random(start=3, step=1) }}"
- debug:
    var: records
    verbosity: 2
- name: Delete all non-alias records from the environment zone
  route53:
    private_zone: "{{ _zone.Config.PrivateZone }}"
    zone: "{{aws_public_zone}}"
    record: "{{item.Name}}"
    type: "{{item.Type}}"
    value: "{{item.ResourceRecords|json_query('[].Value')}}"
    ttl: "{{item.TTL}}"
    state: absent
  when: >-
    'Name' in item
    and 'ResourceRecords' in item
    and item.Name != aws_public_zone
  with_items: "{{records.ResourceRecordSets }}"
  ignore_errors: yes
- name: Delete all ALIAS records from the environment public zone
  route53:
    private_zone: "{{ _zone.Config.PrivateZone }}"
    zone: "{{aws_public_zone}}"
    record: "{{item.Name | regex_replace('\\\\052', '*') }}"
    type: "{{item.Type}}"
    alias: yes
    alias_hosted_zone_id: "{{ item.AliasTarget.HostedZoneId }}"
    value: "{{ item.AliasTarget.DNSName }}"
    alias_evaluate_target_health: "{{ item.AliasTarget.EvaluateTargetHealth }}"
    state: absent
  when: >-
    'Name' in item
    and 'AliasTarget' in item
    and item.Name != aws_public_zone
  with_items: "{{records.ResourceRecordSets }}"
  ignore_errors: yes
- name: Remove route53 zone
  command: >-
    aws route53 delete-hosted-zone --id {{ _hostedzoneid }}
ansible/configs/ocp4-coreos-deployer/destroy_env.yml
@@ -294,127 +294,16 @@
      register: awsroute53zone
      changed_when: false
    - set_fact:
        hostedzoneid: "{{ item.Id | regex_replace('/hostedzone/', '') }}"
    - name: delete zones
      include_tasks: delete_zone.yml
      vars:
        _zone: "{{ loopzone }}"
        _hostedzoneid: "{{ loopzone.Id | regex_replace('/hostedzone/', '') }}"
      when:
        - item.Name == aws_public_zone
        - not item.Config.PrivateZone
        - loopzone.Name == aws_public_zone
      loop: "{{ awsroute53zone.stdout|from_json|json_query('HostedZones') }}"
    - set_fact:
        hostedzoneidprivate: "{{ item.Id | regex_replace('/hostedzone/', '') }}"
      when:
        - item.Name == aws_public_zone
        - item.Config.PrivateZone
      loop: "{{ awsroute53zone.stdout|from_json|json_query('HostedZones') }}"
    - when: hostedzoneidprivate is defined
      block:
        - name: Get all records from the environment private zone
          route53_facts:
            hosted_zone_id: "{{ hostedzoneidprivate }}"
            query: record_sets
          register: records
          until: records is succeeded
          retries: 10
          delay: "{{ 60|random(start=3, step=1) }}"
        - debug:
            var: records
            verbosity: 2
        - name: Delete all non-alias records from the environment private zone
          route53:
            private_zone: yes
            zone: "{{aws_public_zone}}"
            record: "{{item.Name}}"
            type: "{{item.Type}}"
            value: "{{item.ResourceRecords|json_query('[].Value')}}"
            ttl: "{{item.TTL}}"
            state: absent
          when: >-
            'Name' in item
            and 'ResourceRecords' in item
            and item.Name != aws_public_zone
          with_items: "{{records.ResourceRecordSets }}"
          ignore_errors: yes
        - name: Delete all ALIAS records from the environment public zone
          route53:
            private_zone: yes
            zone: "{{aws_public_zone}}"
            record: "{{item.Name | regex_replace('\\\\052', '*') }}"
            type: "{{item.Type}}"
            alias: yes
            alias_hosted_zone_id: "{{ item.AliasTarget.HostedZoneId }}"
            value: "{{ item.AliasTarget.DNSName }}"
            alias_evaluate_target_health: "{{ item.AliasTarget.EvaluateTargetHealth }}"
            state: absent
          when: >-
            'Name' in item
            and 'AliasTarget' in item
            and item.Name != aws_public_zone
          with_items: "{{records.ResourceRecordSets }}"
          ignore_errors: yes
        - name: Remove private dns zone manually because sometimes it is still there (managed by terraform)
          command: >-
            aws route53 delete-hosted-zone --id {{ hostedzoneidprivate }}
    - when: hostedzoneid is defined
      block:
        - name: Get all records from the environment public zone
          route53_facts:
            hosted_zone_id: "{{ hostedzoneid }}"
            query: record_sets
          register: records
          until: records is succeeded
          retries: 10
          delay: "{{ 60|random(start=3, step=1) }}"
        - debug:
            var: records
            verbosity: 2
        - name: Delete all non-alias records from the environment public zone
          route53:
            zone: "{{aws_public_zone}}"
            record: "{{item.Name}}"
            type: "{{item.Type}}"
            value: "{{item.ResourceRecords|json_query('[].Value')}}"
            ttl: "{{item.TTL}}"
            state: absent
          when: >-
            'Name' in item
            and 'ResourceRecords' in item
            and item.Name != aws_public_zone
          with_items: "{{records.ResourceRecordSets }}"
          ignore_errors: yes
        - name: Delete all ALIAS records from the environment public zone
          route53:
            zone: "{{aws_public_zone}}"
            record: "{{item.Name | regex_replace('\\\\052', '*') }}"
            type: "{{item.Type}}"
            alias: yes
            alias_hosted_zone_id: "{{ item.AliasTarget.HostedZoneId }}"
            value: "{{ item.AliasTarget.DNSName }}"
            alias_evaluate_target_health: "{{ item.AliasTarget.EvaluateTargetHealth }}"
            state: absent
          when: >-
            'Name' in item
            and 'AliasTarget' in item
            and item.Name != aws_public_zone
          with_items: "{{records.ResourceRecordSets }}"
          ignore_errors: yes
        - name: Remove public dns zone manually because sometimes it still has A records
          route53_zone:
            zone: "{{ aws_public_zone }}"
            state: absent
          ignore_errors: yes
      loop_control:
        loop_var: loopzone
    - name: Run infra-ec2-template-destroy
      include_role: