From 0954f8457272eec6b0784bd7f4629a05e82cb7fd Mon Sep 17 00:00:00 2001 From: Thomas Woerner <twoerner@redhat.com> Date: Wed, 17 Apr 2019 15:08:36 +0200 Subject: [PATCH] ipa[server,replica,client]: Do not use meta end_play Meta end_play has been used as a simple solution to end the playbook processing in special conditions, like for example when the deployment was already done before. meta end_play has been replaced with blocks and conditions for these blocks. Fixes: #70 (Avoid using meta end_play) --- roles/ipaclient/tasks/install.yml | 224 ++++++++++++++--------------- roles/ipareplica/tasks/install.yml | 9 +- roles/ipaserver/tasks/install.yml | 10 +- 3 files changed, 122 insertions(+), 121 deletions(-) diff --git a/roles/ipaclient/tasks/install.yml b/roles/ipaclient/tasks/install.yml index 6434bd1d..9a148f9d 100644 --- a/roles/ipaclient/tasks/install.yml +++ b/roles/ipaclient/tasks/install.yml @@ -53,20 +53,12 @@ enable_dns_updates: "{{ ipassd_enable_dns_updates }}" register: result_ipaclient_test -- meta: end_play - when: result_ipaclient_test.client_already_configured and not ipaclient_allow_repair | bool and not ipaclient_force_join | bool - -- name: Install - Set default principal if no keytab is given - set_fact: - ipaadmin_principal: admin - when: ipaadmin_principal is undefined and ipaclient_keytab is undefined - -- name: Install - Cleanup leftover ccache - file: - path: "/etc/ipa/.dns_ccache" - state: absent - - block: + - name: Install - Cleanup leftover ccache + file: + path: "/etc/ipa/.dns_ccache" + state: absent + - name: Install - Configure NTP ipaclient_setup_ntp: ### basic ### @@ -143,6 +135,14 @@ when: ipaclient_use_otp | bool - block: + # This block is executed only when + # not (not ipaclient_on_master | bool and + # not result_ipaclient_join.changed and + # not ipaclient_allow_repair | bool and + # (result_ipaclient_test_keytab.krb5_keytab_ok or + # (result_ipaclient_join.already_joined is defined and + # result_ipaclient_join.already_joined))) + - name: Install - Check if principal and keytab are set fail: msg="Principal and keytab cannot be used together" when: ipaadmin_principal is defined and ipaadmin_principal != "" and ipaclient_keytab is defined and ipaclient_keytab != "" @@ -187,10 +187,6 @@ when: not ipaclient_on_master | bool and (not result_ipaclient_test_keytab.krb5_keytab_ok or ipaclient_force_join) - block: - - name: Install - End playbook processing - file: - path: "/etc/ipa/.dns_ccache" - state: absent - fail: msg: "The krb5 configuration is not correct, please enable allow_repair to fix this." when: not result_ipaclient_test_keytab.krb5_conf_ok @@ -200,104 +196,106 @@ - fail: msg: "The ca.crt file is missing, please enable allow_repair to fix this." when: not result_ipaclient_test_keytab.ca_crt_exists - - meta: end_play when: not ipaclient_on_master | bool and not result_ipaclient_join.changed and not ipaclient_allow_repair | bool and (result_ipaclient_test_keytab.krb5_keytab_ok or (result_ipaclient_join.already_joined is defined and result_ipaclient_join.already_joined)) - - name: Install - Configure IPA default.conf - ipaclient_ipa_conf: - servers: "{{ result_ipaclient_test.servers }}" - domain: "{{ result_ipaclient_test.domain }}" - realm: "{{ result_ipaclient_test.realm }}" - hostname: "{{ result_ipaclient_test.hostname }}" - basedn: "{{ result_ipaclient_test.basedn }}" - when: not ipaclient_on_master | bool - - - name: Install - Configure SSSD - ipaclient_setup_sssd: - servers: "{{ result_ipaclient_test.servers }}" - domain: "{{ result_ipaclient_test.domain }}" - realm: "{{ result_ipaclient_test.realm }}" - hostname: "{{ result_ipaclient_test.hostname }}" - on_master: "{{ ipaclient_on_master }}" - no_ssh: "{{ ipaclient_no_ssh }}" - no_sshd: "{{ ipaclient_no_sshd }}" - no_sudo: "{{ ipaclient_no_sudo }}" - all_ip_addresses: "{{ ipaclient_all_ip_addresses }}" - fixed_primary: "{{ ipassd_fixed_primary }}" - permit: "{{ ipassd_permit }}" - enable_dns_updates: "{{ ipassd_enable_dns_updates }}" - preserve_sssd: "{{ ipassd_preserve_sssd }}" - no_krb5_offline_passwords: "{{ ipassd_no_krb5_offline_passwords }}" - - - name: Install - Configure krb5 for IPA realm - ipaclient_setup_krb5: - realm: "{{ result_ipaclient_test.realm }}" - domain: "{{ result_ipaclient_test.domain }}" - servers: "{{ result_ipaclient_test.servers }}" - kdc: "{{ result_ipaclient_test.kdc }}" - dnsok: "{{ result_ipaclient_test.dnsok }}" - client_domain: "{{ result_ipaclient_test.client_domain }}" - hostname: "{{ result_ipaclient_test.hostname }}" - sssd: "{{ result_ipaclient_test.sssd }}" - force: "{{ ipaclient_force }}" - #on_master: "{{ ipaclient_on_master }}" - when: not ipaclient_on_master | bool - - - name: Install - IPA API calls for remaining enrollment parts - ipaclient_api: - servers: "{{ result_ipaclient_test.servers }}" - realm: "{{ result_ipaclient_test.realm }}" - hostname: "{{ result_ipaclient_test.hostname }}" - #debug: yes - register: result_ipaclient_api - - - name: Install - Fix IPA ca - ipaclient_fix_ca: - servers: "{{ result_ipaclient_test.servers }}" - realm: "{{ result_ipaclient_test.realm }}" - basedn: "{{ result_ipaclient_test.basedn }}" - allow_repair: "{{ ipaclient_allow_repair }}" - when: not ipaclient_on_master | bool and result_ipaclient_test_keytab.krb5_keytab_ok and not result_ipaclient_test_keytab.ca_crt_exists - - - name: Install - Create IPA NSS database - ipaclient_setup_nss: - servers: "{{ result_ipaclient_test.servers }}" - domain: "{{ result_ipaclient_test.domain }}" - realm: "{{ result_ipaclient_test.realm }}" - basedn: "{{ result_ipaclient_test.basedn }}" - hostname: "{{ result_ipaclient_test.hostname }}" - subject_base: "{{ result_ipaclient_api.subject_base }}" - principal: "{{ ipaadmin_principal | default(omit) }}" - mkhomedir: "{{ ipaclient_mkhomedir }}" - ca_enabled: "{{ result_ipaclient_api.ca_enabled }}" - on_master: "{{ ipaclient_on_master }}" - - - name: Install - Configure SSH and SSHD - ipaclient_setup_ssh: - servers: "{{ result_ipaclient_test.servers }}" - sssd: "{{ result_ipaclient_test.sssd }}" - no_ssh: "{{ ipaclient_no_ssh }}" - ssh_trust_dns: "{{ ipaclient_ssh_trust_dns }}" - no_sshd: "{{ ipaclient_no_sshd }}" - - - name: Install - Configure automount - ipaclient_setup_automount: - servers: "{{ result_ipaclient_test.servers }}" - sssd: "{{ result_ipaclient_test.sssd }}" - automount_location: "{{ ipaautomount_location | default(omit) }}" - - - name: Install - Configure firefox - ipaclient_setup_firefox: - firefox_dir: "{{ ipaclient_firefox_dir | default(omit) }}" - when: ipaclient_configure_firefox | bool - - - name: Install - Configure NIS - ipaclient_setup_nis: - domain: "{{ result_ipaclient_test.domain }}" - nisdomain: "{{ ipaclient_nisdomain | default(omit)}}" - when: not ipaclient_no_nisdomain | bool - - when: not ansible_check_mode + - block: + - name: Install - Configure IPA default.conf + ipaclient_ipa_conf: + servers: "{{ result_ipaclient_test.servers }}" + domain: "{{ result_ipaclient_test.domain }}" + realm: "{{ result_ipaclient_test.realm }}" + hostname: "{{ result_ipaclient_test.hostname }}" + basedn: "{{ result_ipaclient_test.basedn }}" + when: not ipaclient_on_master | bool + + - name: Install - Configure SSSD + ipaclient_setup_sssd: + servers: "{{ result_ipaclient_test.servers }}" + domain: "{{ result_ipaclient_test.domain }}" + realm: "{{ result_ipaclient_test.realm }}" + hostname: "{{ result_ipaclient_test.hostname }}" + on_master: "{{ ipaclient_on_master }}" + no_ssh: "{{ ipaclient_no_ssh }}" + no_sshd: "{{ ipaclient_no_sshd }}" + no_sudo: "{{ ipaclient_no_sudo }}" + all_ip_addresses: "{{ ipaclient_all_ip_addresses }}" + fixed_primary: "{{ ipassd_fixed_primary }}" + permit: "{{ ipassd_permit }}" + enable_dns_updates: "{{ ipassd_enable_dns_updates }}" + preserve_sssd: "{{ ipassd_preserve_sssd }}" + no_krb5_offline_passwords: "{{ ipassd_no_krb5_offline_passwords }}" + + - name: Install - Configure krb5 for IPA realm + ipaclient_setup_krb5: + realm: "{{ result_ipaclient_test.realm }}" + domain: "{{ result_ipaclient_test.domain }}" + servers: "{{ result_ipaclient_test.servers }}" + kdc: "{{ result_ipaclient_test.kdc }}" + dnsok: "{{ result_ipaclient_test.dnsok }}" + client_domain: "{{ result_ipaclient_test.client_domain }}" + hostname: "{{ result_ipaclient_test.hostname }}" + sssd: "{{ result_ipaclient_test.sssd }}" + force: "{{ ipaclient_force }}" + #on_master: "{{ ipaclient_on_master }}" + when: not ipaclient_on_master | bool + + - name: Install - IPA API calls for remaining enrollment parts + ipaclient_api: + servers: "{{ result_ipaclient_test.servers }}" + realm: "{{ result_ipaclient_test.realm }}" + hostname: "{{ result_ipaclient_test.hostname }}" + #debug: yes + register: result_ipaclient_api + + - name: Install - Fix IPA ca + ipaclient_fix_ca: + servers: "{{ result_ipaclient_test.servers }}" + realm: "{{ result_ipaclient_test.realm }}" + basedn: "{{ result_ipaclient_test.basedn }}" + allow_repair: "{{ ipaclient_allow_repair }}" + when: not ipaclient_on_master | bool and result_ipaclient_test_keytab.krb5_keytab_ok and not result_ipaclient_test_keytab.ca_crt_exists + + - name: Install - Create IPA NSS database + ipaclient_setup_nss: + servers: "{{ result_ipaclient_test.servers }}" + domain: "{{ result_ipaclient_test.domain }}" + realm: "{{ result_ipaclient_test.realm }}" + basedn: "{{ result_ipaclient_test.basedn }}" + hostname: "{{ result_ipaclient_test.hostname }}" + subject_base: "{{ result_ipaclient_api.subject_base }}" + principal: "{{ ipaadmin_principal | default(omit) }}" + mkhomedir: "{{ ipaclient_mkhomedir }}" + ca_enabled: "{{ result_ipaclient_api.ca_enabled }}" + on_master: "{{ ipaclient_on_master }}" + + - name: Install - Configure SSH and SSHD + ipaclient_setup_ssh: + servers: "{{ result_ipaclient_test.servers }}" + sssd: "{{ result_ipaclient_test.sssd }}" + no_ssh: "{{ ipaclient_no_ssh }}" + ssh_trust_dns: "{{ ipaclient_ssh_trust_dns }}" + no_sshd: "{{ ipaclient_no_sshd }}" + + - name: Install - Configure automount + ipaclient_setup_automount: + servers: "{{ result_ipaclient_test.servers }}" + sssd: "{{ result_ipaclient_test.sssd }}" + automount_location: "{{ ipaautomount_location | default(omit) }}" + + - name: Install - Configure firefox + ipaclient_setup_firefox: + firefox_dir: "{{ ipaclient_firefox_dir | default(omit) }}" + when: ipaclient_configure_firefox | bool + + - name: Install - Configure NIS + ipaclient_setup_nis: + domain: "{{ result_ipaclient_test.domain }}" + nisdomain: "{{ ipaclient_nisdomain | default(omit)}}" + when: not ipaclient_no_nisdomain | bool + + when: not (not ipaclient_on_master | bool and not result_ipaclient_join.changed and not ipaclient_allow_repair | bool and (result_ipaclient_test_keytab.krb5_keytab_ok or (result_ipaclient_join.already_joined is defined and result_ipaclient_join.already_joined))) + + when: not ansible_check_mode and not (result_ipaclient_test.client_already_configured and not ipaclient_allow_repair | bool and not ipaclient_force_join | bool) always: - name: Cleanup leftover ccache diff --git a/roles/ipareplica/tasks/install.yml b/roles/ipareplica/tasks/install.yml index 334b745d..59dd0ded 100644 --- a/roles/ipareplica/tasks/install.yml +++ b/roles/ipareplica/tasks/install.yml @@ -68,10 +68,11 @@ no_dnssec_validation: "{{ ipareplica_no_dnssec_validation }}" register: result_ipareplica_test -- meta: end_play - when: result_ipareplica_test.client_already_configured is defined or result_ipareplica_test.server_already_configured is defined - - block: + # This block is executed only when + # not ansible_check_mode and + # not (result_ipareplica_test.client_already_configured is defined or + # result_ipareplica_test.server_already_configured is defined) - name: Install - Setup client include_role: @@ -626,4 +627,4 @@ state: absent when: result_ipareplica_enable_ipa.changed - when: not ansible_check_mode + when: not ansible_check_mode and not (result_ipareplica_test.client_already_configured is defined or result_ipareplica_test.server_already_configured is defined) diff --git a/roles/ipaserver/tasks/install.yml b/roles/ipaserver/tasks/install.yml index 2e652847..aaf07800 100644 --- a/roles/ipaserver/tasks/install.yml +++ b/roles/ipaserver/tasks/install.yml @@ -93,10 +93,12 @@ ### additional ### register: result_ipaserver_test -- meta: end_play - when: not result_ipaserver_test.changed and (result_ipaserver_test.client_already_configured is defined or result_ipaserver_test.server_already_configured is defined) - - block: + # This block is executed only when + # not ansible_check_mode and + # not (not result_ipaserver_test.changed and + # (result_ipaserver_test.client_already_configured is defined or + # result_ipaserver_test.server_already_configured is defined) - block: - name: Install - Master password creation @@ -390,4 +392,4 @@ {{ "--add-service=ntp" if not ipaclient_no_ntp | bool else "" }} when: ipaserver_setup_firewalld | bool - when: not ansible_check_mode + when: not ansible_check_mode and not (not result_ipaserver_test.changed and (result_ipaserver_test.client_already_configured is defined or result_ipaserver_test.server_already_configured is defined)) -- GitLab