ipaservice: Updated and new tests for certificates and multi service handling

The tests test_services_absent.yml, test_services_present.yml and
test_services_present_slice.yml have been updated to use in memory data
for testing instead of loading json files. This made is simpler to use
variables from the playbook for example for fqdn host names.

New tests for certificates with and without trailing new lines have been
added for single service and multiple service handling.
This commit is contained in:
Thomas Woerner
2023-06-06 13:00:26 +02:00
parent 872c9e4cb2
commit 09250cb2c5
10 changed files with 735 additions and 156 deletions

View File

@@ -0,0 +1,200 @@
---
- name: Test service with certificates with and without trailing new line
hosts: ipaserver
become: true
tasks:
- name: Include tasks ../../env_freeipa_facts.yml
ansible.builtin.include_tasks: ../../env_freeipa_facts.yml
- name: Setup test environment
ansible.builtin.include_tasks: ../env_vars.yml
- name: Generate self-signed certificates.
ansible.builtin.shell:
cmd: |
openssl req -x509 -newkey rsa:2048 -days 365 -nodes -keyout "private{{ item }}.key" -out "cert{{ item }}.pem" -subj '/CN=test'
openssl x509 -outform der -in "cert{{ item }}.pem" -out "cert{{ item }}.der"
base64 "cert{{ item }}.der" -w5000 > "cert{{ item }}.b64"
with_items: [1, 2, 3]
become: no
delegate_to: localhost
# The rstrip=False for lookup will add keep the newline at the end of the
# cert and this is automatically revoved in IPA, This is an additional
# test of ipaservice later on to behave correctly in both cases.
- name: Set fact cert1,2,3 from lookup
ansible.builtin.set_fact:
cert1: "{{ lookup('file', 'cert1.b64', rstrip=False) }}"
cert2: "{{ lookup('file', 'cert2.b64', rstrip=True) }}"
cert3: "{{ lookup('file', 'cert3.b64', rstrip=False) }}"
- name: Host {{ svc_fqdn }} absent
ipahost:
ipaadmin_password: SomeADMINpassword
name: "{{ svc_fqdn }}"
state: absent
- name: Host {{ svc_fqdn }} present
ipahost:
ipaadmin_password: SomeADMINpassword
name: "{{ svc_fqdn }}"
force: true
register: result
failed_when: not result.changed or result.failed
- name: Service FOO/{{ svc_fqdn }} absent
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
continue: true
state: absent
- name: Service FOO/{{ svc_fqdn }} present
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
force: yes
register: result
failed_when: not result.changed or result.failed
- name: Service FOO/{{ svc_fqdn }} certs 1,2 members present
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert1 }}"
- "{{ cert2 }}"
action: member
register: result
failed_when: not result.changed or result.failed
- name: Service FOO/{{ svc_fqdn }} certs 1,2 members present again
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert1 }}"
- "{{ cert2 }}"
action: member
register: result
failed_when: result.changed or result.failed
- name: Service FOO/{{ svc_fqdn }} certs 1,2,3 members present
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert1 }}"
- "{{ cert2 }}"
- "{{ cert3 }}"
action: member
register: result
failed_when: not result.changed or result.failed
- name: Service FOO/{{ svc_fqdn }} certs 1,2,3 members present again
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert1 }}"
- "{{ cert2 }}"
- "{{ cert3 }}"
action: member
register: result
failed_when: result.changed or result.failed
- name: Service FOO/{{ svc_fqdn }} certs 2,3 member absent
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert2 }}"
- "{{ cert3 }}"
state: absent
action: member
register: result
failed_when: not result.changed or result.failed
- name: Service FOO/{{ svc_fqdn }} certs 2,3 member absent again
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert2 }}"
- "{{ cert3 }}"
action: member
state: absent
register: result
failed_when: result.changed or result.failed
- name: Service FOO/{{ svc_fqdn }} certs 1,2,3 members absent
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert1 }}"
- "{{ cert2 }}"
- "{{ cert3 }}"
action: member
state: absent
register: result
failed_when: not result.changed or result.failed
- name: Service FOO/{{ svc_fqdn }} certs 1,2,3 members absent again
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert1 }}"
- "{{ cert2 }}"
- "{{ cert3 }}"
action: member
state: absent
register: result
failed_when: result.changed or result.failed
- name: Service FOO/{{ svc_fqdn }} absent
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
continue: true
state: absent
register: result
failed_when: not result.changed or result.failed
- name: Service FOO/{{ svc_fqdn }} absent again
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name: "FOO/{{ svc_fqdn }}"
continue: true
state: absent
register: result
failed_when: result.changed or result.failed
- name: Host {{ svc_fqdn }} absent
ipahost:
ipaadmin_password: SomeADMINpassword
name: "{{ svc_fqdn }}"
state: absent
register: result
failed_when: not result.changed or result.failed
- name: Remove certificate files. # noqa: deprecated-command-syntax
ansible.builtin.shell:
cmd: rm -f "private{{ item }}.key" "cert{{ item }}.pem" "cert{{ item }}.der" "cert{{ item }}.b64"
with_items: [1, 2, 3]
become: no
delegate_to: localhost

