I currently have a ansible role I am working on that does os_patching for us. In that role I need **bleep** to take snapshots and then create a scheduled job in AAP to remove those snapshots after 1 week. I’ve got most of this working using the vmware.vmware or vmware_rest collections. Right now I’m running into an issue with the ansible.controller.schedule module. I am aware of the set_fact statement that has a date WAY in the past. My main issue comes down to making the rrule work. This seems to be where the role fails in my AAP instance and I’m not understanding why.
Here is the code I have written:
- name: Calculate 'DTSTART' 7 days in the future using shell
ansible.builtin.shell: |
date -d "+7 days"
register: future_rrule_shell
delegate_to: localhost
- name: Set 'dynamic_rrule' fact from shell output
ansible.builtin.set_fact:
dynamic_rrule: "{{ future_rrule_shell.stdout }}"
- name: Create a ruleset for everyday except Sundays
ansible.builtin.set_fact:
complex_rule: "{{ lookup(awx.awx.schedule_rruleset, '2022-04-30 10:30:45', rules=rrules, timezone='UTC' ) }}"
vars:
rrules:
- frequency: 'day'
interval: 1
- frequency: 'day'
interval: 1
byweekday: 'sunday'
include: False
- name: Schedule a one-time snapshot cleanup in AAP (T+{{ snapshot_ttl_days|default(7) }} days)
ansible.controller.schedule:
controller_host: "{{ lookup ('env', 'CONTROLLER_HOST') }}"
controller_username: "{{ lookup ('env', 'CONTROLLER_USERNAME') }}"
controller_password: "{{ lookup ('env', 'CONTROLLER_PASSWORD') }}"
validate_certs: "{{ controller_validate_certs | default(true) }}"
enabled: true
job_type: run
unified_job_template: vmware_snapshot_cleanup # your JobTemplate name
name: "Cleanup {{ vm_name | default(inventory_hostname_short) }} pre-change on {{ selected_aap_instance.name }}"
rrule: "DTSTART:{{ dynamic_rrule }}"
#extra_data:
# vcenter_hostname: "{{ _chosen_vcenter }}"
# vcenter_username: "{{ vcenter_username }}"
# vcenter_password: "{{ vcenter_password }}"
# vcenter_validate_certs: "{{ vcenter_validate_certs | default(false) }}"
# vm_id: "{{ _vm_id }}"
delegate_to: localhostHere is the output from AAP.
[ERROR]: Task failed: Module failed: 'NoneType' object has no attribute 'replace' Origin: /runner/requirements_roles/os_patching/tasks/vmware/schedule_removal.yml:64:3 62 dynamic_rrule: "{{ future_rrule_shell.stdout }}" 63 64 - name: Schedule a one-time snapshot cleanup in AAP (T+{{ snapshot_ttl_days|default(7) }} days) ^ column 3 fatal: [testserver03.example.com -> localhost]: FAILED! => { "changed": false, "msg": "Task failed: Module failed: 'NoneType' object has no attribute 'replace'" } <localhost> EXEC /bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-tmp-1762377189.6961734-301-224640049938324/ > /dev/null 2>&1 && sleep 0' fatal: [testserver01.example -> localhost]: FAILED! => { "changed": false, "msg": "Task failed: Module failed: 'NoneType' object has no attribute 'replace'"
Any help is greatly appreciated!
Awesome and you're welcome. Glad it was resolved. It is almost always how it parses a variable in some of these situations and it is very easy to get an incorrect variable or the variable used as an incorrect type for a specific module. Hopefully the exercise you went through of troubleshooting this issue and playbook/role can be applied to other situations with new playbooks and roles (because this will most certainly happen again).
And this did work! However now on to the next problem. Getting the scheduled job to remove the vmware snapshots.
Red Hat
Learning Community
A collaborative learning environment, enabling open source skill development.