[role:glance] Provision images inside Openstack

Create cirros image

Sem-Ver: feature
Change-Id: Ib8a9095d9170e92aebe66987bee7f41e7a00fcae
diff --git a/molecule/default/group_vars/all/molecule.yml b/molecule/default/group_vars/all/molecule.yml
index 03d9b71..476079d 100644
--- a/molecule/default/group_vars/all/molecule.yml
+++ b/molecule/default/group_vars/all/molecule.yml
@@ -1,3 +1,12 @@
 cert_manager_issuer:

   ca:

     secretName: root-secret

+

+openstack_helm_glance_images:

+  - name: cirros

+    source_url: http://download.cirros-cloud.net/0.5.1/

+    image_file: cirros-0.5.1-x86_64-disk.img

+    min_disk: 1

+    disk_format: qcow2

+    container_format: bare

+    is_public: true

diff --git a/releasenotes/notes/glance-create-images-6943e75e25560954.yaml b/releasenotes/notes/glance-create-images-6943e75e25560954.yaml
new file mode 100644
index 0000000..dcc97f1
--- /dev/null
+++ b/releasenotes/notes/glance-create-images-6943e75e25560954.yaml
@@ -0,0 +1,3 @@
+---
+features:
+  - Provision images inside Openstack
diff --git a/roles/openstack_helm_glance/defaults/main.yml b/roles/openstack_helm_glance/defaults/main.yml
index 41251bd..3b9fcec 100644
--- a/roles/openstack_helm_glance/defaults/main.yml
+++ b/roles/openstack_helm_glance/defaults/main.yml
@@ -53,3 +53,9 @@
 openstack_helm_glance_values: {}
 
                                                                    # ]]]
+# .. envvar:: openstack_helm_glance_images [[[
+#
+# List of images to provision inside OpenStack
+openstack_helm_glance_images: []
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_glance/tasks/main.yml b/roles/openstack_helm_glance/tasks/main.yml
index 0abdb87..3f157c6 100644
--- a/roles/openstack_helm_glance/tasks/main.yml
+++ b/roles/openstack_helm_glance/tasks/main.yml
@@ -39,3 +39,51 @@
     openstack_helm_ingress_annotations:
       nginx.ingress.kubernetes.io/proxy-body-size: "0"
       nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
+
+- name: Create images
+  block:
+    - name: Wait until image service ready
+      kubernetes.core.k8s_info:
+        api_version: apps/v1
+        kind: Deployment
+        name: glance-api
+        namespace: openstack
+        wait_sleep: 10
+        wait_timeout: 600
+        wait: true
+        wait_condition:
+          type: Available
+          status: true
+
+    - name: Install openstacksdk
+      ansible.builtin.pip:
+        name: openstacksdk
+
+    - name: Download images
+      ansible.builtin.get_url:
+        url: "{{ item.source_url| regex_replace('\\/$', '') }}/{{ item.image_file }}"
+        dest: "/tmp/{{ item.image_file }}"
+      loop: "{{ openstack_helm_glance_images }}"
+
+    - name: Upload images
+      openstack.cloud.image:
+        auth:
+          auth_url: "https://{{ openstack_helm_endpoints['identity']['host_fqdn_override']['public']['host'] }}"
+          username: "{{ openstack_helm_endpoints['identity']['auth']['admin']['username'] }}"
+          password: "{{ openstack_helm_endpoints['identity']['auth']['admin']['password'] }}"
+          project_name: admin
+          user_domain_name: Default
+          project_domain_name: Default
+        region_name: "{{ openstack_helm_endpoints['identity']['auth']['glance']['region_name'] }}"
+        name: "{{ item.name }}"
+        state: present
+        filename: "/tmp/{{ item.image_file }}"
+        min_disk: "{{ item.min_disk | default(omit) }}"
+        min_ram: "{{ item.min_ram | default(omit) }}"
+        container_format: "{{ item.container_format | default(omit) }}"
+        disk_format: "{{ item.disk_format | default(omit) }}"
+        properties: "{{ item.properties | default(omit) }}"
+        kernel: "{{ item.kernel | default(omit) }}"
+        ramdisk: "{{ item.ramdisk | default(omit) }}"
+        is_public: "{{ item.is_public | default(omit) }}"
+      loop: "{{ openstack_helm_glance_images }}"