Skip to content

Commit 8c98e9a

Browse files
authored
Merge pull request #72 from sap-linuxlab/dev
release: v1.1.0
2 parents 0e67afc + 2e3d145 commit 8c98e9a

File tree

82 files changed

+4352
-1913
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+4352
-1913
lines changed

CHANGELOG.rst

+37
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,43 @@ community.sap_infrastructure Release Notes
44

55
.. contents:: Topics
66

7+
v1.1.0
8+
======
9+
10+
Release Summary
11+
---------------
12+
13+
| Release Date: 2024-12-01
14+
| sap_hypervisor_node_preconfigure: OCPv improve auth and add namespace targets
15+
| sap_hypervisor_node_preconfigure: OCPv update default vars and var prefixes
16+
| sap_hypervisor_node_preconfigure: OCPv add waits for resource readiness
17+
| sap_hypervisor_node_preconfigure: OCPv improve SR-IOV handling
18+
| sap_vm_provision: update platform guidance document
19+
| sap_vm_provision: remove AWS CLI and GCloud CLI dependency
20+
| sap_vm_provision: add spread placement strategy for AWS, GCP, IBM Cloud, MS Azure, IBM PowerVM
21+
| sap_vm_provision: add AWS Route53 record overwrite
22+
| sap_vm_provision: add IBM Cloud Private DNS Custom Resolver for IBM Power VS
23+
| sap_vm_provision: add var for Virtual IP handling across multiple roles
24+
| sap_vm_provision: fix /etc/hosts for Virtual IPs
25+
| sap_vm_provision: add var for Load Balancer naming on GCP, IBM Cloud, MS Azure
26+
| sap_vm_provision: update OS Images for AWS, GCP, IBM Cloud, MS Azure
27+
| sap_vm_provision: add vars for Kubevirt VM
28+
| sap_vm_provision: fix OS Subscription registration logic and BYOL/BYOS
29+
| sap_vm_provision: improve Web Proxy logic
30+
| sap_vm_provision: fix handling of nested variables within host_specifications_dictionary
31+
| sap_vm_provision: fix handling of custom IOPS on AWS, GCP, IBM Cloud
32+
| sap_vm_provision: fix handling of AWS IAM Policy for HA
33+
| sap_vm_provision: fix handling of MS Azure IAM Role for HA
34+
| sap_vm_provision: add google-guest-agent service for load balancer config
35+
| sap_vm_provision: add readiness for AnyDB HA (e.g. IBM Db2 HADR)
36+
| sap_vm_provision: update IBM Power VS locations lookup list
37+
| sap_vm_provision: update logic for IBM Power VS Workspace with latest backend routing (PER)
38+
| sap_vm_provision: update logic for IBM Cloud Virtual Network Interfaces (VNI)
39+
| sap_vm_provision: fix Ansible to Terraform copy to working directory logic and note
40+
| sap_vm_provision: update embedded Terraform Template with updated var names for imported Terraform Modules
41+
| sap_vm_temp_vip: overhaul replace all shell logic with Ansible Modules and use special vars to determine OS network devices reliably
42+
| sap_vm_temp_vip: overhaul documentation
43+
744
v1.0.1
845
======
946

galaxy.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace: community
1010
name: sap_infrastructure
1111

1212
# The version of the collection. Must be compatible with semantic versioning
13-
version: 1.0.1
13+
version: 1.1.0
1414

1515
# The path to the Markdown (.md) readme file. This path is relative to the root of the collection
1616
readme: README.md
@@ -20,6 +20,7 @@ authors:
2020
- Sean Freeman <sean.freeman(at)uk.ibm.com>
2121
- Janine Fuchs <jfuchs(at)redhat.com>
2222
- Nils Koenig <nkoenig(at)redhat.com>
23+
- Marcel Mamula <marcel.mamula(at)suse.com>
2324

