--- - name: Ensure image download directory exists file: path: "{{ ipa_images_cache_path }}" state: directory owner: "{{ ansible_user }}" group: "{{ ansible_user }}" become: True - name: Ensure Ironic Python Agent (IPA) images are downloaded get_url: url: "{{ item.url }}" dest: "{{ ipa_images_cache_path }}/{{ item.filename }}" with_items: - url: "{{ ipa_images_kernel_url }}" filename: "{{ ipa_images_kernel_name }}" - url: "{{ ipa_images_ramdisk_url }}" filename: "{{ ipa_images_ramdisk_name }}" when: item.url != None - name: Compute the MD5 checksum of the Ironic Python Agent (IPA) images stat: path: "{{ ipa_images_cache_path }}/{{ item }}" get_md5: True get_checksum: False mime: False with_items: - "{{ ipa_images_kernel_name }}" - "{{ ipa_images_ramdisk_name }}" register: ipa_images_checksum # Note that setting this via a play or task variable seems to not # evaluate the Jinja variable reference, so we use set_fact. - name: Update the Ansible python interpreter fact to point to the virtualenv set_fact: ansible_python_interpreter: "{{ ipa_images_venv }}/bin/python" # To support updating the IPA image, we check the MD5 sum of the cached image # files, and compare with the images in Glance (if there are any). - name: Gather facts about Ironic Python Agent (IPA) kernel image os_image_facts: auth_type: "{{ ipa_images_openstack_auth_type }}" auth: "{{ ipa_images_openstack_auth }}" image: "{{ ipa_images_kernel_name }}" - name: Set a fact containing the Ironic Python Agent (IPA) kernel image checksum set_fact: ipa_images_kernel_checksum: "{{ openstack_image.checksum }}" when: openstack_image != None - name: Gather facts about Ironic Python Agent (IPA) ramdisk image os_image_facts: auth_type: "{{ ipa_images_openstack_auth_type }}" auth: "{{ ipa_images_openstack_auth }}" image: "{{ ipa_images_ramdisk_name }}" - name: Set a fact containing the Ironic Python Agent (IPA) ramdisk image checksum set_fact: ipa_images_ramdisk_checksum: "{{ openstack_image.checksum }}" when: openstack_image != None - name: Ensure Ironic Python Agent (IPA) images are removed from Glance os_image: auth_type: "{{ ipa_images_openstack_auth_type }}" auth: "{{ ipa_images_openstack_auth }}" name: "{{ item.name }}" state: absent with_items: - name: "{{ ipa_images_kernel_name }}" checksum: "{{ ipa_images_checksum.results[0].stat.md5 }}" glance_checksum: "{{ ipa_images_kernel_checksum | default }}" - name: "{{ ipa_images_ramdisk_name }}" checksum: "{{ ipa_images_checksum.results[1].stat.md5 }}" glance_checksum: "{{ ipa_images_ramdisk_checksum | default }}" when: - item.glance_checksum != None - item.checksum != item.glance_checksum - name: Ensure Ironic Python Agent (IPA) images are registered with Glance os_image: auth_type: "{{ ipa_images_openstack_auth_type }}" auth: "{{ ipa_images_openstack_auth }}" name: "{{ item.name }}" container_format: "{{ item.format }}" disk_format: "{{ item.format }}" state: present filename: "{{ ipa_images_cache_path }}/{{ item.name }}" with_items: - name: "{{ ipa_images_kernel_name }}" format: aki - name: "{{ ipa_images_ramdisk_name }}" format: ari # This variable is unset before we set it, and it does not appear to be # possible to unset a variable in Ansible. - name: Set a fact to reset the Ansible python interpreter set_fact: ansible_python_interpreter: /usr/bin/python