ipaconfig: Prevent configuration issues due to test failure.

Currently, if a test fails during execution of ipaconfig playbook
tests, or if the failed task is the task reverting to the original
configuration fails, the testing host might be left in a state that
may cause other tests to fail due to the inconsistent configuration
state.

This patch ensures that if a test fails, a known configuration, the
same as used is the default installation of FreeIPA used in upstream
CI, is applied to the host, providing safe environment for testing.
This commit is contained in:
Rafael Guterres Jeffman
2021-09-03 12:14:21 -03:00
parent 8dec9f774b
commit a5fa3d862a

View File

@@ -7,6 +7,7 @@
tasks: tasks:
- include_tasks: ../env_freeipa_facts.yml - include_tasks: ../env_freeipa_facts.yml
- block:
# Retrieve current configuration. # Retrieve current configuration.
- name: return current values of the global configuration options - name: return current values of the global configuration options
ipaconfig: ipaconfig:
@@ -14,12 +15,12 @@
register: previousconfig register: previousconfig
- debug: - debug:
msg: "{{previousconfig}}" var: previousconfig
# setup environment. # setup environment.
- name: create test group - name: create test group
ipagroup: ipagroup:
ipaadmin_password: 'SomeADMINpassword' ipaadmin_password: SomeADMINpassword
name: somedefaultgroup name: somedefaultgroup
- name: Ensure the default e-mail domain is ipa.test. - name: Ensure the default e-mail domain is ipa.test.
@@ -249,14 +250,14 @@
- name: change enable_migration - name: change enable_migration
ipaconfig: ipaconfig:
ipaadmin_password: SomeADMINpassword ipaadmin_password: SomeADMINpassword
enable_migration: '{{ not previousconfig.config.enable_migration }}' enable_migration: '{{ not (previousconfig.config.enable_migration | bool) }}'
register: result register: result
failed_when: not result.changed or result.failed failed_when: not result.changed or result.failed
- name: change enable_migration, again - name: change enable_migration, again
ipaconfig: ipaconfig:
ipaadmin_password: SomeADMINpassword ipaadmin_password: SomeADMINpassword
enable_migration: '{{ not previousconfig.config.enable_migration }}' enable_migration: '{{ not (previousconfig.config.enable_migration | bool) }}'
register: result register: result
failed_when: result.changed or result.failed failed_when: result.changed or result.failed
@@ -332,20 +333,20 @@
- name: reset changed fields - name: reset changed fields
ipaconfig: ipaconfig:
ipaadmin_password: 'SomeADMINpassword' ipaadmin_password: SomeADMINpassword
maxusername: '{{previousconfig.config.maxusername | default(omit)}}' maxusername: '{{ previousconfig.config.maxusername | default(32) | int }}'
homedirectory: '{{ previousconfig.config.homedirectory | default(omit) }}' homedirectory: '{{ previousconfig.config.homedirectory | default(omit) }}'
defaultshell: '{{ previousconfig.config.defaultshell | default(omit) }}' defaultshell: '{{ previousconfig.config.defaultshell | default(omit) }}'
defaultgroup: '{{ previousconfig.config.defaultgroup | default(omit) }}' defaultgroup: '{{ previousconfig.config.defaultgroup | default(omit) }}'
emaildomain: '{{ previousconfig.config.emaildomain | default(omit) }}' emaildomain: '{{ previousconfig.config.emaildomain | default(omit) }}'
searchtimelimit: '{{previousconfig.config.searchtimelimit | default(omit)}}' searchtimelimit: '{{ previousconfig.config.searchtimelimit | default(2) | int }}'
searchrecordslimit: '{{previousconfig.config.searchrecordslimit | default(omit)}}' searchrecordslimit: '{{ previousconfig.config.searchrecordslimit | default(100) | int }}'
usersearch: '{{ previousconfig.config.usersearch | default(omit) }}' usersearch: '{{ previousconfig.config.usersearch | default(omit) }}'
groupsearch: '{{ previousconfig.config.groupsearch | default(omit) }}' groupsearch: '{{ previousconfig.config.groupsearch | default(omit) }}'
enable_migration: '{{previousconfig.config.enable_migration | default(omit)}}' enable_migration: '{{ previousconfig.config.enable_migration | default(False) | bool }}'
groupobjectclasses: '{{ previousconfig.config.groupobjectclasses | default(omit) }}' groupobjectclasses: '{{ previousconfig.config.groupobjectclasses | default(omit) }}'
userobjectclasses: '{{ previousconfig.config.userobjectclasses | default(omit) }}' userobjectclasses: '{{ previousconfig.config.userobjectclasses | default(omit) }}'
pwdexpnotify: '{{previousconfig.config.pwdexpnotify | default(omit)}}' pwdexpnotify: '{{ previousconfig.config.pwdexpnotify | default(4) | int }}'
configstring: '{{ previousconfig.config.configstring | default(omit) }}' configstring: '{{ previousconfig.config.configstring | default(omit) }}'
selinuxusermapdefault: '{{ previousconfig.config.selinuxusermapdefault | default(omit) }}' selinuxusermapdefault: '{{ previousconfig.config.selinuxusermapdefault | default(omit) }}'
selinuxusermaporder: '{{ previousconfig.config.selinuxusermaporder | default(omit) }}' selinuxusermaporder: '{{ previousconfig.config.selinuxusermaporder | default(omit) }}'
@@ -365,20 +366,20 @@
- name: reset changed fields, again - name: reset changed fields, again
ipaconfig: ipaconfig:
ipaadmin_password: 'SomeADMINpassword' ipaadmin_password: SomeADMINpassword
maxusername: '{{previousconfig.config.maxusername | default(omit)}}' maxusername: '{{ previousconfig.config.maxusername | default(omit) | int }}'
homedirectory: '{{ previousconfig.config.homedirectory | default(omit) }}' homedirectory: '{{ previousconfig.config.homedirectory | default(omit) }}'
defaultshell: '{{ previousconfig.config.defaultshell | default(omit) }}' defaultshell: '{{ previousconfig.config.defaultshell | default(omit) }}'
defaultgroup: '{{ previousconfig.config.defaultgroup | default(omit) }}' defaultgroup: '{{ previousconfig.config.defaultgroup | default(omit) }}'
emaildomain: '{{ previousconfig.config.emaildomain | default(omit) }}' emaildomain: '{{ previousconfig.config.emaildomain | default(omit) }}'
searchtimelimit: '{{previousconfig.config.searchtimelimit | default(omit)}}' searchtimelimit: '{{ previousconfig.config.searchtimelimit | default(omit) | int }}'
searchrecordslimit: '{{previousconfig.config.searchrecordslimit | default(omit)}}' searchrecordslimit: '{{ previousconfig.config.searchrecordslimit | default(omit) | int }}'
usersearch: '{{ previousconfig.config.usersearch | default(omit) }}' usersearch: '{{ previousconfig.config.usersearch | default(omit) }}'
groupsearch: '{{ previousconfig.config.groupsearch | default(omit) }}' groupsearch: '{{ previousconfig.config.groupsearch | default(omit) }}'
enable_migration: '{{previousconfig.config.enable_migration | default(omit)}}' enable_migration: '{{ previousconfig.config.enable_migration | default(omit) | bool }}'
groupobjectclasses: '{{ previousconfig.config.groupobjectclasses | default(omit) }}' groupobjectclasses: '{{ previousconfig.config.groupobjectclasses | default(omit) }}'
userobjectclasses: '{{ previousconfig.config.userobjectclasses | default(omit) }}' userobjectclasses: '{{ previousconfig.config.userobjectclasses | default(omit) }}'
pwdexpnotify: '{{previousconfig.config.pwdexpnotify | default(omit)}}' pwdexpnotify: '{{ previousconfig.config.pwdexpnotify | default(omit) | int }}'
configstring: '{{ previousconfig.config.configstring | default(omit) }}' configstring: '{{ previousconfig.config.configstring | default(omit) }}'
selinuxusermapdefault: '{{ previousconfig.config.selinuxusermapdefault | default(omit) }}' selinuxusermapdefault: '{{ previousconfig.config.selinuxusermapdefault | default(omit) }}'
selinuxusermaporder: '{{ previousconfig.config.selinuxusermaporder | default(omit) }}' selinuxusermaporder: '{{ previousconfig.config.selinuxusermaporder | default(omit) }}'
@@ -396,10 +397,39 @@
maxhostname: '{{ previousconfig.config.maxhostname | default(omit) }}' maxhostname: '{{ previousconfig.config.maxhostname | default(omit) }}'
when: ipa_version is version('4.8.0', '>=') when: ipa_version is version('4.8.0', '>=')
# cleanup rescue:
- name: Set fields to IPA default, due to error
ipaconfig:
ipaadmin_password: SomeADMINpassword
maxusername: '{{ previousconfig.config.maxusername | default(omit) | int }}'
homedirectory: '{{ previousconfig.config.homedirectory | default(omit) }}'
defaultshell: '{{ previousconfig.config.defaultshell | default(omit) }}'
defaultgroup: '{{ previousconfig.config.defaultgroup | default(omit) }}'
emaildomain: '{{ previousconfig.config.emaildomain | default(omit) }}'
searchtimelimit: '{{ previousconfig.config.searchtimelimit | default(omit) | int }}'
searchrecordslimit: '{{ previousconfig.config.searchrecordslimit | default(omit) | int }}'
usersearch: '{{ previousconfig.config.usersearch | default(omit) }}'
groupsearch: '{{ previousconfig.config.groupsearch | default(omit) }}'
enable_migration: '{{ previousconfig.config.enable_migration | default(omit) | bool }}'
groupobjectclasses: '{{ previousconfig.config.groupobjectclasses | default(omit) }}'
userobjectclasses: '{{ previousconfig.config.userobjectclasses | default(omit) }}'
pwdexpnotify: '{{ previousconfig.config.pwdexpnotify | default(omit) | int }}'
configstring: '{{ previousconfig.config.configstring | default(omit) }}'
selinuxusermapdefault: '{{ previousconfig.config.selinuxusermapdefault | default(omit) }}'
selinuxusermaporder: '{{ previousconfig.config.selinuxusermaporder | default(omit) }}'
pac_type: '{{ previousconfig.config.pac_type | default(omit) }}'
user_auth_type: '{{ previousconfig.config.user_auth_type | default(omit) }}'
domain_resolution_order: '{{ previousconfig.config.domain_resolution_order | default(omit) }}'
ca_renewal_master_server: '{{ previousconfig.config.ca_renewal_master_server | default(omit) }}'
register: result
- debug:
msg: "Due to a test failure, IPA CA-Renewal Server might not be correctly be set. Check your configuration."
always:
# cleanup
- name: cleanup test group - name: cleanup test group
ipagroup: ipagroup:
ipaadmin_password: 'SomeADMINpassword' ipaadmin_password: SomeADMINpassword
name: somedefaultgroup name: somedefaultgroup
state: absent state: absent