diff options
| author | Tomas Sedovic <tomas@sedovic.cz> | 2017-10-30 17:53:02 +0100 | 
|---|---|---|
| committer | Tomas Sedovic <tomas@sedovic.cz> | 2017-11-07 14:35:46 +1100 | 
| commit | fabf16250b3947a04fc3b3bcb9b6fc7c1265651b (patch) | |
| tree | 18906f55088b331f578cdab542c59e9cd0734518 /roles/openshift_openstack | |
| parent | eb1f8107bb5b76cec7004f9a1ea7effab5aa0516 (diff) | |
| download | openshift-fabf16250b3947a04fc3b3bcb9b6fc7c1265651b.tar.gz openshift-fabf16250b3947a04fc3b3bcb9b6fc7c1265651b.tar.bz2 openshift-fabf16250b3947a04fc3b3bcb9b6fc7c1265651b.tar.xz openshift-fabf16250b3947a04fc3b3bcb9b6fc7c1265651b.zip | |
Add a stub of the dns record update code in
This will mostly not work but it's a starting point.
Diffstat (limited to 'roles/openshift_openstack')
| -rw-r--r-- | roles/openshift_openstack/defaults/main.yml | 6 | ||||
| -rw-r--r-- | roles/openshift_openstack/tasks/populate-dns.yml | 167 | 
2 files changed, 173 insertions, 0 deletions
| diff --git a/roles/openshift_openstack/defaults/main.yml b/roles/openshift_openstack/defaults/main.yml index 05f1c0911..19e6e6f51 100644 --- a/roles/openshift_openstack/defaults/main.yml +++ b/roles/openshift_openstack/defaults/main.yml @@ -47,3 +47,9 @@ docker_data_size: "95%VG"  docker_dm_basesize: "3G"  container_root_lv_name: "dockerlv"  container_root_lv_mount_path: "/var/lib/docker" + + +# populate-dns +dns_records_rm: [] +dns_records_add: [] +external_nsupdate_keys: {} diff --git a/roles/openshift_openstack/tasks/populate-dns.yml b/roles/openshift_openstack/tasks/populate-dns.yml index f1a868a19..c8243dc1f 100644 --- a/roles/openshift_openstack/tasks/populate-dns.yml +++ b/roles/openshift_openstack/tasks/populate-dns.yml @@ -3,3 +3,170 @@  # this is an optional step -- the deployers may do whatever else they  # wish here. + + +# TODO: build records +# TODO: run nsupdate + + +- name: "Generate list of private A records" +  set_fact: +    private_records: "{{ [ { 'type': 'A', 'hostname': hostvars[item]['ansible_hostname'], 'ip': hostvars[item]['private_v4'] } ] }}" +  with_items: "{{ groups['cluster_hosts'] }}" + +# - name: "Add wildcard records to the private A records for infrahosts" +#   set_fact: +#     private_records: "{{ private_records | default([]) + [ { 'type': 'A', 'hostname': '*.' + openshift_app_domain, 'ip': hostvars[item]['private_v4'] } ] }}" +#   with_items: "{{ groups['infra_hosts'] }}" + +# - name: "Add public master cluster hostname records to the private A records (single master)" +#   set_fact: +#     private_records: "{{ private_records | default([]) + [ { 'type': 'A', 'hostname': (hostvars[groups.masters[0]].openshift_master_cluster_public_hostname | replace(full_dns_domain, ''))[:-1], 'ip': hostvars[groups.masters[0]].private_v4 } ] }}" +#   when: +#     - hostvars[groups.masters[0]].openshift_master_cluster_public_hostname is defined +#     - openstack_num_masters == 1 + +# - name: "Add public master cluster hostname records to the private A records (multi-master)" +#   set_fact: +#     private_records: "{{ private_records | default([]) + [ { 'type': 'A', 'hostname': (hostvars[groups.masters[0]].openshift_master_cluster_public_hostname | replace(full_dns_domain, ''))[:-1], 'ip': hostvars[groups.lb[0]].private_v4 } ] }}" +#   when: +#     - hostvars[groups.masters[0]].openshift_master_cluster_public_hostname is defined +#     - openstack_num_masters > 1 + +- name: "Set the private DNS server to use the external value (if provided)" +  set_fact: +    nsupdate_server_private: "{{ external_nsupdate_keys['private']['server'] }}" +    nsupdate_key_secret_private: "{{ external_nsupdate_keys['private']['key_secret'] }}" +    nsupdate_key_algorithm_private: "{{ external_nsupdate_keys['private']['key_algorithm'] }}" +    nsupdate_private_key_name: "{{ external_nsupdate_keys['private']['key_name']|default('private-' + full_dns_domain) }}" +  when: +    - external_nsupdate_keys is defined +    - external_nsupdate_keys['private'] is defined + + +- name: "Generate the private Add section for DNS" +  set_fact: +    private_named_records: +      - view: "private" +        zone: "{{ full_dns_domain }}" +        server: "{{ nsupdate_server_private }}" +        key_name: "{{ nsupdate_private_key_name|default('private-' + full_dns_domain) }}" +        key_secret: "{{ nsupdate_key_secret_private }}" +        key_algorithm: "{{ nsupdate_key_algorithm_private | lower }}" +        entries: "{{ private_records }}" + +# - name: "Generate list of public A records" +#   set_fact: +#     public_records: "{{ public_records | default([]) + [ { 'type': 'A', 'hostname': hostvars[item]['ansible_hostname'], 'ip': hostvars[item]['public_v4'] } ] }}" +#   with_items: "{{ groups['cluster_hosts'] }}" +#   when: hostvars[item]['public_v4'] is defined + +# - name: "Add wildcard records to the public A records" +#   set_fact: +#     public_records: "{{ public_records | default([]) + [ { 'type': 'A', 'hostname': '*.' + openshift_app_domain, 'ip': hostvars[item]['public_v4'] } ] }}" +#   with_items: "{{ groups['infra_hosts'] }}" +#   when: hostvars[item]['public_v4'] is defined + +# - name: "Add public master cluster hostname records to the public A records (single master)" +#   set_fact: +#     public_records: "{{ public_records | default([]) + [ { 'type': 'A', 'hostname': (hostvars[groups.masters[0]].openshift_master_cluster_public_hostname | replace(full_dns_domain, ''))[:-1], 'ip': hostvars[groups.masters[0]].public_v4 } ] }}" +#   when: +#     - hostvars[groups.masters[0]].openshift_master_cluster_public_hostname is defined +#     - openstack_num_masters == 1 +#     - not use_bastion|bool + +# - name: "Add public master cluster hostname records to the public A records (single master behind a bastion)" +#   set_fact: +#     public_records: "{{ public_records | default([]) + [ { 'type': 'A', 'hostname': (hostvars[groups.masters[0]].openshift_master_cluster_public_hostname | replace(full_dns_domain, ''))[:-1], 'ip': hostvars[groups.bastions[0]].public_v4 } ] }}" +#   when: +#     - hostvars[groups.masters[0]].openshift_master_cluster_public_hostname is defined +#     - openstack_num_masters == 1 +#     - use_bastion|bool + +# - name: "Add public master cluster hostname records to the public A records (multi-master)" +#   set_fact: +#     public_records: "{{ public_records | default([]) + [ { 'type': 'A', 'hostname': (hostvars[groups.masters[0]].openshift_master_cluster_public_hostname | replace(full_dns_domain, ''))[:-1], 'ip': hostvars[groups.lb[0]].public_v4 } ] }}" +#   when: +#     - hostvars[groups.masters[0]].openshift_master_cluster_public_hostname is defined +#     - openstack_num_masters > 1 + +# - name: "Set the public DNS server details to use the external value (if provided)" +#   set_fact: +#     nsupdate_server_public: "{{ external_nsupdate_keys['public']['server'] }}" +#     nsupdate_key_secret_public: "{{ external_nsupdate_keys['public']['key_secret'] }}" +#     nsupdate_key_algorithm_public: "{{ external_nsupdate_keys['public']['key_algorithm'] }}" +#     nsupdate_public_key_name: "{{ external_nsupdate_keys['public']['key_name']|default('public-' + full_dns_domain) }}" +#   when: +#     - external_nsupdate_keys is defined +#     - external_nsupdate_keys['public'] is defined + +# - name: "Set the public DNS server details to use the provisioned value" +#   set_fact: +#     nsupdate_server_public: "{{ hostvars[groups['dns'][0]].public_v4 }}" +#     nsupdate_key_secret_public: "{{ hostvars[groups['dns'][0]].nsupdate_keys['public-' + full_dns_domain].key_secret }}" +#     nsupdate_key_algorithm_public: "{{ hostvars[groups['dns'][0]].nsupdate_keys['public-' + full_dns_domain].key_algorithm }}" +#   when: +#     - nsupdate_server_public is undefined + +# - name: "Generate the public Add section for DNS" +#   set_fact: +#     public_named_records: +#       - view: "public" +#         zone: "{{ full_dns_domain }}" +#         server: "{{ nsupdate_server_public }}" +#         key_name: "{{ nsupdate_public_key_name|default('public-' + full_dns_domain) }}" +#         key_secret: "{{ nsupdate_key_secret_public }}" +#         key_algorithm: "{{ nsupdate_key_algorithm_public | lower }}" +#         entries: "{{ public_records }}" + + + + + + +- name: "Generate the final dns_records_add" +  set_fact: +    # TODO(shadower): enable this when we add public records +    #dns_records_add: "{{ private_named_records + public_named_records }}" +    dns_records_add: "{{ private_named_records }}" + + + +# RUN NSUPDATE + +- name: "Remove any deleted DNS A records" +  nsupdate: +    key_name: "{{ item.0.key_name }}" +    key_secret: "{{ item.0.key_secret }}" +    key_algorithm: "{{ item.0.key_algorithm }}" +    server: "{{ item.0.server }}" +    zone: "{{ item.0.zone }}" +    record: "{{ item.1.hostname }}" +    type: "{{ item.1.type }}" +    state: absent +  with_subelements: +  - "{{ dns_records_rm | default({}) }}" +  - entries +  register: nsupdate_remove_result +  until: nsupdate_remove_result|succeeded +  retries: 10 +  delay: 1 + +- name: "Add DNS A records" +  nsupdate: +    key_name: "{{ item.0.key_name }}" +    key_secret: "{{ item.0.key_secret }}" +    key_algorithm: "{{ item.0.key_algorithm }}" +    server: "{{ item.0.server }}" +    zone: "{{ item.0.zone }}" +    record: "{{ item.1.hostname }}" +    value: "{{ item.1.ip }}" +    type: "{{ item.1.type }}" +    state: present +  with_subelements: +  - "{{ dns_records_add | default({}) }}" +  - entries +  register: nsupdate_add_result +  until: nsupdate_add_result|succeeded +  retries: 10 +  delay: 1 | 