View File

@@ -0,0 +1,314 @@
---
- name: Test services with certificates with and without trailing new line
hosts: ipaserver
become: true
tasks:
- name: Include tasks ../../env_freeipa_facts.yml
ansible.builtin.include_tasks: ../../env_freeipa_facts.yml
- name: Setup test environment
ansible.builtin.include_tasks: ../env_vars.yml
- name: Generate self-signed certificates.
ansible.builtin.shell:
cmd: |
openssl req -x509 -newkey rsa:2048 -days 365 -nodes -keyout "private{{ item }}.key" -out "cert{{ item }}.pem" -subj '/CN=test'
openssl x509 -outform der -in "cert{{ item }}.pem" -out "cert{{ item }}.der"
base64 "cert{{ item }}.der" -w5000 > "cert{{ item }}.b64"
with_items: [11, 12, 13, 21, 22, 23, 31, 32, 33]
become: no
delegate_to: localhost
# The rstrip=False for lookup will add keep the newline at the end of the
# cert and this is automatically revoved in IPA, This is an additional
# test of ipaservice later on to behave correctly in both cases.
- name: Set fact for certs 11,12,13,21,22,23,31,32,33 from lookup
ansible.builtin.set_fact:
cert11: "{{ lookup('file', 'cert11.b64', rstrip=True) }}"
cert12: "{{ lookup('file', 'cert12.b64', rstrip=False) }}"
cert13: "{{ lookup('file', 'cert13.b64', rstrip=True) }}"
cert21: "{{ lookup('file', 'cert21.b64', rstrip=False) }}"
cert22: "{{ lookup('file', 'cert22.b64', rstrip=False) }}"
cert23: "{{ lookup('file', 'cert23.b64', rstrip=True) }}"
cert31: "{{ lookup('file', 'cert31.b64', rstrip=False) }}"
cert32: "{{ lookup('file', 'cert32.b64', rstrip=True) }}"
cert33: "{{ lookup('file', 'cert33.b64', rstrip=False) }}"
- name: Services FOO,BAR,BAZ/{{ svc_fqdn }} absent
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name:
- "FOO/{{ svc_fqdn }}"
- "BAR/{{ svc_fqdn }}"
- "BAZ/{{ svc_fqdn }}"
continue: true
state: absent
- name: Host {{ svc_fqdn }} absent
ipahost:
ipaadmin_password: SomeADMINpassword
name: "{{ svc_fqdn }}"
state: absent
- name: Host {{ svc_fqdn }} present
ipahost:
ipaadmin_password: SomeADMINpassword
name: "{{ svc_fqdn }}"
force: true
register: result
failed_when: not result.changed or result.failed
- name: Services FOO,BAR,BAZ/{{ svc_fqdn }} present
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
services:
- name: "FOO/{{ svc_fqdn }}"
force: yes
- name: "BAR/{{ svc_fqdn }}"
force: yes
- name: "BAZ/{{ svc_fqdn }}"
force: yes
register: result
failed_when: not result.changed or result.failed
- name: Services FOO,BAR,BAZ/{{ svc_fqdn }} present
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
services:
- name: "FOO/{{ svc_fqdn }}"
force: yes
- name: "BAR/{{ svc_fqdn }}"
force: yes
- name: "BAZ/{{ svc_fqdn }}"
force: yes
register: result
failed_when: result.changed or result.failed
- name: Service FOO,BAR,BAZ/{{ svc_fqdn }} certs x1,x2 members present
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
services:
- name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert11 }}"
- "{{ cert12 }}"
- name: "BAR/{{ svc_fqdn }}"
certificate:
- "{{ cert21 }}"
- "{{ cert22 }}"
- name: "BAZ/{{ svc_fqdn }}"
certificate:
- "{{ cert31 }}"
- "{{ cert32 }}"
action: member
register: result
failed_when: not result.changed or result.failed
- name: Service FOO,BAR,BAZ/{{ svc_fqdn }} certs x1,x2 members present again
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
services:
- name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert11 }}"
- "{{ cert12 }}"
- name: "BAR/{{ svc_fqdn }}"
certificate:
- "{{ cert21 }}"
- "{{ cert22 }}"
- name: "BAZ/{{ svc_fqdn }}"
certificate:
- "{{ cert31 }}"
- "{{ cert32 }}"
action: member
register: result
failed_when: result.changed or result.failed
- name: Service FOO,BAR,BAZ/{{ svc_fqdn }} certs x1,x2,x3 members present
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
services:
- name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert11 }}"
- "{{ cert12 }}"
- "{{ cert13 }}"
- name: "BAR/{{ svc_fqdn }}"
certificate:
- "{{ cert21 }}"
- "{{ cert22 }}"
- "{{ cert23 }}"
- name: "BAZ/{{ svc_fqdn }}"
certificate:
- "{{ cert31 }}"
- "{{ cert32 }}"
- "{{ cert33 }}"
action: member
register: result
failed_when: not result.changed or result.failed
- name: Service FOO,BAR,BAZ/{{ svc_fqdn }} certs x1,x2,x3 members present again
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
services:
- name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert11 }}"
- "{{ cert12 }}"
- "{{ cert13 }}"
- name: "BAR/{{ svc_fqdn }}"
certificate:
- "{{ cert21 }}"
- "{{ cert22 }}"
- "{{ cert23 }}"
- name: "BAZ/{{ svc_fqdn }}"
certificate:
- "{{ cert31 }}"
- "{{ cert32 }}"
- "{{ cert33 }}"
action: member
register: result
failed_when: result.changed or result.failed
- name: Service FOO,BAR,BAZ/{{ svc_fqdn }} certs x2,x3 members absent
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
services:
- name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert12 }}"
- "{{ cert13 }}"
- name: "BAR/{{ svc_fqdn }}"
certificate:
- "{{ cert22 }}"
- "{{ cert23 }}"
- name: "BAZ/{{ svc_fqdn }}"
certificate:
- "{{ cert32 }}"
- "{{ cert33 }}"
action: member
state: absent
register: result
failed_when: not result.changed or result.failed
- name: Service FOO,BAR,BAZ/{{ svc_fqdn }} certs x2,x3 members absent, again
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
services:
- name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert12 }}"
- "{{ cert13 }}"
- name: "BAR/{{ svc_fqdn }}"
certificate:
- "{{ cert22 }}"
- "{{ cert23 }}"
- name: "BAZ/{{ svc_fqdn }}"
certificate:
- "{{ cert32 }}"
- "{{ cert33 }}"
action: member
state: absent
register: result
failed_when: result.changed or result.failed
- name: Service FOO,BAR,BAZ/{{ svc_fqdn }} certs x1,x2,x3 members absent
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
services:
- name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert11 }}"
- "{{ cert12 }}"
- "{{ cert13 }}"
- name: "BAR/{{ svc_fqdn }}"
certificate:
- "{{ cert21 }}"
- "{{ cert22 }}"
- "{{ cert23 }}"
- name: "BAZ/{{ svc_fqdn }}"
certificate:
- "{{ cert31 }}"
- "{{ cert32 }}"
- "{{ cert33 }}"
action: member
state: absent
register: result
failed_when: not result.changed or result.failed
- name: Service FOO,BAR,BAZ/{{ svc_fqdn }} certs x1,x2,x3 members absent, again
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
services:
- name: "FOO/{{ svc_fqdn }}"
certificate:
- "{{ cert11 }}"
- "{{ cert12 }}"
- "{{ cert13 }}"
- name: "BAR/{{ svc_fqdn }}"
certificate:
- "{{ cert21 }}"
- "{{ cert22 }}"
- "{{ cert23 }}"
- name: "BAZ/{{ svc_fqdn }}"
certificate:
- "{{ cert31 }}"
- "{{ cert32 }}"
- "{{ cert33 }}"
action: member
state: absent
register: result
failed_when: result.changed or result.failed
- name: Services FOO,BAR,BAZ/{{ svc_fqdn }} absent
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name:
- "FOO/{{ svc_fqdn }}"
- "BAR/{{ svc_fqdn }}"
- "BAZ/{{ svc_fqdn }}"
continue: true
state: absent
register: result
failed_when: not result.changed or result.failed
- name: Services FOO,BAR,BAZ/{{ svc_fqdn }} absent, again
ipaservice:
ipaadmin_password: SomeADMINpassword
ipaapi_context: "{{ ipa_context | default(omit) }}"
name:
- "FOO/{{ svc_fqdn }}"
- "BAR/{{ svc_fqdn }}"
- "BAZ/{{ svc_fqdn }}"
continue: true
state: absent
register: result
failed_when: result.changed or result.failed
- name: Host {{ svc_fqdn }} absent
ipahost:
ipaadmin_password: SomeADMINpassword
name: "{{ svc_fqdn }}"
state: absent
register: result
failed_when: not result.changed or result.failed
- name: Remove certificate files. # noqa: deprecated-command-syntax
ansible.builtin.shell:
cmd: rm -f "private{{ item }}.key" "cert{{ item }}.pem" "cert{{ item }}.der" "cert{{ item }}.b64"
with_items: [11, 12, 13, 21, 22, 23, 31, 32, 33]
become: no
delegate_to: localhost

