diff --git a/roles/sap_vm_provision/defaults/main.yml b/roles/sap_vm_provision/defaults/main.yml index 9f53925..b8834b2 100644 --- a/roles/sap_vm_provision/defaults/main.yml +++ b/roles/sap_vm_provision/defaults/main.yml @@ -176,6 +176,7 @@ sap_vm_provision_ibmcloud_placement_resource_name: "sap-placement-group-spread" sap_vm_provision_ibmcloud_placement_strategy_spread: false # IBM Cloud, addendum for IBM Power VS +sap_vm_provision_ibmcloud_private_dns_custom_resolver_ip: "" sap_vm_provision_ibmcloud_powervs_location: "" sap_vm_provision_ibmcloud_powervs_workspace_name: "" sap_vm_provision_ibmcloud_powervs_vlan_subnet_name: "" @@ -307,36 +308,67 @@ sap_vm_provision_ibmpowervm_vm_host_os_image: "" # OS Images - AWS AMI sap_vm_provision_aws_ec2_vs_host_os_image_dictionary: rhel-8-1: "*RHEL-8.1*_HVM*x86_64*" - rhel-8-2: "*RHEL-8.2*_HVM*x86_64*" + # rhel-8-2: "*RHEL-8.2*_HVM*x86_64*" # removed rhel-8-4: "*RHEL-8.4*_HVM*x86_64*" rhel-8-6: "*RHEL-8.6*_HVM*x86_64*" rhel-8-8: "*RHEL-8.8*_HVM*x86_64*" + rhel-8-10: "*RHEL-8.10*_HVM*x86_64*" + rhel-9-0: "*RHEL-9.0*_HVM*x86_64*" + rhel-9-1: "*RHEL-9.1*_HVM*x86_64*" + rhel-9-2: "*RHEL-9.2*_HVM*x86_64*" + rhel-9-3: "*RHEL-9.3*_HVM*x86_64*" + rhel-9-4: "*RHEL-9.4*_HVM*x86_64*" + sles-12-5: "*suse-sles-12-sp5-v202*-hvm-ssd-x86_64*" + # sles-15-2: "*suse-sles-15-sp2-v202*-hvm-ssd-x86_64*" # removed + # sles-15-3: "*suse-sles-15-sp3-v202*-hvm-ssd-x86_64*" # removed + # sles-15-4: "*suse-sles-15-sp4-v202*-hvm-ssd-x86_64*" # removed + sles-15-5: "*suse-sles-15-sp5-v202*-hvm-ssd-x86_64*" + sles-15-6: "*suse-sles-15-sp6-v202*-hvm-ssd-x86_64*" + # rhel-7-7-sap-ha: "*RHEL-SAP-8.1.0*" # removed + # rhel-7-9-sap-ha: "*RHEL-SAP-8.1.0*" # removed rhel-8-1-sap-ha: "*RHEL-SAP-8.1.0*" rhel-8-2-sap-ha: "*RHEL-SAP-8.2.0*" rhel-8-4-sap-ha: "*RHEL-SAP-8.4.0*" rhel-8-6-sap-ha: "*RHEL-SAP-8.6.0*" rhel-8-8-sap-ha: "*RHEL-SAP-8.8.0*" + rhel-8-10-sap-ha: "*RHEL-SAP-8.10.0*" rhel-9-0-sap-ha: "*RHEL-SAP-9.0.0*" rhel-9-2-sap-ha: "*RHEL-SAP-9.2.0*" - sles-15-2: "*suse-sles-15-sp2-v202*-hvm-ssd-x86_64*" - sles-15-3: "*suse-sles-15-sp3-v202*-hvm-ssd-x86_64*" - sles-15-4: "*suse-sles-15-sp4-v202*-hvm-ssd-x86_64*" - sles-15-5: "*suse-sles-15-sp5-v202*-hvm-ssd-x86_64*" + rhel-9-4-sap-ha: "*RHEL-SAP-9.4.0*" sles-12-5-sap-ha: "*suse-sles-sap-12-sp5-v202*-hvm-ssd-x86_64*" sles-15-1-sap-ha: "*suse-sles-sap-15-sp1-v202*-hvm-ssd-x86_64*" sles-15-2-sap-ha: "*suse-sles-sap-15-sp2-v202*-hvm-ssd-x86_64*" sles-15-3-sap-ha: "*suse-sles-sap-15-sp3-v202*-hvm-ssd-x86_64*" sles-15-4-sap-ha: "*suse-sles-sap-15-sp4-v202*-hvm-ssd-x86_64*" sles-15-5-sap-ha: "*suse-sles-sap-15-sp5-v202*-hvm-ssd-x86_64*" + sles-15-6-sap-ha: "*suse-sles-sap-15-sp6-v202*-hvm-ssd-x86_64*" + sles-15-4-sap-ha-byos: "*suse-sles-sap-15-sp4-byos-v202*-hvm-ssd-x86_64*" + sles-15-5-sap-ha-byos: "*suse-sles-sap-15-sp5-byos-v202*-hvm-ssd-x86_64*" + sles-15-6-sap-ha-byos: "*suse-sles-sap-15-sp6-byos-v202*-hvm-ssd-x86_64*" # OS Images - Google Cloud sap_vm_provision_gcp_ce_vm_host_os_image_dictionary: rhel-8-latest: project: "rhel-cloud" family: "rhel-8" - rhel-8-1-sap-ha: + rhel-9-latest: + project: "rhel-cloud" + family: "rhel-9" + sles-12-latest: + project: "suse-cloud" + family: "sles-12" + sles-15-latest: + project: "suse-cloud" + family: "sles-15" + # rhel-7-7-sap-ha: # removed + # project: "rhel-sap-cloud" + # family: "rhel-7-7-sap-ha" + rhel-7-9-sap-ha: project: "rhel-sap-cloud" - family: "rhel-8-1-sap-ha" + family: "rhel-7-9-sap-ha" + # rhel-8-1-sap-ha: # removed + # project: "rhel-sap-cloud" + # family: "rhel-8-1-sap-ha" rhel-8-2-sap-ha: project: "rhel-sap-cloud" family: "rhel-8-2-sap-ha" @@ -346,57 +378,193 @@ sap_vm_provision_gcp_ce_vm_host_os_image_dictionary: rhel-8-6-sap-ha: project: "rhel-sap-cloud" family: "rhel-8-6-sap-ha" - rhel-8-8-sap-ha: - project: "rhel-sap-cloud" - family: "rhel-8-8-sap-ha" - sles-15-latest: - project: "suse-cloud" - family: "sles-15" - sles-15-sp3-sap: + sles-12-5-sap-ha: + project: "suse-sap-cloud" + family: "sles-12-sp5-sap" + # sles-15-1-sap-ha: # removed + # project: "suse-sap-cloud" + # family: "sles-15-sp1-sap" + sles-15-2-sap-ha: + project: "suse-sap-cloud" + family: "sles-15-sp2-sap" + sles-15-3-sap-ha: project: "suse-sap-cloud" family: "sles-15-sp3-sap" - sles-15-sp4-sap: + sles-15-4-sap-ha: project: "suse-sap-cloud" family: "sles-15-sp4-sap" - sles-15-sp5-sap: + sles-15-5-sap-ha: project: "suse-sap-cloud" family: "sles-15-sp5-sap" + sles-15-6-sap-ha: + project: "suse-sap-cloud" + family: "sles-15-sp6-sap" + sles-12-5-sap-ha-byos: + project: "suse-byos-cloud" + family: "sles-12-sp5-sap-byos" + sles-15-2-sap-byos: + project: "suse-byos-cloud" + family: "sles-15-sp2-sap-byos" + sles-15-3-sap-byos: + project: "suse-byos-cloud" + family: "sles-15-sp3-sap-byos" + sles-15-4-sap-byos: + project: "suse-byos-cloud" + family: "sles-15-sp4-sap-byos" + sles-15-5-sap-byos: + project: "suse-byos-cloud" + family: "sles-15-sp5-sap-byos" + sles-15-6-sap-byos: + project: "suse-byos-cloud" + family: "sles-15-sp6-sap-byos" # OS Images - IBM Cloud sap_vm_provision_ibmcloud_vs_host_os_image_dictionary: rhel-8-4: ".*redhat.*8-4.*minimal.*amd64.*" rhel-8-6: ".*redhat.*8-6.*minimal.*amd64.*" + rhel-8-8: ".*redhat.*8-8.*minimal.*amd64.*" + rhel-8-10: ".*redhat.*8-10.*minimal.*amd64.*" rhel-9-0: ".*redhat.*9-0.*minimal.*amd64.*" rhel-9-2: ".*redhat.*9-2.*minimal.*amd64.*" + rhel-9-4: ".*redhat.*9-4.*minimal.*amd64.*" + sles-15-5: ".*sles.*15-5.*amd64-[0-9]" + sles-15-6: ".*sles.*15-6.*amd64-[0-9]" + # rhel-7-6-sap-ha: ".*redhat.*7-6.*amd64.*hana.*" # retrievable from deprecated list + # rhel-7-9-sap-ha: ".*redhat.*7-9.*amd64.*hana.*" # retrievable from deprecated list + # rhel-8-1-sap-ha: ".*redhat.*8-1.*amd64.*hana.*" # retrievable from deprecated list + # rhel-8-2-sap-ha: ".*redhat.*8-2.*amd64.*hana.*" # retrievable from deprecated list rhel-8-4-sap-ha: ".*redhat.*8-4.*amd64.*hana.*" rhel-8-6-sap-ha: ".*redhat.*8-6.*amd64.*hana.*" rhel-8-8-sap-ha: ".*redhat.*8-8.*amd64.*hana.*" + rhel-8-10-sap-ha: ".*redhat.*8-10.*amd64.*hana.*" rhel-9-0-sap-ha: ".*redhat.*9-0.*amd64.*hana.*" - rhel-9-2-sap-ha: ".*redhat.*9-0.*amd64.*hana.*" + rhel-9-2-sap-ha: ".*redhat.*9-2.*amd64.*hana.*" + rhel-9-4-sap-ha: ".*redhat.*9-4.*amd64.*hana.*" + # sles-12-4-sap-ha: ".*sles.*12-4.*amd64.*hana.*" # retrievable from deprecated list + # sles-12-5-sap-ha: ".*sles.*12-5.*amd64.*hana.*" # retrievable from deprecated list + # sles-15-1-sap-ha: ".*sles.*15-1.*amd64.*hana.*" # retrievable from deprecated list sles-15-3-sap-ha: ".*sles.*15-3.*amd64.*hana.*" sles-15-4-sap-ha: ".*sles.*15-4.*amd64.*hana.*" sles-15-5-sap-ha: ".*sles.*15-5.*amd64.*hana.*" + sles-15-6-sap-ha: ".*sles.*15-6.*amd64.*hana.*" # OS Images - IBM Cloud, IBM Power VS 'Full Linux subscription' with support and activation keys sap_vm_provision_ibmcloud_powervs_host_os_image_dictionary: - rhel-8-4: ".*RHEL.*8.*4" - rhel-8-6: ".*RHEL.*8.*6" + rhel-8-8: ".*RHEL.*8.*8" rhel-9-2: ".*RHEL.*9.*2" - sles-15-3: ".*SLES.*15.*3" - sles-15-4: ".*SLES.*15.*4" + rhel-9-4: ".*RHEL.*9.*4" + sles-15-5: ".*SLES.*15.*5$" + rhel-8-4-sap-ha: "RHEL8-SP4-SAP" rhel-8-6-sap-ha: ".*RHEL.*8.*6.*SAP$" # ensure string suffix using $ rhel-8-8-sap-ha: ".*RHEL.*8.*8.*SAP$" # ensure string suffix using $ rhel-9-2-sap-ha: ".*RHEL.*9.*2.*SAP$" # ensure string suffix using $ sles-15-2-sap-ha: ".*SLES.*15.*2.*SAP$" # ensure string suffix using $ sles-15-3-sap-ha: ".*SLES.*15.*3.*SAP$" # ensure string suffix using $ sles-15-4-sap-ha: ".*SLES.*15.*4.*SAP$" # ensure string suffix using $ + sles-15-5-sap-ha: "SLES15-SP5-SAP" + # rhel-8-4-sap-ha-byol: "RHEL8-SP4-SAP-BYOL" + # rhel-8-6-sap-ha-byol: ".*RHEL.*8.*6.*SAP-BYOL$" # ensure string suffix using $ + # rhel-8-8-sap-ha-byol: ".*RHEL.*8.*8.*SAP-BYOL$" # ensure string suffix using $ + # rhel-9-2-sap-ha-byol: ".*RHEL.*9.*2.*SAP-BYOL$" # ensure string suffix using $ + # sles-15-2-sap-ha-byol: ".*SLES.*15.*2.*SAP-BYOL$" # ensure string suffix using $ + # sles-15-3-sap-ha-byol: ".*SLES.*15.*3.*SAP-BYOL$" # ensure string suffix using $ + # sles-15-4-sap-ha-byol: ".*SLES.*15.*4.*SAP-BYOL$" # ensure string suffix using $ + # sles-15-5-sap-ha-byol: "SLES15-SP5-SAP-BYOL" # OS Images - MS Azure sap_vm_provision_msazure_vm_host_os_image_dictionary: + rhel-8-0: + publisher: "RedHat" + offer: "RHEL" + sku: "8-gen2" + rhel-8-1: + publisher: "RedHat" + offer: "RHEL" + sku: "81-gen2" + rhel-8-2: + publisher: "RedHat" + offer: "RHEL" + sku: "82-gen2" + rhel-8-3: + publisher: "RedHat" + offer: "RHEL" + sku: "83-gen2" rhel-8-4: publisher: "RedHat" offer: "RHEL" sku: "84-gen2" + rhel-8-5: + publisher: "RedHat" + offer: "RHEL" + sku: "85-gen2" + rhel-8-6: + publisher: "RedHat" + offer: "RHEL" + sku: "86-gen2" + rhel-8-7: + publisher: "RedHat" + offer: "RHEL" + sku: "87-gen2" + rhel-8-8: + publisher: "RedHat" + offer: "RHEL" + sku: "88-gen2" + rhel-8-9: + publisher: "RedHat" + offer: "RHEL" + sku: "89-gen2" + rhel-8-10: + publisher: "RedHat" + offer: "RHEL" + sku: "810-gen2" + rhel-9-0: + publisher: "RedHat" + offer: "RHEL" + sku: "90-gen2" + rhel-9-1: + publisher: "RedHat" + offer: "RHEL" + sku: "91-gen2" + rhel-9-2: + publisher: "RedHat" + offer: "RHEL" + sku: "92-gen2" + rhel-9-3: + publisher: "RedHat" + offer: "RHEL" + sku: "93-gen2" + rhel-9-4: + publisher: "RedHat" + offer: "RHEL" + sku: "94-gen2" + sles-12-5: + publisher: "SUSE" + offer: "sles-12-sp5" + sku: "gen2" + sles-15-1: + publisher: "SUSE" + offer: "sles-15-sp1" + sku: "gen2" + sles-15-2: + publisher: "SUSE" + offer: "sles-15-sp2" + sku: "gen2" + sles-15-3: + publisher: "SUSE" + offer: "sles-15-sp3" + sku: "gen2" + sles-15-4: + publisher: "SUSE" + offer: "sles-15-sp4" + sku: "gen2" + sles-15-5: + publisher: "SUSE" + offer: "sles-15-sp5" + sku: "gen2" + sles-15-6: + publisher: "SUSE" + offer: "sles-15-sp6" + sku: "gen2" rhel-8-1-sap-ha: publisher: "RedHat" offer: "RHEL-SAP-HA" @@ -417,6 +585,10 @@ sap_vm_provision_msazure_vm_host_os_image_dictionary: publisher: "RedHat" offer: "RHEL-SAP-HA" sku: "88sapha-gen2" + rhel-8-10-sap-ha: + publisher: "RedHat" + offer: "RHEL-SAP-HA" + sku: "810sapha-gen2" rhel-9-0-sap-ha: publisher: "RedHat" offer: "RHEL-SAP-HA" @@ -425,46 +597,62 @@ sap_vm_provision_msazure_vm_host_os_image_dictionary: publisher: "RedHat" offer: "RHEL-SAP-HA" sku: "92sapha-gen2" - rhel-8-1-sap-applications: + rhel-9-4-sap-ha: publisher: "RedHat" offer: "RHEL-SAP-HA" - sku: "81sapapps-gen2" - rhel-8-2-sap-applications: - publisher: "RedHat" - offer: "RHEL-SAP-HA" - sku: "82sapapps-gen2" - rhel-8-4-sap-applications: - publisher: "RedHat" - offer: "RHEL-SAP-HA" - sku: "84sapapps-gen2" - rhel-8-6-sap-applications: - publisher: "RedHat" - offer: "RHEL-SAP-applications" - sku: "86sapapps-gen2" - rhel-8-8-sap-applications: - publisher: "RedHat" - offer: "RHEL-SAP-applications" - sku: "88sapapps-gen2" - rhel-9-0-sap-applications: - publisher: "RedHat" - offer: "RHEL-SAP-applications" - sku: "90sapapps-gen2" - rhel-9-2-sap-applications: - publisher: "RedHat" - offer: "RHEL-SAP-applications" - sku: "92sapapps-gen2" - sles-15-sp3-sap: + sku: "94sapha-gen2" + sles-12-5-sap-ha: + publisher: "SUSE" + offer: "sles-sap-12-sp5" + sku: "gen2" + sles-15-1-sap-ha: + publisher: "SUSE" + offer: "sles-sap-15-sp1" + sku: "gen2" + sles-15-2-sap-ha: + publisher: "SUSE" + offer: "sles-sap-15-sp2" + sku: "gen2" + sles-15-3-sap-ha: publisher: "SUSE" offer: "sles-sap-15-sp3" sku: "gen2" - sles-15-sp4-sap: + sles-15-4-sap-ha: publisher: "SUSE" offer: "sles-sap-15-sp4" sku: "gen2" - sles-15-sp5-sap: + sles-15-5-sap-ha: publisher: "SUSE" offer: "sles-sap-15-sp5" sku: "gen2" + sles-15-6-sap-ha: + publisher: "SUSE" + offer: "sles-sap-15-sp6" + sku: "gen2" + sles-15-1-sap-byos: + publisher: "SUSE" + offer: "sles-sap-15-sp1-byos" + sku: "gen2" + sles-15-2-sap-byos: + publisher: "SUSE" + offer: "sles-sap-15-sp2-byos" + sku: "gen2" + sles-15-3-sap-byos: + publisher: "SUSE" + offer: "sles-sap-15-sp3-byos" + sku: "gen2" + sles-15-4-sap-byos: + publisher: "SUSE" + offer: "sles-sap-15-sp4-byos" + sku: "gen2" + sles-15-5-sap-byos: + publisher: "SUSE" + offer: "sles-sap-15-sp5-byos" + sku: "gen2" + sles-15-6-sap-byos: + publisher: "SUSE" + offer: "sles-sap-15-sp6-byos" + sku: "gen2" #### diff --git a/roles/sap_vm_provision/tasks/common/register_proxy.yml b/roles/sap_vm_provision/tasks/common/register_proxy.yml index fbcb4d7..4698358 100644 --- a/roles/sap_vm_provision/tasks/common/register_proxy.yml +++ b/roles/sap_vm_provision/tasks/common/register_proxy.yml @@ -55,10 +55,10 @@ path: "{{ non_interactive_login_shell_config_file }}" marker: "#-- {mark} ANSIBLE MANAGED BLOCK --#" # must have {mark} otherwise block will repeat append on re-run block: | - export http_proxy="{{ sap_vm_provision_proxy_web_forward_proxy_ip }}" - export https_proxy="{{ sap_vm_provision_proxy_web_forward_proxy_ip }}" - export HTTP_PROXY="{{ sap_vm_provision_proxy_web_forward_proxy_ip }}" - export HTTPS_PROXY="{{ sap_vm_provision_proxy_web_forward_proxy_ip }}" + export http_proxy="http://{{ sap_vm_provision_proxy_web_forward_proxy_ip }}" + export https_proxy="http://{{ sap_vm_provision_proxy_web_forward_proxy_ip }}" + export HTTP_PROXY="http://{{ sap_vm_provision_proxy_web_forward_proxy_ip }}" + export HTTPS_PROXY="http://{{ sap_vm_provision_proxy_web_forward_proxy_ip }}" #export ftp_proxy #export FTP_PROXY export no_proxy="{{ sap_vm_provision_proxy_web_forward_exclusions }},{{ sap_vm_provision_proxy_web_forward_exclusions_dynamic }}{{ __sap_vm_provision_task_proxy_platform_exclude if __sap_vm_provision_task_proxy_platform_exclude is defined }}" @@ -75,4 +75,5 @@ proxy=http://{{ sap_vm_provision_proxy_web_forward_proxy_ip }} when: - ansible_os_family == "RedHat" + - not __sap_vm_provision_task_ibmcloud_pi_workspace_capabilities.resource.pi_workspace_capabilities['power-edge-router'] - __sap_vm_provision_task_proxy_platform_exclude is undefined diff --git a/roles/sap_vm_provision/tasks/platform_ansible/aws_ec2_vs/execute_provision.yml b/roles/sap_vm_provision/tasks/platform_ansible/aws_ec2_vs/execute_provision.yml index 2e77336..82fb7c4 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible/aws_ec2_vs/execute_provision.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible/aws_ec2_vs/execute_provision.yml @@ -193,11 +193,12 @@ ansible.builtin.wait_for_connection: timeout: 300 + # Remove everything before ssh-rsa/ed25519 but do not catch key comment that uses 'ssh-' - name: Fix root authorized_keys entries ansible.builtin.replace: path: /root/.ssh/authorized_keys backup: true - regexp: '(^.*ssh-)' # Allow ssh-rsa , ssh-ed25519 etc. + regexp: '(^.*command.* ssh-)' replace: 'ssh-' - name: Permit root login diff --git a/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_powervs/execute_main.yml b/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_powervs/execute_main.yml index 44fb341..ce786b0 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_powervs/execute_main.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_powervs/execute_main.yml @@ -3,16 +3,21 @@ - name: Set fact for IBM Power VS location to the colocated IBM Cloud Availability Zone (VPC) ansible.builtin.set_fact: list_ibmcloud_powervs_location_to_ibmcloud_availability_zone: + dal10: "us-south-1" dal12: "us-south-2" - us-south: "us-south-3" # naming of IBM Power VS location 'us-south' was previous naming convention, would otherwise be 'DAL13' - us-east: "us-east-1" # naming of IBM Power VS location 'us-east' was previous naming convention, would otherwise be 'WDC04' - # wdc06: "us-east-2" # No Cloud Connection available at this location + us-south: "us-south-3" # naming of IBM Power VS location 'us-south' was previous naming convention, would otherwise be 'dal13' + us-east: "us-east-1" # naming of IBM Power VS location 'us-east' was previous naming convention, would otherwise be 'wdc04' + wdc06: "us-east-2" + wdc07: "us-east-3" sao01: "br-sao-1" + sao02: "br-sao-2" tor01: "ca-tor-1" - eu-de-1: "eu-de-2" # naming of IBM Power VS location 'eu-de-1' was previous naming convention, would otherwise be 'FRA04' - eu-de-2: "eu-de-3" # naming of IBM Power VS location 'eu-de-2' was previous naming convention, would otherwise be 'FRA05' + eu-de-1: "eu-de-2" # naming of IBM Power VS location 'eu-de-1' was previous naming convention, would otherwise be 'fra04' + eu-de-2: "eu-de-3" # naming of IBM Power VS location 'eu-de-2' was previous naming convention, would otherwise be 'fra05' lon04: "eu-gb-1" lon06: "eu-gb-3" + mad02: "eu-es-1" + mad04: "eu-es-2" syd04: "au-syd-2" syd05: "au-syd-3" tok04: "jp-tok-2" @@ -23,16 +28,21 @@ - name: Set fact for IBM Power VS location to the IBM Power VS Region API Endpoints ansible.builtin.set_fact: list_ibmcloud_powervs_location_to_powervs_region: + dal10: "us-south" dal12: "us-south" us-south: "us-south" us-east: "us-east" - # wdc06: "us-east" # no Cloud Connection available at this location + wdc06: "us-east" + wdc07: "us-east" sao01: "sao" + sao02: "sao" tor01: "tor" eu-de-1: "eu-de" eu-de-2: "eu-de" lon04: "lon" lon06: "lon" + mad02: "mad" + mad04: "mad" syd04: "syd" syd05: "syd" tok04: "tok" @@ -146,6 +156,21 @@ instance_id: "{{ __sap_vm_provision_task_ibmcloud_pdns_service_instance.resource.guid }}" ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" + - name: Identify IBM Cloud Private DNS Custom Resolvers info + no_log: "{{ __sap_vm_provision_no_log }}" + register: __sap_vm_provision_task_ibmcloud_pdns_custom_resolvers + run_once: true + ibm.cloudcollection.ibm_dns_custom_resolvers_info: + instance_id: "{{ __sap_vm_provision_task_ibmcloud_pdns_service_instance.resource.guid }}" + ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" + + - name: Check if input IBM Cloud Private DNS Customer Resolver IP exists + ansible.builtin.fail: + msg: + IBM Cloud Private DNS instance does not contain the input Custom Resolver IP Address. + Please create a Custom Resolver in this IBM Cloud Private DNS instance. + when: not sap_vm_provision_ibmcloud_private_dns_custom_resolver_ip in (__sap_vm_provision_task_ibmcloud_pdns_custom_resolvers.resource.custom_resolvers | map(attribute='locations') | list | flatten | map(attribute='dns_server_ip') | list) + - name: Identify IBM Power Infrastructure OS Catalog Stock Image list no_log: "{{ __sap_vm_provision_no_log }}" register: __sap_vm_provision_task_ibmcloud_pi_os_image_list @@ -366,7 +391,7 @@ - name: Append IBM Cloud Private DNS to /etc/resolv.conf ansible.builtin.lineinfile: path: /etc/resolv.conf - line: nameserver 161.26.0.10 + line: nameserver {{ sap_vm_provision_ibmcloud_private_dns_custom_resolver_ip }} # Required Web Forward Proxy # For IBM PowerVS Workspace enabled with Power Edge Router (from Q4-2023 onwards), diff --git a/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_main.yml b/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_main.yml index 7aa7a5b..cfa1293 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_main.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_main.yml @@ -116,7 +116,7 @@ ansible.builtin.add_host: name: "{{ add_item[0].host_node }}" groups: "{{ add_item[0].sap_system_type + '_' if (add_item[0].sap_system_type != '') }}{{ add_item[0].sap_host_type }}" - ansible_host: "{{ add_item[0].resource.primary_network_interface[0].primary_ipv4_address }}" + ansible_host: "{{ add_item[0].resource.primary_network_attachment[0].virtual_network_interface[0].primary_ip[0].address | default(add_item[0].resource.primary_network_attachment[0].primary_ip[0].address) }}" # use default to handle different r/ds data structure ansible_user: "root" ansible_ssh_private_key_file: "{{ sap_vm_provision_ssh_host_private_key_file_path }}" ansible_ssh_common_args: -o ConnectTimeout=180 -o ControlMaster=auto -o ControlPersist=3600s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ForwardX11=no -o ProxyCommand='ssh -W %h:%p {{ sap_vm_provision_bastion_user }}@{{ sap_vm_provision_bastion_public_ip }} -p {{ sap_vm_provision_bastion_ssh_port }} -i {{ sap_vm_provision_ssh_bastion_private_key_file_path }} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' diff --git a/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_provision.yml b/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_provision.yml index c23bb8b..1c6ea45 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_provision.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_provision.yml @@ -33,15 +33,30 @@ zone: "{{ sap_vm_provision_ibmcloud_availability_zone }}" vpc: "{{ __sap_vm_provision_task_ibmcloud_vpc_subnet.resource.vpc }}" - # The Subnet assigned to the primary Virtual Network Interface (vNIC) cannot be changed - # The Name and Security Group assigned to the Primary Network Interface (vNIC) are editable - primary_network_interface: - - name: "{{ inventory_hostname }}-vnic0" - subnet: "{{ __sap_vm_provision_task_ibmcloud_vpc_subnet.resource.id }}" - allow_ip_spoofing: "{{ target_provision_host_spec.disable_ip_anti_spoofing }}" # When disable the Anti IP Spoofing = true, then Allow IP Spoofing = true - security_groups: "{{ __sap_vm_provision_task_ibmcloud_vpc_sg.results | map(attribute='resource.id') }}" + # The Subnet assigned to the deprecated primary Virtual Network Interface (vNIC) cannot be changed + # The Name and Security Group assigned are editable + # primary_network_interface: + # - name: "{{ inventory_hostname }}-vnic0" + # subnet: "{{ __sap_vm_provision_task_ibmcloud_vpc_subnet.resource.id }}" + # allow_ip_spoofing: "{{ target_provision_host_spec.disable_ip_anti_spoofing }}" # When disable the Anti IP Spoofing = true, then Allow IP Spoofing = true + # security_groups: "{{ __sap_vm_provision_task_ibmcloud_vpc_sg.results | map(attribute='resource.id') }}" #network_interfaces: + # The Subnet assigned to the primary Virtual Network Interface (VNI) cannot be changed + # The Name and Security Group assigned are editable + primary_network_attachment: + - name: "{{ inventory_hostname }}-vni0-attach" + virtual_network_interface: + - name: "{{ inventory_hostname }}-vni0" + resource_group: "{{ __sap_vm_provision_task_ibmcloud_resource_group.resource.id }}" + subnet: "{{ __sap_vm_provision_task_ibmcloud_vpc_subnet.resource.id }}" + security_groups: "{{ __sap_vm_provision_task_ibmcloud_vpc_sg.results | map(attribute='resource.id') }}" + allow_ip_spoofing: "{{ target_provision_host_spec.disable_ip_anti_spoofing }}" # When disable the Anti IP Spoofing = true, then Allow IP Spoofing = true + enable_infrastructure_nat: true # must be true as Virtual Server instances require Infrastructure NAT + protocol_state_filtering_mode: "auto" + auto_delete: true # if VNI created separately, must be false + #network_attachments: + auto_delete_volume: true boot_volume: - name: "{{ inventory_hostname }}-boot-0" @@ -143,7 +158,7 @@ - name: Create fact for delegate host IP ansible.builtin.set_fact: - provisioned_private_ip: "{{ __sap_vm_provision_task_provision_host_single.resource.primary_network_interface[0].primary_ipv4_address }}" + provisioned_private_ip: "{{ __sap_vm_provision_task_provision_host_single.resource.primary_network_attachment[0].virtual_network_interface[0].primary_ip[0].address | default(__sap_vm_provision_task_provision_host_single.resource.primary_network_attachment[0].primary_ip[0].address) }}" # use default to handle different r/ds data structure - name: Copy facts to delegate host @@ -155,7 +170,7 @@ delegate_sap_vm_provision_bastion_ssh_port: "{{ sap_vm_provision_bastion_ssh_port }}" delegate_sap_vm_provision_ssh_bastion_private_key_file_path: "{{ sap_vm_provision_ssh_bastion_private_key_file_path }}" delegate_sap_vm_provision_ssh_host_private_key_file_path: "{{ sap_vm_provision_ssh_host_private_key_file_path }}" - delegate_private_ip: "{{ __sap_vm_provision_task_provision_host_single.resource.primary_network_interface[0].primary_ipv4_address }}" + delegate_private_ip: "{{ __sap_vm_provision_task_provision_host_single.resource.primary_network_attachment[0].virtual_network_interface[0].primary_ip[0].address | default(__sap_vm_provision_task_provision_host_single.resource.primary_network_attachment[0].primary_ip[0].address) }}" # use default to handle different r/ds data structure delegate_hostname: "{{ inventory_hostname }}" delegate_sap_vm_provision_dns_root_domain_name: "{{ sap_vm_provision_dns_root_domain }}" diff --git a/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_setup_ha.yml b/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_setup_ha.yml index be6dd55..58e98c9 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_setup_ha.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible/ibmcloud_vs/execute_setup_ha.yml @@ -658,7 +658,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana + '-pool-sysdb-sql'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('3' + sap_system_hana_db_instance_nr + '13') | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -675,7 +675,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana + '-pool-sysdb-sql'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('3' + sap_system_hana_db_instance_nr + '13') | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -693,7 +693,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana + '-pool-mdc1-sql'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('3' + sap_system_hana_db_instance_nr + '15') | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -710,7 +710,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana + '-pool-mdc1-sql'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('3' + sap_system_hana_db_instance_nr + '15') | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -728,7 +728,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana + '-pool-startsrv-http'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_hana_db_instance_nr + '13') | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -745,7 +745,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana + '-pool-startsrv-http'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_hana_db_instance_nr + '13') | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -763,7 +763,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana + '-pool-startsrv-https'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_hana_db_instance_nr + '14') | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -780,7 +780,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_hana + '-pool-startsrv-https'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_hana_db_instance_nr + '14') | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -798,7 +798,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_anydb))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_anydb + '-pool-ibmdb2'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: 5912 weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -815,7 +815,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_anydb))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_anydb + '-pool-ibmdb2'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: 5912 weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -833,7 +833,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-dp'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('32' + sap_system_nwas_abap_ascs_instance_nr) | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -850,7 +850,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-dp'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('32' + sap_system_nwas_abap_ascs_instance_nr) | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -868,7 +868,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-ms'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('36' + sap_system_nwas_abap_ascs_instance_nr) | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -885,7 +885,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-ms'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('36' + sap_system_nwas_abap_ascs_instance_nr) | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -903,7 +903,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-ms-http'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('81' + sap_system_nwas_abap_ascs_instance_nr) | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -920,7 +920,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-ms-http'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('81' + sap_system_nwas_abap_ascs_instance_nr) | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -938,7 +938,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-enq'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('39' + sap_system_nwas_abap_ascs_instance_nr) | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -955,7 +955,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-enq'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('39' + sap_system_nwas_abap_ascs_instance_nr) | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -973,7 +973,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-enqrepl'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_nwas_abap_ascs_instance_nr + '16') | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -990,7 +990,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-enqrepl'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_nwas_abap_ascs_instance_nr + '16') | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1008,7 +1008,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-sapctrl'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_nwas_abap_ascs_instance_nr + '13') | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1025,7 +1025,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-sapctrl'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_nwas_abap_ascs_instance_nr + '13') | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1043,7 +1043,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-sapctrls'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_nwas_abap_ascs_instance_nr + '14') | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1060,7 +1060,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ascs-pool-sapctrls'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_nwas_abap_ascs_instance_nr + '14') | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1078,7 +1078,7 @@ # ibm.cloudcollection.ibm_is_lb_pool_member: # lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers'))[0].id }}" # pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers-pool-dp'))[0].id }}" -# target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" +# target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" # port: "{{ ('32' + sap_system_nwas_abap_ers_instance_nr) | int }}" # weight: 100 # ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1095,7 +1095,7 @@ # ibm.cloudcollection.ibm_is_lb_pool_member: # lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers'))[0].id }}" # pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers-pool-dp'))[0].id }}" -# target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" +# target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" # port: "{{ ('32' + sap_system_nwas_abap_ers_instance_nr) | int }}" # weight: 1 # ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1113,7 +1113,7 @@ # ibm.cloudcollection.ibm_is_lb_pool_member: # lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers'))[0].id }}" # pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers-pool-ms'))[0].id }}" -# target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" +# target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" # port: "{{ ('36' + sap_system_nwas_abap_ers_instance_nr) | int }}" # weight: 100 # ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1130,7 +1130,7 @@ # ibm.cloudcollection.ibm_is_lb_pool_member: # lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers'))[0].id }}" # pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers-pool-ms'))[0].id }}" -# target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" +# target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" # port: "{{ ('36' + sap_system_nwas_abap_ers_instance_nr) | int }}" # weight: 1 # ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1148,7 +1148,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers-pool-enqr'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('39' + sap_system_nwas_abap_ers_instance_nr) | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1165,7 +1165,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers-pool-enqr'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('39' + sap_system_nwas_abap_ers_instance_nr) | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1183,7 +1183,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers-pool-sapctrl'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_nwas_abap_ers_instance_nr + '13') | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1200,7 +1200,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers-pool-sapctrl'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_nwas_abap_ers_instance_nr + '13') | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1218,7 +1218,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers-pool-sapctrls'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_nwas_abap_ers_instance_nr + '14') | int }}" weight: 100 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" @@ -1235,7 +1235,7 @@ ibm.cloudcollection.ibm_is_lb_pool_member: lb: "{{ (ibmcloud_lbs_all_info | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers'))[0].id }}" pool: "{{ (__sap_vm_provision_task_ibmcloud_lb_pools.results | json_query('[*].resource.pools') | flatten | selectattr('name', '==', sap_vm_provision_ha_load_balancer_name_nwas + '-ers-pool-sapctrls'))[0].id }}" - target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_interface[0].primary_ipv4_address }}" + target_address: "{{ (__sap_vm_provision_task_ibmcloud_vs_all_info.resource.instances | selectattr('name', '==', host_node))[0].primary_network_attachment[0].primary_ip[0].address }}" port: "{{ ('5' + sap_system_nwas_abap_ers_instance_nr + '14') | int }}" weight: 1 ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/aws_ec2_vs/execute_main.yml b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/aws_ec2_vs/execute_main.yml index 4860c16..040e4d3 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/aws_ec2_vs/execute_main.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/aws_ec2_vs/execute_main.yml @@ -4,10 +4,12 @@ block: # Do not use ansible.builtin.copy as this will cause error 'not writable' on localhost (even if user has permissions) - - name: Copy Terraform Template files to temporary directory in current Ansible Playbook directory + # Should not cause overwrite of Terraform State files, but should overwrite populated Terraform Template files if they are updated + - name: Copy Terraform Template files to provided working directory path + run_once: true ansible.builtin.shell: | mkdir -p {{ sap_vm_provision_terraform_work_dir_path }} - cp -r {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} + cp -R {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} - name: Terraform Template for SAP - AWS register: terraform_template1_result @@ -15,6 +17,7 @@ AWS_ACCESS_KEY_ID: "{{ sap_vm_provision_aws_access_key }}" AWS_SECRET_ACCESS_KEY: "{{ sap_vm_provision_aws_secret_access_key }}" AWS_REGION: "{{ sap_vm_provision_aws_region }}" + run_once: true cloud.terraform.terraform: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" state: "{{ sap_vm_provision_terraform_state }}" @@ -40,6 +43,7 @@ sap_nwas_abap_pas_instance_no: "{{ sap_swpm_pas_instance_nr | default('') }}" - name: Terraform Template output + run_once: true ansible.builtin.debug: var: terraform_template1_result @@ -60,6 +64,7 @@ - name: Read outputs from project path when: sap_vm_provision_terraform_state == "present" + run_once: true cloud.terraform.terraform_output: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" register: terraform_output_project_path diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/aws_ec2_vs/tf_template/tf_template_input_vars.tf b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/aws_ec2_vs/tf_template/tf_template_input_vars.tf index 98a41c4..61a0065 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/aws_ec2_vs/tf_template/tf_template_input_vars.tf +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/aws_ec2_vs/tf_template/tf_template_input_vars.tf @@ -64,48 +64,51 @@ variable "sap_vm_provision_bastion_ssh_port" { variable "map_os_image_regex" { + description = "Map of operating systems OS Image regex, to identify latest OS Image for the OS major.minor version" + type = map(any) default = { rhel-8-1 = "*RHEL-8.1*_HVM*x86_64*" - - rhel-8-2 = "*RHEL-8.2*_HVM*x86_64*" - + # rhel-8-2 = "*RHEL-8.2*_HVM*x86_64*" // removed rhel-8-4 = "*RHEL-8.4*_HVM*x86_64*" - rhel-8-6 = "*RHEL-8.6*_HVM*x86_64*" - - rhel-7-7-sap-ha = "*RHEL-SAP-7.7*" - - rhel-7-9-sap-ha = "*RHEL-SAP-7.9*" - + rhel-8-8 = "*RHEL-8.8*_HVM*x86_64*" + rhel-8-10 = "*RHEL-8.10*_HVM*x86_64*" + rhel-9-0 = "*RHEL-9.0*_HVM*x86_64*" + rhel-9-1 = "*RHEL-9.1*_HVM*x86_64*" + rhel-9-2 = "*RHEL-9.2*_HVM*x86_64*" + rhel-9-3 = "*RHEL-9.3*_HVM*x86_64*" + rhel-9-4 = "*RHEL-9.4*_HVM*x86_64*" + + # rhel-7-7-sap-ha = "*RHEL-SAP-7.7*" // removed + # rhel-7-9-sap-ha = "*RHEL-SAP-7.9*" // removed rhel-8-1-sap-ha = "*RHEL-SAP-8.1.0*" - rhel-8-2-sap-ha = "*RHEL-SAP-8.2.0*" - rhel-8-4-sap-ha = "*RHEL-SAP-8.4.0*" - rhel-8-6-sap-ha = "*RHEL-SAP-8.6.0*" + rhel-8-8-sap-ha = "*RHEL-SAP-8.8.0*" + rhel-8-10-sap-ha = "*RHEL-SAP-8.10.0*" - sles-15-2 = "*suse-sles-15-sp2-v202*-hvm-ssd-x86_64*" - - sles-15-3 = "*suse-sles-15-sp3-v202*-hvm-ssd-x86_64*" - - sles-15-4 = "*suse-sles-15-sp4-v202*-hvm-ssd-x86_64*" + sles-12-5 = "*suse-sles-12-sp5-v202*-hvm-ssd-x86_64*" + # sles-15-2 = "*suse-sles-15-sp2-v202*-hvm-ssd-x86_64*" // removed + # sles-15-3 = "*suse-sles-15-sp3-v202*-hvm-ssd-x86_64*" // removed + # sles-15-4 = "*suse-sles-15-sp4-v202*-hvm-ssd-x86_64*" // removed + sles-15-5 = "*suse-sles-15-sp5-v202*-hvm-ssd-x86_64*" + sles-15-6 = "*suse-sles-15-sp6-v202*-hvm-ssd-x86_64*" sles-12-5-sap-ha = "*suse-sles-sap-12-sp5-v202*-hvm-ssd-x86_64*" - sles-15-1-sap-ha = "*suse-sles-sap-15-sp1-v202*-hvm-ssd-x86_64*" - sles-15-2-sap-ha = "*suse-sles-sap-15-sp2-v202*-hvm-ssd-x86_64*" - sles-15-3-sap-ha = "*suse-sles-sap-15-sp3-v202*-hvm-ssd-x86_64*" - sles-15-4-sap-ha = "*suse-sles-sap-15-sp4-v202*-hvm-ssd-x86_64*" + sles-15-5-sap-ha = "*suse-sles-sap-15-sp5-v202*-hvm-ssd-x86_64*" + sles-15-6-sap-ha = "*suse-sles-sap-15-sp6-v202*-hvm-ssd-x86_64*" } + } variable "sap_vm_provision_host_specification_plan" { diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/gcp_ce_vm/execute_main.yml b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/gcp_ce_vm/execute_main.yml index 69d4fde..8af889a 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/gcp_ce_vm/execute_main.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/gcp_ce_vm/execute_main.yml @@ -4,13 +4,16 @@ block: # Do not use ansible.builtin.copy as this will cause error 'not writable' on localhost (even if user has permissions) - - name: Copy Terraform Template files to temporary directory in current Ansible Playbook directory + # Should not cause overwrite of Terraform State files, but should overwrite populated Terraform Template files if they are updated + - name: Copy Terraform Template files to provided working directory path + run_once: true ansible.builtin.shell: | mkdir -p {{ sap_vm_provision_terraform_work_dir_path }} - cp -r {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} + cp -R {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} - name: Terraform Template for SAP - Google Cloud register: terraform_template1_result + run_once: true cloud.terraform.terraform: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" state: "{{ sap_vm_provision_terraform_state }}" @@ -36,6 +39,7 @@ sap_nwas_abap_pas_instance_no: "{{ sap_swpm_pas_instance_nr | default('') }}" - name: Terraform Template output + run_once: true ansible.builtin.debug: var: terraform_template1_result @@ -56,6 +60,7 @@ - name: Read outputs from project path when: sap_vm_provision_terraform_state == "present" + run_once: true cloud.terraform.terraform_output: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" register: terraform_output_project_path diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/gcp_ce_vm/tf_template/tf_template_input_vars.tf b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/gcp_ce_vm/tf_template/tf_template_input_vars.tf index c9013d2..04f71b3 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/gcp_ce_vm/tf_template/tf_template_input_vars.tf +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/gcp_ce_vm/tf_template/tf_template_input_vars.tf @@ -122,70 +122,25 @@ variable "map_os_image_regex" { default = { - rhel-8-latest = { - project = "rhel-cloud" - family = "rhel-8" - }, - - rhel-7-7-sap-ha = { - project = "rhel-sap-cloud" - family = "rhel-7-7-sap-ha" - }, - - rhel-7-9-sap-ha = { - project = "rhel-sap-cloud" - family = "rhel-7-9-sap-ha" - }, - - rhel-8-1-sap-ha = { - project = "rhel-sap-cloud" - family = "rhel-8-1-sap-ha" - }, - - rhel-8-2-sap-ha = { - project = "rhel-sap-cloud" - family = "rhel-8-2-sap-ha" - }, - - rhel-8-4-sap-ha = { - project = "rhel-sap-cloud" - family = "rhel-8-4-sap-ha" - }, - - rhel-8-6-sap-ha = { - project = "rhel-sap-cloud" - family = "rhel-8-6-sap-ha" - }, - - sles-15-latest = { - project = "suse-cloud" - family = "sles-15" - }, - - sles-12-sp5-sap = { - project = "suse-sap-cloud" - family = "sles-12-sp5-sap" - }, - - sles-15-sp1-sap = { - project = "suse-sap-cloud" - family = "sles-15-sp1-sap" - }, - - sles-15-sp2-sap = { - project = "suse-sap-cloud" - family = "sles-15-sp2-sap" - }, - - sles-15-sp3-sap = { - project = "suse-sap-cloud" - family = "sles-15-sp3-sap" - }, - - sles-15-sp4-sap = { - project = "suse-sap-cloud" - family = "sles-15-sp4-sap" - }, + rhel-8-latest = { project = "rhel-cloud" , family = "rhel-8" }, + rhel-9-latest = { project = "rhel-cloud" , family = "rhel-9" }, + + sles-12-latest = { project = "suse-cloud" , family = "sles-12" }, + sles-15-latest = { project = "suse-cloud" , family = "sles-15" }, + + # rhel-7-7-sap-ha = { project = "rhel-sap-cloud" , family = "rhel-7-7-sap-ha" }, // removed + rhel-7-9-sap-ha = { project = "rhel-sap-cloud" , family = "rhel-7-9-sap-ha" }, + # rhel-8-1-sap-ha = { project = "rhel-sap-cloud" , family = "rhel-8-1-sap-ha" }, // removed + rhel-8-2-sap-ha = { project = "rhel-sap-cloud" , family = "rhel-8-2-sap-ha" }, + rhel-8-4-sap-ha = { project = "rhel-sap-cloud" , family = "rhel-8-4-sap-ha" }, + rhel-8-6-sap-ha = { project = "rhel-sap-cloud" , family = "rhel-8-6-sap-ha" }, + + sles-12-sp5-sap = { project = "suse-sap-cloud" , family = "sles-12-sp5-sap" }, + # sles-15-sp1-sap = { project = "suse-sap-cloud" , family = "sles-15-sp1-sap" }, // removed + sles-15-sp2-sap = { project = "suse-sap-cloud" , family = "sles-15-sp2-sap" }, + sles-15-sp3-sap = { project = "suse-sap-cloud" , family = "sles-15-sp3-sap" }, + sles-15-sp4-sap = { project = "suse-sap-cloud" , family = "sles-15-sp4-sap" }, + sles-15-sp5-sap = { project = "suse-sap-cloud" , family = "sles-15-sp5-sap" } } diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/execute_main.yml b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/execute_main.yml index dd401dc..f1c7e7b 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/execute_main.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/execute_main.yml @@ -4,13 +4,16 @@ block: # Do not use ansible.builtin.copy as this will cause error 'not writable' on localhost (even if user has permissions) - - name: Copy Terraform Template files to temporary directory in current Ansible Playbook directory + # Should not cause overwrite of Terraform State files, but should overwrite populated Terraform Template files if they are updated + - name: Copy Terraform Template files to provided working directory path + run_once: true ansible.builtin.shell: | mkdir -p {{ sap_vm_provision_terraform_work_dir_path }} - cp -r {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} + cp -R {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} - - name: Terraform Template for SAP - IBM Cloud + - name: Terraform Template for SAP - IBM Power Virtual Server with IBM Cloud register: terraform_template1_result + run_once: true cloud.terraform.terraform: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" state: "{{ sap_vm_provision_terraform_state }}" @@ -19,8 +22,8 @@ variables: ibmcloud_api_key: "{{ sap_vm_provision_ibmcloud_api_key }}" ibmcloud_resource_group: "{{ sap_vm_provision_ibmcloud_resource_group_name }}" - ibmcloud_vpc_availability_zone: "{{ sap_vm_provision_ibmcloud_availability_zone }}" ibmcloud_vpc_subnet_name: "{{ sap_vm_provision_ibmcloud_vpc_subnet_name }}" + ibmcloud_powervs_location: "{{ sap_vm_provision_ibmcloud_powervs_location }}" sap_vm_provision_resource_prefix: "{{ sap_vm_provision_resource_prefix }}" sap_vm_provision_dns_root_domain: "{{ sap_vm_provision_dns_root_domain }}" sap_vm_provision_bastion_os_image: "{{ sap_vm_provision_bastion_os_image }}" @@ -29,13 +32,14 @@ map_os_image_regex: "{{ lookup('ansible.builtin.vars', 'sap_vm_provision_' + sap_vm_provision_iac_platform + '_host_os_image_dictionary') }}" map_host_specifications: "{{ lookup('ansible.builtin.vars', 'sap_vm_provision_' + sap_vm_provision_iac_platform + '_host_specifications_dictionary') }}" sap_vm_provision_host_specification_plan: "{{ sap_vm_provision_host_specification_plan }}" - sap_vm_provision_ibmcloud_vs_host_os_image: "{{ sap_vm_provision_ibmcloud_vs_host_os_image }}" + sap_vm_provision_ibmcloud_powervs_host_os_image: "{{ sap_vm_provision_ibmcloud_powervs_host_os_image }}" sap_install_media_detect_source_directory: "{{ sap_install_media_detect_source_directory }}" sap_hana_install_instance_nr: "{{ sap_hana_install_instance_nr | default('') }}" sap_nwas_abap_ascs_instance_no: "{{ sap_swpm_ascs_instance_nr | default('') }}" sap_nwas_abap_pas_instance_no: "{{ sap_swpm_pas_instance_nr | default('') }}" - name: Terraform Template output + run_once: true ansible.builtin.debug: var: terraform_template1_result @@ -56,6 +60,7 @@ - name: Read outputs from project path when: sap_vm_provision_terraform_state == "present" + run_once: true cloud.terraform.terraform_output: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" register: terraform_output_project_path diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/tf_template/tf_template.tf b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/tf_template/tf_template.tf index 9d77d69..eefe6da 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/tf_template/tf_template.tf +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/tf_template/tf_template.tf @@ -15,37 +15,20 @@ terraform { # Terraform Provider declaration provider "ibm" { - alias = "standard" - - # Define Provider inputs manually - # ibmcloud_api_key = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" - # Define Provider inputs from given Terraform Variables ibmcloud_api_key = var.ibmcloud_api_key - - # If using IBM Cloud Automation Manager, the Provider declaration values are populated automatically - # from the Cloud Connection credentials (by using Environment Variables) - - # If using IBM Cloud Schematics, the Provider declaration values are populated automatically - region = local.ibmcloud_region - zone = lower(var.ibmcloud_powervs_location) // Required for IBM Power VS only - } - +# Terraform Provider (with Alias) declaration - for IBM Power Infrastructure environment via IBM Cloud provider "ibm" { - - alias = "powervs_secure" - + alias = "powervs_secure_enclave" + # Define Provider inputs from given Terraform Variables ibmcloud_api_key = var.ibmcloud_api_key - - region = local.ibmcloud_powervs_region - - zone = lower(var.ibmcloud_powervs_location) // Required for IBM Power VS only - + region = local.ibmcloud_powervs_region // IBM Power VS Region + zone = lower(var.ibmcloud_powervs_location) // IBM Power VS Location } @@ -163,7 +146,11 @@ module "run_account_bootstrap_powervs_workspace_module" { source = "github.com/sap-linuxlab/terraform.modules_for_sap//ibmcloud_powervs/account_bootstrap_powervs_workspace?ref=main" - providers = { ibm = ibm.standard } + # Define TF Module child provider name = TF Template parent provider name + providers = { + ibm.main = ibm.standard , + ibm.powervs_secure_enclave = ibm.powervs_secure_enclave + } module_var_resource_group_id = module.run_account_init_module.output_resource_group_id module_var_resource_prefix = var.sap_vm_provision_resource_prefix @@ -182,13 +169,18 @@ module "run_account_bootstrap_powervs_networks_module" { source = "github.com/sap-linuxlab/terraform.modules_for_sap//ibmcloud_powervs/account_bootstrap_powervs_networks?ref=main" - providers = { ibm = ibm.powervs_secure } + # Define TF Module child provider name = TF Template parent provider name + providers = { + ibm.main = ibm.standard , + ibm.powervs_secure_enclave = ibm.powervs_secure_enclave + } - module_var_resource_group_id = module.run_account_init_module.output_resource_group_id - module_var_resource_prefix = var.sap_vm_provision_resource_prefix - module_var_ibmcloud_power_zone = lower(var.ibmcloud_powervs_location) - module_var_ibmcloud_powervs_workspace_guid = module.run_account_bootstrap_powervs_workspace_module.output_power_group_guid - module_var_ibmcloud_vpc_crn = module.run_account_bootstrap_powervs_workspace_module.output_power_target_vpc_crn + module_var_resource_group_id = module.run_account_init_module.output_resource_group_id + module_var_resource_prefix = var.sap_vm_provision_resource_prefix + module_var_ibmcloud_power_zone = lower(var.ibmcloud_powervs_location) + module_var_ibmcloud_powervs_workspace_guid = module.run_account_bootstrap_powervs_workspace_module.output_power_guid + module_var_ibmcloud_vpc_crn = module.run_account_bootstrap_powervs_workspace_module.output_power_target_vpc_crn + module_var_ibmcloud_tgw_instance_name = module.run_account_bootstrap_module.output_tgw_name } @@ -204,10 +196,10 @@ module "run_powervs_interconnect_sg_update_module" { providers = { ibm = ibm.standard } - module_var_bastion_security_group_id = module.run_bastion_inject_module.output_bastion_security_group_id - module_var_host_security_group_id = module.run_account_bootstrap_module.output_host_security_group_id + module_var_bastion_security_group_id = module.run_bastion_inject_module.output_bastion_security_group_id + module_var_host_security_group_id = module.run_account_bootstrap_module.output_host_security_group_id - module_var_power_group_network_private_subnet = module.run_account_bootstrap_powervs_networks_module.output_power_group_network_private_subnet + module_var_power_network_private_subnet = module.run_account_bootstrap_powervs_networks_module.output_power_network_private_subnet } @@ -245,7 +237,7 @@ module "run_powervs_interconnect_proxy_provision_module" { module_var_host_private_ssh_key = module.run_account_bootstrap_module.output_host_private_ssh_key module_var_host_security_group_id = module.run_account_bootstrap_module.output_host_security_group_id - module_var_proxy_os_image = var.map_os_image_regex[var.sap_vm_provision_bastion_os_image] + module_var_proxy_os_image = var.map_os_image_regex_bastion[var.sap_vm_provision_bastion_os_image] module_var_dns_root_domain_name = var.sap_vm_provision_dns_root_domain module_var_dns_services_instance = module.run_account_bootstrap_module.output_host_dns_services_instance @@ -269,14 +261,18 @@ module "run_host_provision_module" { source = "github.com/sap-linuxlab/terraform.modules_for_sap//ibmcloud_powervs/host_provision?ref=main" - providers = { ibm = ibm.powervs_secure } + # Define TF Module child provider name = TF Template parent provider name + providers = { + ibm.main = ibm.standard , + ibm.powervs_secure_enclave = ibm.powervs_secure_enclave + } module_var_resource_group_id = module.run_account_init_module.output_resource_group_id module_var_resource_prefix = var.sap_vm_provision_resource_prefix module_var_resource_tags = var.resource_tags - module_var_ibm_power_group_guid = module.run_account_bootstrap_powervs_workspace_module.output_power_group_guid - module_var_power_group_networks = module.run_account_bootstrap_powervs_networks_module.output_power_group_networks + module_var_ibm_power_guid = module.run_account_bootstrap_powervs_workspace_module.output_power_guid + module_var_power_networks = module.run_account_bootstrap_powervs_networks_module.output_power_networks module_var_ibmcloud_vpc_subnet_name = local.ibmcloud_vpc_subnet_create_boolean ? module.run_account_init_module.output_vpc_subnet_name : var.ibmcloud_vpc_subnet_name @@ -288,12 +284,20 @@ module "run_host_provision_module" { module_var_host_public_ssh_key = module.run_account_bootstrap_module.output_host_public_ssh_key module_var_host_private_ssh_key = module.run_account_bootstrap_module.output_host_private_ssh_key - module_var_host_os_image = var.map_os_image_regex[var.sap_vm_provision_ibmcloud_vs_host_os_image] + module_var_host_os_image = var.map_os_image_regex[var.sap_vm_provision_ibmcloud_powervs_host_os_image] module_var_dns_root_domain_name = var.sap_vm_provision_dns_root_domain module_var_dns_services_instance = module.run_account_bootstrap_module.output_host_dns_services_instance - module_var_dns_proxy_ip = module.run_powervs_interconnect_proxy_provision_module.output_proxy_private_ip + module_var_dns_custom_resolver_ip = module.run_powervs_interconnect_proxy_provision_module.output_dns_custom_resolver_ip + + module_var_web_proxy_enable = true + module_var_web_proxy_url = "http://${module.run_powervs_interconnect_proxy_provision_module.output_proxy_private_ip}:${module.run_powervs_interconnect_proxy_provision_module.output_proxy_port_squid}" + module_var_web_proxy_exclusion = "localhost,127.0.0.1,${var.sap_vm_provision_dns_root_domain}" // Web Proxy exclusion list for hosts running on IBM Power (e.g. localhost,127.0.0.1,custom.root.domain) + + module_var_os_vendor_enable = false # After Terraform has provisioned hosts, this will be done by Ansible + module_var_os_vendor_account_user = "" + module_var_os_vendor_account_user_passcode = "" # Set Terraform Module Variables using for_each loop on a map Terraform Variable with nested objects @@ -303,17 +307,9 @@ module "run_host_provision_module" { module_var_virtual_server_hostname = each.key - module_var_virtual_server_profile = var.map_host_specifications[var.sap_vm_provision_host_specification_plan][each.key].virtual_server_profile + module_var_hardware_machine_type = var.map_host_specifications[var.sap_vm_provision_host_specification_plan][each.key].ibmcloud_powervs_hardware_machine_type + module_var_virtual_server_profile = var.map_host_specifications[var.sap_vm_provision_host_specification_plan][each.key].virtual_machine_profile module_var_storage_definition = [ for storage_item in var.map_host_specifications[var.sap_vm_provision_host_specification_plan][each.key]["storage_definition"] : storage_item if contains(keys(storage_item),"disk_size") && try(storage_item.swap_path,"") == "" ] - module_var_web_proxy_enable = false - module_var_os_vendor_enable = false - - module_var_web_proxy_url = "" - module_var_web_proxy_exclusion = "" - - module_var_os_vendor_account_user = "" - module_var_os_vendor_account_user_passcode = "" - } diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/tf_template/tf_template_input_vars.tf b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/tf_template/tf_template_input_vars.tf index e668953..e343c2d 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/tf_template/tf_template_input_vars.tf +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_powervs/tf_template/tf_template_input_vars.tf @@ -30,22 +30,25 @@ variable "map_ibm_powervs_to_vpc_az" { type = map(any) default = { - + dal10 = "us-south-1" dal12 = "us-south-2" - us-south = "us-south-3" // naming of IBM Power VS location 'us-south' was previous naming convention, would otherwise be 'DAL13' - us-east = "us-east-1" // naming of IBM Power VS location 'us-east' was previous naming convention, would otherwise be 'WDC04' - # wdc06 = "us-east-2" // No Cloud Connection available at this location + us-south = "us-south-3" // naming of IBM Power VS location 'us-south' was previous naming convention, would otherwise be 'dal13' + us-east = "us-east-1" // naming of IBM Power VS location 'us-east' was previous naming convention, would otherwise be 'wdc04' + wdc06 = "us-east-2" + wdc07 = "us-east-3" sao01 = "br-sao-1" + sao02 = "br-sao-2" tor01 = "ca-tor-1" - eu-de-1 = "eu-de-2" // naming of IBM Power VS location 'eu-de-1' was previous naming convention, would otherwise be 'FRA04' - eu-de-2 = "eu-de-3" // naming of IBM Power VS location 'eu-de-2' was previous naming convention, would otherwise be 'FRA05' + eu-de-1 = "eu-de-2" // naming of IBM Power VS location 'eu-de-1' was previous naming convention, would otherwise be 'fra04' + eu-de-2 = "eu-de-3" // naming of IBM Power VS location 'eu-de-2' was previous naming convention, would otherwise be 'fra05' lon04 = "eu-gb-1" lon06 = "eu-gb-3" + mad02 = "eu-es-1" + mad04 = "eu-es-2" syd04 = "au-syd-2" syd05 = "au-syd-3" tok04 = "jp-tok-2" osa21 = "jp-osa-1" - } } @@ -60,22 +63,25 @@ variable "map_ibm_powervs_location_to_powervs_region" { type = map(any) default = { - + dal10 = "us-south" dal12 = "us-south" us-south = "us-south" us-east = "us-east" - # wdc06 = "us-east" // no Cloud Connection available at this location + wdc06 = "us-east" + wdc07 = "us-east" sao01 = "sao" + sao02 = "sao" tor01 = "tor" eu-de-1 = "eu-de" eu-de-2 = "eu-de" lon04 = "lon" lon06 = "lon" + mad02 = "mad" + mad04 = "mad" syd04 = "syd" syd05 = "syd" tok04 = "tok" osa21 = "osa" - } } @@ -138,7 +144,7 @@ variable "sap_vm_provision_host_specification_plan" { description = "Host specification plans are xsmall_256gb. This variable uses the locals mapping with a nested list of host specifications, and will alter host provisioning." } -variable "sap_vm_provision_ibmcloud_vs_host_os_image" { +variable "sap_vm_provision_ibmcloud_powervs_host_os_image" { description = "Host OS Image. This variable uses the locals mapping with regex of OS Images, and will alter host provisioning." } @@ -193,35 +199,13 @@ variable "map_os_image_regex_bastion" { default = { - rhel-7-6-sap-ha = ".*redhat.*7-6.*amd64.*hana.*" - - rhel-8-1-sap-ha = ".*redhat.*8-1.*amd64.*hana.*" - - rhel-8-2-sap-ha = ".*redhat.*8-2.*amd64.*hana.*" - - rhel-8-4-sap-ha = ".*redhat.*8-4.*amd64.*hana.*" - - rhel-7-6-sap-applications = ".*redhat.*7-6.*amd64.*applications.*" - - rhel-8-1-sap-applications = ".*redhat.*8-1.*amd64.*applications.*" - - rhel-8-2-sap-applications = ".*redhat.*8-2.*amd64.*applications.*" - - rhel-8-4-sap-applications = ".*redhat.*8-4.*amd64.*applications.*" - - rhel-8-4 = ".*redhat.*8-4.*minimal.*amd64.*" - - sles-12-4-sap-ha = ".*sles.*12-4.*amd64.*hana.*" + rhel-8-8 = ".*redhat.*8-8.*minimal.*amd64.*" + rhel-8-10 = ".*redhat.*8-10.*minimal.*amd64.*" + rhel-9-2 = ".*redhat.*9-2.*minimal.*amd64.*" + rhel-9-4 = ".*redhat.*9-4.*minimal.*amd64.*" - sles-15-1-sap-ha = ".*sles.*15-1.*amd64.*hana.*" - - sles-15-2-sap-ha = ".*sles.*15-2.*amd64.*hana.*" - - sles-12-4-sap-applications = ".*sles.*12-4.*amd64.*applications.*" - - sles-15-1-sap-applications = ".*sles.*15-1.*amd64.*applications.*" - - sles-15-2-sap-applications = ".*sles.*15-2.*amd64.*applications.*" + sles-15-5 = ".*sles.*15-5.*amd64-[0-9]" + sles-15-6 = ".*sles.*15-6.*amd64-[0-9]" } @@ -236,25 +220,24 @@ variable "map_os_image_regex" { default = { - rhel-8-4 = ".*RHEL.*8.*4" - - rhel-8-6 = ".*RHEL.*8.*6" - - rhel-9-2 = ".*RHEL.*9.*2" - - sles-15-3 = ".*SLES.*15.*3" - - sles-15-4 = ".*SLES.*15.*4" - - rhel-8-4-sap-ha = ".*RHEL.*8.*4.*SAP$" # ensure string suffix using $ - - rhel-8-6-sap-ha = ".*RHEL.*8.*6.*SAP$" # ensure string suffix using $ - - sles-15-2-sap = ".*SLES.*15.*2.*SAP$" # ensure string suffix using $ - - sles-15-3-sap = ".*SLES.*15.*3.*SAP$" # ensure string suffix using $ - - sles-15-4-sap = ".*SLES.*15.*4.*SAP$" # ensure string suffix using $ + # OS Image keys for IBM Power Virtual Server + rhel-8-4-sap-ha = "RHEL8-SP4-SAP" + rhel-8-4-sap-ha-byol = "RHEL8-SP4-SAP-BYOL" + rhel-8-6-sap-ha = "RHEL8-SP6-SAP" + rhel-8-6-sap-ha-byol = "RHEL8-SP6-SAP-BYOL" + rhel-8-8-sap-ha = "RHEL8-SP8-SAP" + rhel-8-8-sap-ha-byol = "RHEL8-SP8-SAP-BYOL" + rhel-9-2-sap-ha = "RHEL9-SP2-SAP" + rhel-9-2-sap-ha-byol = "RHEL9-SP2-SAP-BYOL" + + sles-15-2-sap-ha = "SLES15-SP2-SAP" + sles-15-2-sap-ha-byol = "SLES15-SP2-SAP-BYOL" + sles-15-3-sap-ha = "SLES15-SP3-SAP" + sles-15-3-sap-ha-byol = "SLES15-SP3-SAP-BYOL" + sles-15-4-sap-ha = "SLES15-SP4-SAP" + sles-15-4-sap-ha-byol = "SLES15-SP4-SAP-BYOL" + sles-15-5-sap-ha = "SLES15-SP5-SAP" + sles-15-5-sap-ha-byol = "SLES15-SP5-SAP-BYOL" } @@ -271,6 +254,7 @@ variable "map_host_specifications" { small_256gb = { hana01 = { // Hostname + ibmcloud_powervs_hardware_machine_type = "e1080" virtual_server_profile = "ush1-4x256" // An IBM PowerVS host will be set to Tier 1 or Tier 3 storage type, and cannot use block storage volumes from both storage types // Therefore all block storage volumes are provisioned with Tier 1 (this cannot be changed once provisioned) diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_vs/execute_main.yml b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_vs/execute_main.yml index dd401dc..4136e27 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_vs/execute_main.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_vs/execute_main.yml @@ -4,13 +4,16 @@ block: # Do not use ansible.builtin.copy as this will cause error 'not writable' on localhost (even if user has permissions) - - name: Copy Terraform Template files to temporary directory in current Ansible Playbook directory + # Should not cause overwrite of Terraform State files, but should overwrite populated Terraform Template files if they are updated + - name: Copy Terraform Template files to provided working directory path + run_once: true ansible.builtin.shell: | mkdir -p {{ sap_vm_provision_terraform_work_dir_path }} - cp -r {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} + cp -R {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} - name: Terraform Template for SAP - IBM Cloud register: terraform_template1_result + run_once: true cloud.terraform.terraform: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" state: "{{ sap_vm_provision_terraform_state }}" @@ -36,6 +39,7 @@ sap_nwas_abap_pas_instance_no: "{{ sap_swpm_pas_instance_nr | default('') }}" - name: Terraform Template output + run_once: true ansible.builtin.debug: var: terraform_template1_result @@ -56,6 +60,7 @@ - name: Read outputs from project path when: sap_vm_provision_terraform_state == "present" + run_once: true cloud.terraform.terraform_output: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" register: terraform_output_project_path diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_vs/tf_template/tf_template_input_vars.tf b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_vs/tf_template/tf_template_input_vars.tf index 4cbf7d3..d5cd41b 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_vs/tf_template/tf_template_input_vars.tf +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmcloud_vs/tf_template/tf_template_input_vars.tf @@ -99,35 +99,33 @@ variable "map_os_image_regex" { default = { - rhel-7-6-sap-ha = ".*redhat.*7-6.*amd64.*hana.*" - - rhel-8-1-sap-ha = ".*redhat.*8-1.*amd64.*hana.*" - - rhel-8-2-sap-ha = ".*redhat.*8-2.*amd64.*hana.*" - + rhel-8-8 = ".*redhat.*8-8.*minimal.*amd64.*" + rhel-8-10 = ".*redhat.*8-10.*minimal.*amd64.*" + rhel-9-2 = ".*redhat.*9-2.*minimal.*amd64.*" + rhel-9-4 = ".*redhat.*9-4.*minimal.*amd64.*" + sles-15-5 = ".*sles.*15-5.*amd64-[0-9]" + sles-15-6 = ".*sles.*15-6.*amd64-[0-9]" + + # rhel-7-6-sap-ha = ".*redhat.*7-6.*amd64.*hana.*" // retrievable from deprecated list + # rhel-7-9-sap-ha = ".*redhat.*7-9.*amd64.*hana.*" // retrievable from deprecated list + # rhel-8-1-sap-ha = ".*redhat.*8-1.*amd64.*hana.*" // retrievable from deprecated list + # rhel-8-2-sap-ha = ".*redhat.*8-2.*amd64.*hana.*" // retrievable from deprecated list rhel-8-4-sap-ha = ".*redhat.*8-4.*amd64.*hana.*" - - rhel-7-6-sap-applications = ".*redhat.*7-6.*amd64.*applications.*" - - rhel-8-1-sap-applications = ".*redhat.*8-1.*amd64.*applications.*" - - rhel-8-2-sap-applications = ".*redhat.*8-2.*amd64.*applications.*" - - rhel-8-4-sap-applications = ".*redhat.*8-4.*amd64.*applications.*" - - rhel-8-4 = ".*redhat.*8-4.*minimal.*amd64.*" - - sles-12-4-sap-ha = ".*sles.*12-4.*amd64.*hana.*" - - sles-15-1-sap-ha = ".*sles.*15-1.*amd64.*hana.*" - + rhel-8-6-sap-ha = ".*redhat.*8-6.*amd64.*hana.*" + rhel-8-8-sap-ha = ".*redhat.*8-8.*amd64.*hana.*" + rhel-8-10-sap-ha = ".*redhat.*8-10.*amd64.*hana.*" + rhel-9-0-sap-ha = ".*redhat.*9-0.*amd64.*hana.*" + rhel-9-2-sap-ha = ".*redhat.*9-2.*amd64.*hana.*" + rhel-9-4-sap-ha = ".*redhat.*9-4.*amd64.*hana.*" + + # sles-12-4-sap-ha = ".*sles.*12-4.*amd64.*hana.*" // retrievable from deprecated list + # sles-12-5-sap-ha = ".*sles.*12-5.*amd64.*hana.*" // retrievable from deprecated list + # sles-15-1-sap-ha = ".*sles.*15-1.*amd64.*hana.*" // retrievable from deprecated list sles-15-2-sap-ha = ".*sles.*15-2.*amd64.*hana.*" - - sles-12-4-sap-applications = ".*sles.*12-4.*amd64.*applications.*" - - sles-15-1-sap-applications = ".*sles.*15-1.*amd64.*applications.*" - - sles-15-2-sap-applications = ".*sles.*15-2.*amd64.*applications.*" + sles-15-3-sap-ha = ".*sles.*15-3.*amd64.*hana.*" + sles-15-4-sap-ha = ".*sles.*15-4.*amd64.*hana.*" + sles-15-5-sap-ha = ".*sles.*15-5.*amd64.*hana.*" + sles-15-6-sap-ha = ".*sles.*15-6.*amd64.*hana.*" } diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmpowervm_vm/execute_main.yml b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmpowervm_vm/execute_main.yml index fa3df4f..3e95288 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmpowervm_vm/execute_main.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/ibmpowervm_vm/execute_main.yml @@ -12,13 +12,16 @@ block: # Do not use ansible.builtin.copy as this will cause error 'not writable' on localhost (even if user has permissions) - - name: Copy Terraform Template files to temporary directory in current Ansible Playbook directory + # Should not cause overwrite of Terraform State files, but should overwrite populated Terraform Template files if they are updated + - name: Copy Terraform Template files to provided working directory path + run_once: true ansible.builtin.shell: | mkdir -p {{ sap_vm_provision_terraform_work_dir_path }} - cp -r {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} + cp -R {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} - name: Terraform Template for SAP - IBM PowerVM register: terraform_template1_result + run_once: true cloud.terraform.terraform: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" state: "{{ sap_vm_provision_terraform_state }}" @@ -53,6 +56,7 @@ sap_nwas_abap_pas_instance_no: "{{ sap_swpm_pas_instance_nr | default('') }}" - name: Terraform Template output + run_once: true ansible.builtin.debug: var: terraform_template1_result @@ -73,6 +77,7 @@ - name: Read outputs from project path when: sap_vm_provision_terraform_state == "present" + run_once: true cloud.terraform.terraform_output: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" register: terraform_output_project_path diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/msazure_vm/execute_main.yml b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/msazure_vm/execute_main.yml index 9cafc1b..addf9d9 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/msazure_vm/execute_main.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/msazure_vm/execute_main.yml @@ -4,13 +4,16 @@ block: # Do not use ansible.builtin.copy as this will cause error 'not writable' on localhost (even if user has permissions) - - name: Copy Terraform Template files to temporary directory in current Ansible Playbook directory + # Should not cause overwrite of Terraform State files, but should overwrite populated Terraform Template files if they are updated + - name: Copy Terraform Template files to provided working directory path + run_once: true ansible.builtin.shell: | mkdir -p {{ sap_vm_provision_terraform_work_dir_path }} - cp -r {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} + cp -R {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} - name: Terraform Template for SAP - MS Azure register: terraform_template1_result + run_once: true cloud.terraform.terraform: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" state: "{{ sap_vm_provision_terraform_state }}" @@ -41,6 +44,7 @@ sap_nwas_abap_pas_instance_no: "{{ sap_swpm_pas_instance_nr | default('') }}" - name: Terraform Template output + run_once: true ansible.builtin.debug: var: terraform_template1_result @@ -61,6 +65,7 @@ - name: Read outputs from project path when: sap_vm_provision_terraform_state == "present" + run_once: true cloud.terraform.terraform_output: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" register: terraform_output_project_path diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/msazure_vm/tf_template/tf_template_input_vars.tf b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/msazure_vm/tf_template/tf_template_input_vars.tf index ff236f2..fa6477d 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/msazure_vm/tf_template/tf_template_input_vars.tf +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/msazure_vm/tf_template/tf_template_input_vars.tf @@ -142,47 +142,48 @@ variable "map_os_image_regex" { default = { - rhel-8-4 = { - publisher = "RedHat" - offer = "RHEL" - sku = "84-gen2" - }, - - rhel-8-1-sap-ha = { - publisher = "RedHat" - offer = "RHEL-SAP-HA" - sku = "81sapha-gen2" - }, - - rhel-8-2-sap-ha = { - publisher = "RedHat" - offer = "RHEL-SAP-HA" - sku = "82sapha-gen2" - }, - - rhel-8-4-sap-ha = { - publisher = "RedHat" - offer = "RHEL-SAP-HA" - sku = "84sapha-gen2" - }, - - rhel-8-1-sap-applications = { - publisher = "RedHat" - offer = "RHEL-SAP-APPS" - sku = "81sapapps-gen2" - }, - - rhel-8-2-sap-applications = { - publisher = "RedHat" - offer = "RHEL-SAP-APPS" - sku = "82sapapps-gen2" - }, - - rhel-8-4-sap-applications = { - publisher = "RedHat" - offer = "RHEL-SAP-APPS" - sku = "84sapapps-gen2" - } + rhel-8-0 = { publisher = "RedHat" , offer = "RHEL" , sku = "8-gen2" }, + rhel-8-1 = { publisher = "RedHat" , offer = "RHEL" , sku = "81gen2" }, + rhel-8-2 = { publisher = "RedHat" , offer = "RHEL" , sku = "82gen2" }, + rhel-8-3 = { publisher = "RedHat" , offer = "RHEL" , sku = "83-gen2" }, + rhel-8-4 = { publisher = "RedHat" , offer = "RHEL" , sku = "84-gen2" }, + rhel-8-5 = { publisher = "RedHat" , offer = "RHEL" , sku = "85-gen2" }, + rhel-8-6 = { publisher = "RedHat" , offer = "RHEL" , sku = "86-gen2" }, + rhel-8-7 = { publisher = "RedHat" , offer = "RHEL" , sku = "87-gen2" }, + rhel-8-8 = { publisher = "RedHat" , offer = "RHEL" , sku = "88-gen2" }, + rhel-8-9 = { publisher = "RedHat" , offer = "RHEL" , sku = "89-gen2" }, + rhel-8-10 = { publisher = "RedHat" , offer = "RHEL" , sku = "810-gen2" }, + rhel-9-0 = { publisher = "RedHat" , offer = "RHEL" , sku = "90-gen2" }, + rhel-9-1 = { publisher = "RedHat" , offer = "RHEL" , sku = "91-gen2" }, + rhel-9-2 = { publisher = "RedHat" , offer = "RHEL" , sku = "92-gen2" }, + rhel-9-3 = { publisher = "RedHat" , offer = "RHEL" , sku = "93-gen2" }, + rhel-9-4 = { publisher = "RedHat" , offer = "RHEL" , sku = "94-gen2" }, + + rhel-8-1-sap-ha = { publisher = "RedHat" , offer = "RHEL-SAP-HA" , sku = "81sapha-gen2" }, + rhel-8-2-sap-ha = { publisher = "RedHat" , offer = "RHEL-SAP-HA" , sku = "82sapha-gen2" }, + rhel-8-4-sap-ha = { publisher = "RedHat" , offer = "RHEL-SAP-HA" , sku = "84sapha-gen2" }, + rhel-8-6-sap-ha = { publisher = "RedHat" , offer = "RHEL-SAP-HA" , sku = "86sapha-gen2" }, + rhel-8-8-sap-ha = { publisher = "RedHat" , offer = "RHEL-SAP-HA" , sku = "88sapha-gen2" }, + rhel-8-10-sap-ha = { publisher = "RedHat" , offer = "RHEL-SAP-HA" , sku = "810sapha-gen2" }, + rhel-9-0-sap-ha = { publisher = "RedHat" , offer = "RHEL-SAP-HA" , sku = "90sapha-gen2" }, + rhel-9-2-sap-ha = { publisher = "RedHat" , offer = "RHEL-SAP-HA" , sku = "92sapha-gen2" }, + rhel-9-4-sap-ha = { publisher = "RedHat" , offer = "RHEL-SAP-HA" , sku = "94sapha-gen2" }, + + sles-12-5 = { publisher = "SUSE" , offer = "sles-12-sp5" , sku = "gen2" }, + sles-15-1 = { publisher = "SUSE" , offer = "sles-15-sp1" , sku = "gen2" }, + sles-15-2 = { publisher = "SUSE" , offer = "sles-15-sp2" , sku = "gen2" }, + sles-15-3 = { publisher = "SUSE" , offer = "sles-15-sp3" , sku = "gen2" }, + sles-15-4 = { publisher = "SUSE" , offer = "sles-15-sp4" , sku = "gen2" }, + sles-15-5 = { publisher = "SUSE" , offer = "sles-15-sp5" , sku = "gen2" }, + sles-15-6 = { publisher = "SUSE" , offer = "sles-15-sp6" , sku = "gen2" }, + + sles-12-5-sap-ha = { publisher = "SUSE" , offer = "sles-sap-12-sp5" , sku = "gen2" }, + sles-15-1-sap-ha = { publisher = "SUSE" , offer = "sles-sap-15-sp1" , sku = "gen2" }, + sles-15-2-sap-ha = { publisher = "SUSE" , offer = "sles-sap-15-sp2" , sku = "gen2" }, + sles-15-3-sap-ha = { publisher = "SUSE" , offer = "sles-sap-15-sp3" , sku = "gen2" }, + sles-15-4-sap-ha = { publisher = "SUSE" , offer = "sles-sap-15-sp4" , sku = "gen2" }, + sles-15-5-sap-ha = { publisher = "SUSE" , offer = "sles-sap-15-sp5" , sku = "gen2" }, + sles-15-6-sap-ha = { publisher = "SUSE" , offer = "sles-sap-15-sp6" , sku = "gen2" } } diff --git a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/vmware_vm/execute_main.yml b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/vmware_vm/execute_main.yml index ef0ac36..27a76bd 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/vmware_vm/execute_main.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible_to_terraform/vmware_vm/execute_main.yml @@ -13,13 +13,16 @@ block: # Do not use ansible.builtin.copy as this will cause error 'not writable' on localhost (even if user has permissions) - - name: Copy Terraform Template files to temporary directory in current Ansible Playbook directory + # Should not cause overwrite of Terraform State files, but should overwrite populated Terraform Template files if they are updated + - name: Copy Terraform Template files to provided working directory path + run_once: true ansible.builtin.shell: | mkdir -p {{ sap_vm_provision_terraform_work_dir_path }} - cp -r {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} + cp -R {{ role_path }}/tasks/platform_ansible_to_terraform/{{ sap_vm_provision_iac_platform }}/tf_template/* {{ sap_vm_provision_terraform_work_dir_path }} - name: Terraform Template for SAP - VMware register: terraform_template1_result + run_once: true cloud.terraform.terraform: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" state: "{{ sap_vm_provision_terraform_state }}" @@ -54,6 +57,7 @@ sap_nwas_abap_pas_instance_no: "{{ sap_swpm_pas_instance_nr | default('') }}" - name: Terraform Template output + run_once: true ansible.builtin.debug: var: terraform_template1_result @@ -74,6 +78,7 @@ - name: Read outputs from project path when: sap_vm_provision_terraform_state == "present" + run_once: true cloud.terraform.terraform_output: project_path: "{{ sap_vm_provision_terraform_work_dir_path }}" register: terraform_output_project_path