2425
### OPTIONAL but strongly recommended
2526
# A short summary description of the collection
@@ -40,6 +41,10 @@ tags:
4041
- database
4142
- application
4243
- sap
44+
- infrastructure
45+
- provision
46+
- cloud
47+
- hypervisor
4348

4449
# Collections that this collection requires to be installed for it to be usable. The key of the dict is the
4550
# collection label 'namespace.name'. The value is a version range
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,105 @@
11
---
2-
3-
- name: Ansible Play to run sap_hypervisor_node_preconfigure Ansible Role
2+
- name: Ansible Play to run sap_hypervisor_node_preconfigure Ansible Role for Red Hat OpenShift
43
hosts: all
5-
gather_facts: true
6-
serial: 1
7-
4+
gather_facts: false
85
vars:
9-
sap_hypervisor_node_platform: redhat_ocp_virt
10-
sap_hypervisor_node_kubeconfig: "{{ lookup( 'ansible.builtin.env', 'KUBECONFIG') }}"
6+
sap_hypervisor_node_preconfigure_platform: redhat_ocp_virt
7+
tasks:
118

12-
environment:
13-
KUBECONFIG: "{{ sap_hypervisor_node_kubeconfig }}"
14-
K8S_AUTH_KUBECONFIG: "{{ sap_hypervisor_node_kubeconfig }}"
9+
- name: Use kubeconfig file specified in environment variable K8S_AUTH_KUBECONFIG if sap_hypervisor_node_preconfigure_ocp_kubeconfig_path is not defined
10+
when: >
11+
sap_hypervisor_node_preconfigure_ocp_kubeconfig_path is not defined or
12+
sap_hypervisor_node_preconfigure_ocp_kubeconfig_path == None or
13+
sap_hypervisor_node_preconfigure_ocp_kubeconfig_path == ''
14+
ansible.builtin.set_fact:
15+
sap_hypervisor_node_preconfigure_ocp_kubeconfig_path: "{{ lookup('env', 'K8S_AUTH_KUBECONFIG') | default(None) }}"
1516