View File

@@ -1,22 +0,0 @@
---
- name: Create services.json
hosts: localhost
tasks:
- name: Check if services.json exists
ansible.builtin.stat:
path: services.json
register: register_stat_services
- name: Create services.json
ansible.builtin.command: /bin/bash services.sh 500
when: not register_stat_services.stat.exists
- name: Check if hosts.json exists
ansible.builtin.stat:
path: hosts.json
register: register_stat_hosts
- name: Create hosts.json
ansible.builtin.command: /bin/bash hosts.sh 500
when: not register_stat_hosts.stat.exists

View File

@@ -0,0 +1,98 @@
# Generate lists for hosts and services
---
- name: Get Domain from server name
ansible.builtin.set_fact:
ipaserver_domain: "{{ ansible_facts['fqdn'].split('.')[1:] | join('.') }}"
when: ipaserver_domain is not defined
- name: Create present services.json data
ansible.builtin.shell: |
echo "["
for i in $(seq 1 "{{ NUM }}"); do
echo " {"
echo " \"name\": \"HTTP/www$i.{{ DOMAIN }}\","
echo " \"principal\": \"host/test$i.{{ DOMAIN }}\","
echo " \"force\": \"true\""
if [ "$i" -lt "{{ NUM }}" ]; then
echo " },"
else
echo " }"
fi
done
echo "]"
vars:
NUM: 500
DOMAIN: "{{ ipaserver_domain }}"
register: command
- name: Set service_list
ansible.builtin.set_fact:
service_list: "{{ command.stdout | from_json }}"
- name: Create absent services.json data
ansible.builtin.shell: |
echo "["
for i in $(seq 1 "{{ NUM }}"); do
echo " {"
echo " \"name\": \"HTTP/www$i.{{ DOMAIN }}\","
echo " \"continue\": \"true\""
if [ "$i" -lt "{{ NUM }}" ]; then
echo " },"
else
echo " }"
fi
done
echo "]"
vars:
NUM: 500
DOMAIN: "{{ ipaserver_domain }}"
register: command
- name: Set service_absent_list
ansible.builtin.set_fact:
service_absent_list: "{{ command.stdout | from_json }}"
- name: Create present hosts.json data
ansible.builtin.shell: |
echo "["
for i in $(seq 1 "{{ NUM }}"); do
echo " {"
echo " \"name\": \"www$i.{{ DOMAIN }}\","
echo " \"force\": \"true\""
if [ "$i" -lt "{{ NUM }}" ]; then
echo " },"
else
echo " }"
fi
done
echo "]"
vars:
NUM: 500
DOMAIN: "{{ ipaserver_domain }}"
register: command
- name: Set host_list
ansible.builtin.set_fact:
host_list: "{{ command.stdout | from_json }}"
- name: Create absent hosts.json data
ansible.builtin.shell: |
echo "["
for i in $(seq 1 "{{ NUM }}"); do
echo " {"
echo " \"name\": \"www$i.{{ DOMAIN }}\""
if [ "$i" -lt "{{ NUM }}" ]; then
echo " },"
else
echo " }"
fi
done
echo "]"
vars:
NUM: 500
DOMAIN: "{{ ipaserver_domain }}"
register: command
- name: Set host_absent_list
ansible.builtin.set_fact:
host_absent_list: "{{ command.stdout | from_json }}"

