Add openstacksdk role

Add openstacksdk role which installs openstacksdk py package
and configures clouds.yaml.

Sem-Ver: feature

Change-Id: I574aa1401af90bd827c5301fae561f9bbf47daa8
diff --git a/releasenotes/notes/openstacksdk-add-role-352fd57b4abec9d2.yaml b/releasenotes/notes/openstacksdk-add-role-352fd57b4abec9d2.yaml
new file mode 100644
index 0000000..d886f71
--- /dev/null
+++ b/releasenotes/notes/openstacksdk-add-role-352fd57b4abec9d2.yaml
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Add openstacksdk role which installs openstacksdk py package
+    and configures clouds.yaml.
diff --git a/roles/openstack_helm_glance/meta/main.yml b/roles/openstack_helm_glance/meta/main.yml
index e50b7f0..e9a1e0a 100644
--- a/roles/openstack_helm_glance/meta/main.yml
+++ b/roles/openstack_helm_glance/meta/main.yml
@@ -27,3 +27,4 @@
     vars:
       helm_repository_name: "{{ openstack_helm_glance_chart_repo_name }}"
       helm_repository_repo_url: "{{ openstack_helm_glance_chart_repo_url }}"
+  - openstacksdk
diff --git a/roles/openstack_helm_glance/tasks/main.yml b/roles/openstack_helm_glance/tasks/main.yml
index 3f157c6..13415b0 100644
--- a/roles/openstack_helm_glance/tasks/main.yml
+++ b/roles/openstack_helm_glance/tasks/main.yml
@@ -67,14 +67,7 @@
 
     - 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'] }}"
+        cloud: atmosphere
         name: "{{ item.name }}"
         state: present
         filename: "/tmp/{{ item.image_file }}"
diff --git a/roles/openstack_helm_neutron/meta/main.yml b/roles/openstack_helm_neutron/meta/main.yml
index 409b595..c11c9ec 100644
--- a/roles/openstack_helm_neutron/meta/main.yml
+++ b/roles/openstack_helm_neutron/meta/main.yml
@@ -34,3 +34,4 @@
   - openstack_helm_infra_rabbitmq
   - openstack_helm_infra_openvswitch
   - openstack_helm_keystone
+  - openstacksdk
diff --git a/roles/openstack_helm_neutron/tasks/main.yml b/roles/openstack_helm_neutron/tasks/main.yml
index 190decc..7d445a6 100644
--- a/roles/openstack_helm_neutron/tasks/main.yml
+++ b/roles/openstack_helm_neutron/tasks/main.yml
@@ -56,14 +56,7 @@
 
 - name: Create networks
   openstack.cloud.network:
-    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']['neutron']['region_name'] }}"
+    cloud: atmosphere
     # Network settings
     name: "{{ item.name }}"
     external: "{{ item.external | default(omit) }}"
@@ -77,14 +70,7 @@
 
 - name: Create subnets
   openstack.cloud.subnet:
-    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']['neutron']['region_name'] }}"
+    cloud: atmosphere
     # Subnet settings
     network_name: "{{ item.0.name }}"
     name: "{{ item.1.name }}"
diff --git a/roles/openstack_helm_nova/meta/main.yml b/roles/openstack_helm_nova/meta/main.yml
index a2003fe..9d2a79f 100644
--- a/roles/openstack_helm_nova/meta/main.yml
+++ b/roles/openstack_helm_nova/meta/main.yml
@@ -27,3 +27,4 @@
     vars:
       helm_repository_name: "{{ openstack_helm_nova_chart_repo_name }}"
       helm_repository_repo_url: "{{ openstack_helm_nova_chart_repo_url }}"
+  - openstacksdk
diff --git a/roles/openstack_helm_nova/tasks/main.yml b/roles/openstack_helm_nova/tasks/main.yml
index a719f44..6a47eb3 100644
--- a/roles/openstack_helm_nova/tasks/main.yml
+++ b/roles/openstack_helm_nova/tasks/main.yml
@@ -129,14 +129,7 @@
 
 - name: Create flavors
   openstack.cloud.compute_flavor:
-    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']['neutron']['region_name'] }}"
+    cloud: atmosphere
     # Flavor settings
     flavorid: "{{ item.flavorid | default(omit) }}"
     name: "{{ item.name }}"
diff --git a/roles/openstack_helm_tempest/meta/main.yml b/roles/openstack_helm_tempest/meta/main.yml
index d9b9461..53ed300 100644
--- a/roles/openstack_helm_tempest/meta/main.yml
+++ b/roles/openstack_helm_tempest/meta/main.yml
@@ -27,3 +27,4 @@
     vars:
       helm_repository_name: "{{ openstack_helm_tempest_chart_repo_name }}"
       helm_repository_repo_url: "{{ openstack_helm_tempest_chart_repo_url }}"
+  - openstacksdk
diff --git a/roles/openstack_helm_tempest/tasks/main.yml b/roles/openstack_helm_tempest/tasks/main.yml
index 4094809..436df55 100644
--- a/roles/openstack_helm_tempest/tasks/main.yml
+++ b/roles/openstack_helm_tempest/tasks/main.yml
@@ -24,13 +24,7 @@
   block:
     - name: Get test image object
       openstack.cloud.image_info:
-        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
+        cloud: atmosphere
         image: cirros
       register: _openstack_helm_tempest_test_image
       when: openstack_helm_tempest_values.conf.tempest.compute.image_ref is not defined
@@ -49,13 +43,7 @@
 
     - name: Get test flavor object
       openstack.cloud.compute_flavor_info:
-        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
+        cloud: atmosphere
         name: m1.tiny
       register: _openstack_helm_tempest_test_flavor
       when: openstack_helm_tempest_values.conf.tempest.compute.flavor_ref is not defined
@@ -74,13 +62,7 @@
 
     - name: Get test network object
       openstack.cloud.networks_info:
-        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
+        cloud: atmosphere
         name: public
       register: _openstack_helm_tempest_test_network
       when: openstack_helm_tempest_values.conf.tempest.network.public_network_id is not defined
diff --git a/roles/openstacksdk/tasks/main.yml b/roles/openstacksdk/tasks/main.yml
new file mode 100644
index 0000000..912d515
--- /dev/null
+++ b/roles/openstacksdk/tasks/main.yml
@@ -0,0 +1,40 @@
+# Copyright (c) 2022 VEXXHOST, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+- name: Generate OpenStack-Helm endpoints
+  ansible.builtin.include_role:
+    name: openstack_helm_endpoints
+  vars:
+    openstack_helm_endpoints_list: ["identity"]
+
+- name: Install openstacksdk
+  ansible.builtin.pip:
+    name: openstacksdk
+
+- name: Create openstack config directory
+  become: true
+  ansible.builtin.file:
+    path: /etc/openstack
+    state: directory
+    owner: root
+    group: root
+
+- name: Generate cloud config file
+  become: true
+  ansible.builtin.template:
+    src: clouds.yaml.j2
+    dest: /etc/openstack/clouds.yaml
+    owner: root
+    group: root
+    mode: '0600'
diff --git a/roles/openstacksdk/templates/clouds.yaml.j2 b/roles/openstacksdk/templates/clouds.yaml.j2
new file mode 100644
index 0000000..53fb9d2
--- /dev/null
+++ b/roles/openstacksdk/templates/clouds.yaml.j2
@@ -0,0 +1,10 @@
+clouds:
+  atmosphere:
+    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']['admin']['region_name'] }}"