16-
tasks:
17-
- name: Include sap_hypervisor_node_preconfigure Ansible Role
18-
ansible.builtin.include_role:
19-
name: sap_hypervisor_node_preconfigure
17+
- name: Create Tempdir on jumphost
18+
ansible.builtin.tempfile:
19+
state: directory
20+
suffix: "_sap_hypervisor_node_preconfigure"
21+
register: __sap_hypervisor_node_preconfigure_register_tmpdir_jumphost
22+
23+
- name: Set kubeconfig file variable
24+
ansible.builtin.set_fact:
25+
__sap_hypervisor_node_preconfigure_register_kubeconfig: "{{ __sap_hypervisor_node_preconfigure_register_tmpdir_jumphost.path }}/kubeconfig"
26+
27+
- name: Read content of kubeconfig file
28+
ansible.builtin.set_fact:
29+
sap_hypervisor_node_preconfigure_ocp_kubeconfig_data:
30+
"{{ lookup('file', sap_hypervisor_node_preconfigure_ocp_kubeconfig_path) | from_yaml }}"
31+
32+
- name: Read cluster endpoint and CA certificate from kubeconfig if either is not defined
33+
when: sap_hypervisor_node_preconfigure_ocp_extract_kubeconfig
34+
block:
35+
36+
- name: Set sap_hypervisor_node_preconfigure_ocp_endpoint from kubeconfig
37+
ansible.builtin.set_fact:
38+
__sap_hypervisor_node_preconfigure_register_ocp_endpoint:
39+
"{{ sap_hypervisor_node_preconfigure_ocp_kubeconfig_data['clusters'][0]['cluster']['server'] }}"
40+
41+
- name: Write the certificate-authority-data to temp dir on jumphost
42+
ansible.builtin.copy:
43+
content: "{{ sap_hypervisor_node_preconfigure_ocp_kubeconfig_data['clusters'][0]['cluster']['certificate-authority-data'] | b64decode }}"
44+
dest: "{{ __sap_hypervisor_node_preconfigure_register_tmpdir_jumphost.path }}/cluster-ca-cert.pem"
45+
mode: "0666"
46+
47+
- name: Set CA file variable
48+
ansible.builtin.set_fact:
49+
__sap_hypervisor_node_preconfigure_register_ca_cert: "{{ __sap_hypervisor_node_preconfigure_register_tmpdir_jumphost.path }}/cluster-ca-cert.pem"
50+
51+
52+
- name: Use predefined CA cert and API endpoint
53+
when: not sap_hypervisor_node_preconfigure_ocp_extract_kubeconfig
54+
55+
block:
56+
- name: Set predefined OCP API Endpoint
57+
ansible.builtin.set_fact:
58+
__sap_hypervisor_node_preconfigure_register_ocp_endpoint: "{{ sap_hypervisor_node_preconfigure_ocp_endpoint }}"
59+
60+
- name: Set predefined CA file
61+
ansible.builtin.set_fact:
62+
__sap_hypervisor_node_preconfigure_register_ca_cert: "{{ sap_hypervisor_node_preconfigure_ocp_ca_cert }}"
63+
64+
65+
- name: Log into Red Hat OpenShift cluster (obtain access token)
66+
community.okd.openshift_auth:
67+
host: "{{ __sap_hypervisor_node_preconfigure_register_ocp_endpoint }}"
68+
username: "{{ sap_hypervisor_node_preconfigure_ocp_admin_username }}"
69+
password: "{{ sap_hypervisor_node_preconfigure_ocp_admin_password }}"
70+
ca_cert: "{{ __sap_hypervisor_node_preconfigure_register_ca_cert }}"
71+
register: __sap_vm_provision_register_ocp_auth_results
72+
73+
- name: Set token in kubeconfig
74+
ansible.builtin.set_fact:
75+
sap_hypervisor_node_preconfigure_ocp_kubeconfig_data: >-
76+
{{
77+
sap_hypervisor_node_preconfigure_ocp_kubeconfig_data | combine({
78+
'users': sap_hypervisor_node_preconfigure_ocp_kubeconfig_data.users | map('combine', [{'user': {'token': __sap_vm_provision_register_ocp_auth_results.openshift_auth.api_key }}] )
79+
}, recursive=True)
80+
}}
81+
82+
- name: Write the updated kubeconfig
83+
ansible.builtin.copy:
84+
content: "{{ sap_hypervisor_node_preconfigure_ocp_kubeconfig_data | to_nice_yaml }}"
85+
dest: "{{ __sap_hypervisor_node_preconfigure_register_kubeconfig }}"
86+
mode: "0600"
87+
88+
- name: Invoke role with credentials set as environment variables
89+
delegate_to: "{{ inventory_hostname }}"
90+
delegate_facts: true
91+
environment:
92+
KUBECONFIG: "{{ __sap_hypervisor_node_preconfigure_register_kubeconfig }}"
93+
K8S_AUTH_KUBECONFIG: "{{ __sap_hypervisor_node_preconfigure_register_kubeconfig }}"
94+
block:
95+
96+
- name: Include sap_hypervisor_node_preconfigure Ansible Role
97+
ansible.builtin.include_role:
98+
name: community.sap_infrastructure.sap_hypervisor_node_preconfigure
99+
100+
always:
101+
102+
- name: Remove temporary directory
103+
ansible.builtin.file:
104+
state: absent
105+
path: "{{ __sap_hypervisor_node_preconfigure_register_tmpdir_jumphost.path }}"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
---
2+
- name: Preparation Ansible Play for SAP VM provisioning on Red Hat OpenShift Virtualization
3+
hosts: all
4+
gather_facts: false
5+
serial: 1
6+
vars:
7+
sap_vm_provision_iac_type: ansible
8+
sap_vm_provision_iac_platform: kubevirt_vm
9+
pre_tasks:
10+
# Alternative to executing ansible-playbook with -e for Ansible Extravars file
11+
# - name: Include sample variables for Red Hat Openshift Virtualization
12+
# ansible.builtin.include_vars: ./vars/sample-variables-sap-vm-provision-redhat-ocpv.yml
13+
tasks:
14+
15+
- name: Save inventory_host as execution_host
16+
ansible.builtin.set_fact:
17+
sap_vm_provision_execution_host: "{{ inventory_hostname }}"
18+
19+
- name: Save ansible_user as execution_host user
20+
ansible.builtin.set_fact:
21+
__sap_vm_provision_kubevirt_vm_register_execution_host_user: "{{ ansible_user }}"
22+
23+
- name: Use kubeconfig file specified in environment variable K8S_AUTH_KUBECONFIG if sap_vm_provision_kubevirt_vm_kubeconfig_path is not defined
24+
when: >
25+
sap_vm_provision_kubevirt_vm_kubeconfig_path is not defined or
26+
sap_vm_provision_kubevirt_vm_kubeconfig_path == None or
27+
sap_vm_provision_kubevirt_vm_kubeconfig_path == ''
28+
ansible.builtin.set_fact:
29+
sap_vm_provision_kubevirt_vm_kubeconfig_path: "{{ lookup('env', 'K8S_AUTH_KUBECONFIG') | default(None) }}"
30+
31+
- name: Create Tempdir
32+
ansible.builtin.tempfile:
33+
state: directory
34+
suffix: "_sap_vm_provision_kubevirt_vm"
35+
register: __sap_vm_provision_kubevirt_vm_register_tmpdir
36+
37+
- name: Set kubeconfig file variable
38+
ansible.builtin.set_fact:
39+
__sap_vm_provision_kubevirt_vm_register_kubeconfig: "{{ __sap_vm_provision_kubevirt_vm_register_tmpdir.path }}/kubeconfig"
40+
41+
- name: Read content of kubeconfig file
42+
ansible.builtin.set_fact:
43+
__sap_vm_provision_kubevirt_vm_register_kubeconfig_data:
44+
"{{ lookup('file', sap_vm_provision_kubevirt_vm_kubeconfig_path) | from_yaml }}"
45+
46+
- name: Read cluster endpoint and CA certificate from kubeconfig if either is not defined
47+
when: sap_vm_provision_kubevirt_vm_extract_kubeconfig
48+
block:
49+
50+
- name: Set sap_vm_provision_kubevirt_vm_api_endpoint from kubeconfig
51+
ansible.builtin.set_fact:
52+
__sap_vm_provision_kubevirt_vm_register_api_endpoint:
53+
"{{ __sap_vm_provision_kubevirt_vm_register_kubeconfig_data['clusters'][0]['cluster']['server'] }}"
54+
55+
- name: Write the certificate-authority-data to temp dir
56+
ansible.builtin.copy:
57+
content: "{{ __sap_vm_provision_kubevirt_vm_register_kubeconfig_data['clusters'][0]['cluster']['certificate-authority-data'] | b64decode }}"
58+
dest: "{{ __sap_vm_provision_kubevirt_vm_register_tmpdir.path }}/cluster-ca-cert.pem"
59+
mode: "0600"
60+
61+
- name: Set CA file variable
62+
ansible.builtin.set_fact:
63+
__sap_vm_provision_kubevirt_vm_register_ca_cert: "{{ __sap_vm_provision_kubevirt_vm_register_tmpdir.path }}/cluster-ca-cert.pem"
64+
65+
- name: Use predefined CA cert and API endpoint
66+
when: not sap_vm_provision_kubevirt_vm_extract_kubeconfig
67+
block:
68+
- name: Set predefined OCP API Endpoint
69+
ansible.builtin.set_fact:
70+
__sap_vm_provision_kubevirt_vm_register_api_endpoint: "{{ sap_vm_provision_kubevirt_vm_api_endpoint }}"
71+
72+
- name: Set predefined CA file
73+
ansible.builtin.set_fact:
74+
__sap_vm_provision_kubevirt_vm_register_ca_cert: "{{ sap_vm_provision_kubevirt_vm_ca_cert }}"
75+
76+
- name: Log into Red Hat OpenShift cluster (obtain access token)
77+
community.okd.openshift_auth:
78+
host: "{{ __sap_vm_provision_kubevirt_vm_register_api_endpoint }}"
79+
username: "{{ sap_vm_provision_kubevirt_vm_admin_username }}"
80+
password: "{{ sap_vm_provision_kubevirt_vm_admin_password }}"
81+
ca_cert: "{{ __sap_vm_provision_kubevirt_vm_register_ca_cert }}"
82+
register: __sap_vm_provision_kubevirt_vm_register_kubevirt_vm_auth_results
83+
84+
- name: Set token in kubeconfig
85+
ansible.builtin.set_fact:
86+
__sap_vm_provision_kubevirt_vm_register_kubeconfig_data: >-
87+
{{
88+
__sap_vm_provision_kubevirt_vm_register_kubeconfig_data | combine({
89+
'users': __sap_vm_provision_kubevirt_vm_register_kubeconfig_data.users | map('combine', [{'user': {'token': __sap_vm_provision_kubevirt_vm_register_kubevirt_vm_auth_results.openshift_auth.api_key }}] )
90+
}, recursive=True)
91+
}}
92+
93+
- name: Write the updated kubeconfig
94+
ansible.builtin.copy:
95+
content: "{{ __sap_vm_provision_kubevirt_vm_register_kubeconfig_data | to_nice_yaml }}"
96+
dest: "{{ __sap_vm_provision_kubevirt_vm_register_kubeconfig }}"
97+
mode: "0600"
98+
99+
- name: Create dynamic inventory group for Ansible Role sap_vm_provision and provide execution_host and api token
100+
ansible.builtin.add_host:
101+
name: "{{ item }}"
102+
group: sap_vm_provision_target_inventory_group
103+
sap_vm_provision_execution_host: "{{ sap_vm_provision_execution_host }}"
104+
__sap_vm_provision_kubevirt_vm_register_execution_host_user: "{{ __sap_vm_provision_kubevirt_vm_register_execution_host_user }}"
105+
__sap_vm_provision_kubevirt_vm_register_tmpdir: "{{ __sap_vm_provision_kubevirt_vm_register_tmpdir }}"
106+
__sap_vm_provision_kubevirt_vm_register_kubeconfig: "{{ __sap_vm_provision_kubevirt_vm_register_kubeconfig }}"
107+
loop: "{{ sap_vm_provision_kubevirt_vm_host_specifications_dictionary[sap_vm_provision_host_specification_plan].keys() }}"
108+
109+
- name: Ansible Play to provision VMs for SAP
110+
hosts: sap_vm_provision_target_inventory_group # Ansible Play target hosts pattern, use Inventory Group created by previous Ansible Task (add_host)
111+
gather_facts: false
112+
environment:
113+
K8S_AUTH_KUBECONFIG: "{{ __sap_vm_provision_kubevirt_vm_register_kubeconfig }}"
114+
tasks:
115+
116+
- name: Execute Ansible Role sap_vm_provision
117+
when: sap_vm_provision_iac_type == "ansible" or sap_vm_provision_iac_type == "ansible_to_terraform"
118+
block:
119+
- name: Include sap_vm_provision Ansible Role
120+
ansible.builtin.include_role:
121+
name: community.sap_infrastructure.sap_vm_provision
122+
123+
always:
124+
- name: Remove temporary directory on execution_host
125+
delegate_to: "{{ sap_vm_provision_execution_host }}"
126+
ansible.builtin.file:
127+
state: absent
128+
path: "{{ __sap_vm_provision_kubevirt_vm_register_tmpdir.path }}"

0 commit comments

Comments
 (0)