View File

@@ -1,24 +0,0 @@
#!/bin/bash -eu
NUM=${1-1000}
FILE="hosts.json"
echo "{" > "$FILE"
echo " \"host_list\": [" >> "$FILE"
for i in $(seq 1 "$NUM"); do
{
echo " {"
echo " \"name\": \"www.example$i.com\""
} >> "$FILE"
if [ "$i" -lt "$NUM" ]; then
echo " }," >> "$FILE"
else
echo " }" >> "$FILE"
fi
done
echo " ]" >> "$FILE"
echo "}" >> "$FILE"

View File

@@ -1,25 +0,0 @@
#!/bin/bash -eu
NUM=${1-1000}
FILE="services.json"
echo "{" > "$FILE"
echo " \"service_list\": [" >> "$FILE"
for i in $(seq 1 "$NUM"); do
{
echo " {"
echo " \"name\": \"HTTP/www.example$i.com\","
echo " \"principal\": \"host/test.example$i.com\""
} >> "$FILE"
if [ "$i" -lt "$NUM" ]; then
echo " }," >> "$FILE"
else
echo " }" >> "$FILE"
fi
done
echo " ]" >> "$FILE"
echo "}" >> "$FILE"

View File

@@ -1,22 +0,0 @@
#!/bin/bash -eu
NUM=1000
FILE="services_absent.json"
echo "{" > "$FILE"
echo " \"services\": [" >> "$FILE"
for i in $(seq 1 "$NUM"); do
echo " {" >> "$FILE"
echo " \"name\": \"HTTP/www.example$i.com\"," >> "$FILE"
if [ "$i" -lt "$NUM" ]; then
echo " }," >> "$FILE"
else
echo " }" >> "$FILE"
fi
done
echo " ]" >> "$FILE"
echo "}" >> "$FILE"

View File

@@ -1,32 +1,15 @@
--- ---
- name: Include create_services_json.yml
ansible.builtin.import_playbook: create_services_json.yml
- name: Test services absent - name: Test services absent
hosts: ipaserver hosts: ipaserver
become: true become: true
gather_facts: false gather_facts: false
tasks: tasks:
- name: Include services.json - name: Include generate_test_data.yml
ansible.builtin.include_vars: ansible.builtin.include_tasks: generate_test_data.yml
file: services.json # noqa 505
- name: Create dict with service names
ansible.builtin.set_fact:
services_names: "{{ services_names | default([]) + [{'name': item.name}] }}"
loop: "{{ service_list }}"
- name: Services absent len:{{ service_list | length }} - name: Services absent len:{{ service_list | length }}
ipaservice: ipaservice:
ipaadmin_password: SomeADMINpassword ipaadmin_password: SomeADMINpassword
services: "{{ services_names }}" services: "{{ service_absent_list }}"
state: absent state: absent
- name: Remove services.json
hosts: localhost
tasks:
- name: Remove services.json
ansible.builtin.file:
state: absent
path: services.json

View File

@@ -1,39 +1,71 @@
--- ---
- name: Include create_services_json.yml
ansible.builtin.import_playbook: create_services_json.yml
- name: Test services present - name: Test services present
hosts: ipaserver hosts: ipaserver
become: true become: true
gather_facts: false gather_facts: true
tasks: tasks:
- name: Include services.json - name: Include generate_test_data.yml
ansible.builtin.include_vars: ansible.builtin.include_tasks: generate_test_data.yml
file: services.json # noqa 505
- name: Include hosts.json
ansible.builtin.include_vars:
file: hosts.json # noqa 505
- name: Hosts present len:{{ host_list | length }} - name: Hosts present len:{{ host_list | length }}
ipahost: ipahost:
ipaadmin_password: SomeADMINpassword ipaadmin_password: SomeADMINpassword
hosts: "{{ host_list }}" hosts: "{{ host_list }}"
force: true
register: result
failed_when: not result.changed or result.failed
- name: Hosts present len:{{ host_list | length }}, again
ipahost:
ipaadmin_password: SomeADMINpassword
hosts: "{{ host_list }}"
force: true
register: result
failed_when: result.changed or result.failed
- name: Services present len:{{ service_list | length }} - name: Services present len:{{ service_list | length }}
ipaservice: ipaservice:
ipaadmin_password: SomeADMINpassword ipaadmin_password: SomeADMINpassword
services: "{{ service_list }}" services: "{{ service_list }}"
register: result
failed_when: not result.changed or result.failed
- name: Remove services.json - name: Services present len:{{ service_list | length }}, again
hosts: localhost ipaservice:
tasks: ipaadmin_password: SomeADMINpassword
- name: Remove services.json services: "{{ service_list }}"
ansible.builtin.file: register: result
failed_when: result.changed or result.failed
- name: Services absent len:{{ service_list | length }}
ipaservice:
ipaadmin_password: SomeADMINpassword
services: "{{ service_absent_list }}"
state: absent state: absent
path: services.json register: result
- name: Remove hosts.json failed_when: not result.changed or result.failed
ansible.builtin.file:
- name: Services absent len:{{ service_list | length }}, again
ipaservice:
ipaadmin_password: SomeADMINpassword
services: "{{ service_absent_list }}"
state: absent state: absent
path: hosts.json register: result
failed_when: result.changed or result.failed
- name: Hosts absent len:{{ host_list | length }}
ipahost:
ipaadmin_password: SomeADMINpassword
hosts: "{{ host_absent_list }}"
state: absent
register: result
failed_when: not result.changed or result.failed
- name: Hosts absent len:{{ host_list | length }}, again
ipahost:
ipaadmin_password: SomeADMINpassword
hosts: "{{ host_absent_list }}"
state: absent
register: result
failed_when: result.changed or result.failed

View File

@@ -1,46 +1,91 @@
--- ---
- name: Include create_services_json.yml
ansible.builtin.import_playbook: create_services_json.yml
- name: Test services present slice - name: Test services present slice
hosts: ipaserver hosts: ipaserver
become: true become: true
gather_facts: false gather_facts: true
vars: vars:
slice_size: 500 slice_size: 100
tasks: tasks:
- name: Include services.json - name: Include generate_test_data.yml
ansible.builtin.include_vars: ansible.builtin.include_tasks: generate_test_data.yml
file: services.json # noqa 505
- name: Include hosts.json - name: Size of slice
ansible.builtin.include_vars: ansible.builtin.debug:
file: hosts.json # noqa 505 msg: "{{ slice_size }}"
- name: Size of services slice.
- name: Size of services list
ansible.builtin.debug: ansible.builtin.debug:
msg: "{{ service_list | length }}" msg: "{{ service_list | length }}"
- name: Size of hosts slice.
- name: Size of hosts list
ansible.builtin.debug: ansible.builtin.debug:
msg: "{{ host_list | length }}" msg: "{{ host_list | length }}"
- name: Hosts present - name: Hosts present
ipahost: ipahost:
ipaadmin_password: SomeADMINpassword ipaadmin_password: SomeADMINpassword
hosts: "{{ host_list[item : item + slice_size] }}" hosts: "{{ host_list[item : item + slice_size] }}"
loop: "{{ range(0, service_list | length, slice_size) | list }}" loop: "{{ range(0, host_list | length, slice_size) | list }}"
register: result
failed_when: not result.changed or result.failed
- name: Hosts present, again
ipahost:
ipaadmin_password: SomeADMINpassword
hosts: "{{ host_list[item : item + slice_size] }}"
loop: "{{ range(0, host_list | length, slice_size) | list }}"
register: result
failed_when: result.changed or result.failed
- name: Services present - name: Services present
ipaservice: ipaservice:
ipaadmin_password: SomeADMINpassword ipaadmin_password: SomeADMINpassword
services: "{{ service_list[item : item + slice_size] }}" services: "{{ service_list[item : item + slice_size] }}"
loop: "{{ range(0, service_list | length, slice_size) | list }}" loop: "{{ range(0, service_list | length, slice_size) | list }}"
register: result
failed_when: not result.changed or result.failed
- name: Remove services.json - name: Services present, again
hosts: localhost ipaservice:
tasks: ipaadmin_password: SomeADMINpassword
- name: Remove services.json services: "{{ service_list[item : item + slice_size] }}"
ansible.builtin.file: loop: "{{ range(0, service_list | length, slice_size) | list }}"
register: result
failed_when: result.changed or result.failed
- name: Services absent
ipaservice:
ipaadmin_password: SomeADMINpassword
services: "{{ service_absent_list[item : item + slice_size] }}"
state: absent state: absent
path: services.json loop: "{{ range(0, service_absent_list | length, slice_size) | list }}"
- name: Remove hosts.json register: result
ansible.builtin.file: failed_when: not result.changed or result.failed
- name: Services absent, again
ipaservice:
ipaadmin_password: SomeADMINpassword
services: "{{ service_absent_list[item : item + slice_size] }}"
state: absent state: absent
path: hosts.json loop: "{{ range(0, service_absent_list | length, slice_size) | list }}"
register: result
failed_when: result.changed or result.failed
- name: Hosts absent
ipahost:
ipaadmin_password: SomeADMINpassword
hosts: "{{ host_absent_list[item : item + slice_size] }}"
state: absent
loop: "{{ range(0, host_absent_list | length, slice_size) | list }}"
register: result
failed_when: not result.changed or result.failed
- name: Hosts absent, again
ipahost:
ipaadmin_password: SomeADMINpassword
hosts: "{{ host_absent_list[item : item + slice_size] }}"
state: absent
loop: "{{ range(0, host_absent_list | length, slice_size) | list }}"
register: result
failed_when: result.changed or result.failed