// Module included in the following assemblies: // // * installing/installing_aws/installing-aws-customizations.adoc // * installing/installing_aws/installing-aws-default.adoc // * installing/installing_aws/installing-aws-government-region.adoc // * installing/installing_aws/installing-aws-private.adoc // * installing/installing_aws/installing-aws-vpc.adoc // * installing/installing_aws/installing-aws-specialized-region.adoc // * installing/installing-aws-localzone.adoc // * installing/installing-aws-wavelength-zone.adoc // * installing/installing_aws/installing-restricted-networks-aws-installer-provisioned.adoc // * installing/installing_aws/installing-aws-outposts-remote-workers.adoc // * installing/installing_azure/installing-azure-customizations.adoc // * installing/installing_azure/installing-azure-default.adoc // * installing/installing_azure/installing-azure-government-region.adoc // * installing/installing_azure/installing-azure-private.adoc // * installing/installing_azure/installing-azure-vnet.adoc // * installing/installing_azure_stack_hub/installing-azure-stack-hub-default.adoc // * installing/installing_gcp/installing-gcp-customizations.adoc // * installing/installing_gcp/installing-gcp-private.adoc // * installing/installing_gcp/installing-gcp-default.adoc // * installing/installing_gcp/installing-gcp-vpc.adoc // * installing/installing_gcp/installing-gcp-shared-vpc.adoc // * installing/installing_gcp/installing-restricted-networks-gcp-installer-provisioned.adoc // * installing/installing_gcp/installing-ibm-cloud-customizations.adoc // * installing/installing_gcp/installing-ibm-cloud-vpc.adoc // * installing/installing_ibm_cloud/installing-ibm-cloud-customizations.adoc // * installing/installing_ibm_cloud/installing-ibm-cloud-vpc.adoc // * installing/installing_ibm_cloud/installing-ibm-cloud-private.adoc // * installing/installing_ibm_cloud/installing-ibm-cloud-restricted.adoc // * installing/installing_openstack/installing-openstack-installer-custom.adoc // * installing/installing_openstack/installing-openstack-installer-restricted.adoc // * installing/installing_openstack/installing-openstack-installer.adoc // * installing/installing_vsphere/installing-vsphere-installer-provisioned.adoc // * installing/installing_vsphere/installing-vsphere-installer-provisioned-customizations.adoc // * installing/installing_vsphere/installing-restricted-networks-installer-provisioned-vsphere.adoc // * installing/installing-nutanix-installer-provisioned.adoc // * installing/installing-restricted-networks-nutanix-installer-provisioned.adoc // * installing/installing_ibm_powervc/installing-ibm-powervc-installer-custom.adoc // * installing/installing_ibm_powervs/installing-ibm-power-vs-customizations.adoc // * installing/installing_ibm_powervs/installing-ibm-power-vs-private-cluster.adoc // * installing/installing_ibm_powervs/installing-restricted-networks-ibm-power-vs.adoc // * installing/installing_ibm_powervs/installing-ibm-powervs-vpc.adoc // * installing/installing-restricted-networks-azure-installer-provisioned.adoc // If you use this module in any other assembly, you must update the ifeval // statements. ifeval::["{context}" == "installing-aws-private"] :custom-config: :aws: endif::[] ifeval::["{context}" == "installing-aws-customizations"] :custom-config: :aws: endif::[] ifeval::["{context}" == "installing-aws-china-region"] :custom-config: :aws: endif::[] ifeval::["{context}" == "installing-aws-government-region"] :custom-config: :aws: endif::[] ifeval::["{context}" == "installing-aws-specialized-region"] :custom-config: :aws: endif::[] ifeval::["{context}" == "installing-aws-secret-region"] :custom-config: :aws: endif::[] ifeval::["{context}" == "installing-aws-vpc"] :custom-config: :aws: endif::[] ifeval::["{context}" == "installing-restricted-networks-aws-installer-provisioned"] :custom-config: :aws: endif::[] ifeval::["{context}" == "installing-aws-default"] :no-config: :aws: endif::[] ifeval::["{context}" == "installing-aws-localzone"] :custom-config: :aws: endif::[] ifeval::["{context}" == "installing-aws-wavelength-zone"] :custom-config: :aws: endif::[] ifeval::["{context}" == "installing-aws-outposts-remote-workers"] :custom-config: :aws: endif::[] ifeval::["{context}" == "installing-azure-default"] :no-config: :azure: :azure-default: endif::[] ifeval::["{context}" == "installing-gcp-customizations"] :custom-config: :gcp: endif::[] ifeval::["{context}" == "installing-gcp-vpc"] :custom-config: :gcp: endif::[] ifeval::["{context}" == "installing-gcp-shared-vpc"] :custom-config: :gcp: endif::[] ifeval::["{context}" == "installing-gcp-default"] :no-config: :gcp: endif::[] ifeval::["{context}" == "installing-restricted-networks-gcp-installer-provisioned"] :custom-config: :gcp: endif::[] ifeval::["{context}" == "installing-gcp-network-customizations"] :custom-config: :gcp: endif::[] ifeval::["{context}" == "installing-gcp-private"] :custom-config: :gcp: endif::[] ifeval::["{context}" == "installing-azure-customizations"] :custom-config: :azure: :single-step: endif::[] ifeval::["{context}" == "installing-azure-government-region"] :custom-config: :azure: :azure-gov: endif::[] ifeval::["{context}" == "installing-azure-vnet"] :custom-config: :azure: :single-step: endif::[] ifeval::["{context}" == "installing-azure-private"] :custom-config: :azure: :azure-private: endif::[] ifeval::["{context}" == "installing-azure-stack-hub-default"] :custom-config: :ash: :single-step: endif::[] ifeval::["{context}" == "installing-azure-stack-hub-network-customizations"] :custom-config: :ash: :single-step: endif::[] ifeval::["{context}" == "installing-openstack-installer-custom"] :osp: :custom-config: :single-step: endif::[] ifeval::["{context}" == "installing-openstack-installer-restricted"] :osp: :custom-config: :single-step: endif::[] ifeval::["{context}" == "installing-openstack-installer"] :osp: endif::[] ifeval::["{context}" == "installing-vsphere-installer-provisioned"] :no-config: :vsphere: endif::[] ifeval::["{context}" == "installing-vsphere-installer-provisioned-customizations"] :custom-config: :vsphere: :single-step: endif::[] ifeval::["{context}" == "installing-restricted-networks-installer-provisioned-vsphere"] :custom-config: :vsphere: :single-step: endif::[] ifeval::["{context}" == "installing-ibm-cloud-customizations"] :custom-config: :ibm-cloud: :single-step: endif::[] ifeval::["{context}" == "installing-ibm-cloud-vpc"] :custom-config: :ibm-cloud: :single-step: endif::[] ifeval::["{context}" == "installing-ibm-cloud-private"] :custom-config: :ibm-cloud: :single-step: endif::[] ifeval::["{context}" == "installing-ibm-cloud-restricted"] :custom-config: :ibm-cloud-restricted: endif::[] ifeval::["{context}" == "installing-nutanix-installer-provisioned"] :custom-config: :nutanix: :single-step: endif::[] ifeval::["{context}" == "installing-restricted-networks-nutanix-installer-provisioned"] :custom-config: :nutanix: :single-step: endif::[] ifeval::["{context}" == "installing-ibm-powervc-installer-custom"] :custom-config: :single-step: endif::[] ifeval::["{context}" == "installing-ibm-power-vs-customizations"] :custom-config: :single-step: endif::[] ifeval::["{context}" == "installing-ibm-power-vs-private-cluster"] :custom-config: :single-step: endif::[] ifeval::["{context}" == "installing-restricted-networks-ibm-power-vs"] :custom-config: :single-step: endif::[] ifeval::["{context}" == "installing-ibm-powervs-vpc"] :custom-config: :single-step: endif::[] ifeval::["{context}" == "installing-restricted-networks-azure-installer-provisioned"] :custom-config: :azure: :single-step: endif::[] :_mod-docs-content-type: PROCEDURE [id="installation-launching-installer_{context}"] = Deploying the cluster You can install {product-title} on a compatible cloud platform. [IMPORTANT] ==== You can run the `create cluster` command of the installation program only once, during initial installation. ==== .Prerequisites ifndef::osp,vsphere,nutanix[* You have configured an account with the cloud platform that hosts your cluster.] * You have the {product-title} installation program and the pull secret for your cluster. ifdef::ibm-cloud-restricted[] + If the {op-system-first} image is available locally, the host running the installation program does not require internet access. endif::ibm-cloud-restricted[] ifdef::azure[] * You have an Azure subscription ID and tenant ID. endif::azure[] ifdef::azure-default[] * You have the application ID and password of a service principal. endif::azure-default[] ifdef::azure-gov,azure-private[] * If you are installing the cluster using a service principal, you have its application ID and password. * If you are installing the cluster using a system-assigned managed identity, you have enabled it on the virtual machine that you will run the installation program from. * If you are installing the cluster using a user-assigned managed identity, you have met these prerequisites: ** You have its client ID. ** You have assigned it to the virtual machine that you will run the installation program from. endif::azure-gov,azure-private[] ifndef::azure[] * You have verified that the cloud provider account on your host has the correct permissions to deploy the cluster. An account with incorrect permissions causes the installation process to fail with an error message that displays the missing permissions. endif::azure[] ifdef::vsphere[] * Optional: Before you create the cluster, you configured an external load balancer in place of the default load balancer. + [IMPORTANT] ==== You do not need to specify API and Ingress static addresses for your installation program. If you choose this configuration, you must take additional actions to define network targets that accept an IP address from each referenced vSphere subnet. See the section "Configuring a user-managed load balancer". ==== endif::vsphere[] .Procedure ifdef::gcp[] . Remove any existing {gcp-short} credentials that do not use the service account key for the {gcp-short} account that you configured for your cluster and that are stored in the following locations: ** The `GOOGLE_CREDENTIALS`, `GOOGLE_CLOUD_KEYFILE_JSON`, or `GCLOUD_KEYFILE_JSON` environment variables ** The `~/.gcp/osServiceAccount.json` file ** The `gcloud cli` default credentials endif::gcp[] ifdef::aws,azure-gov,azure-private,gcp,ibm-cloud-restricted,no-config[] ifdef::azure-default[] . Optional: If you have run the installation program on this computer before, and want to use an alternative service principal, go to the `~/.azure/` directory and delete the `osServicePrincipal.json` configuration file. + Deleting this file prevents the installation program from automatically reusing subscription and authentication values from a previous installation. endif::azure-default[] ifdef::azure-gov,azure-private[] . Optional: If you have run the installation program on this computer before, and want to use an alternative service principal or managed identity, go to the `~/.azure/` directory and delete the `osServicePrincipal.json` configuration file. + Deleting this file prevents the installation program from automatically reusing subscription and authentication values from a previous installation. endif::azure-gov,azure-private[] ifdef::ibm-cloud-restricted[] . Export the `OPENSHIFT_INSTALL_OS_IMAGE_OVERRIDE` variable to specify the location of the {op-system-first} image by running the following command: + [source,terminal] ---- $ export OPENSHIFT_INSTALL_OS_IMAGE_OVERRIDE="/rhcos--ibmcloud.x86_64.qcow2.gz" ---- endif::ibm-cloud-restricted[] . In the directory that contains the installation program, initialize the cluster deployment by running the following command: endif::aws,azure-gov,azure-private,gcp,ibm-cloud-restricted,no-config[] ifdef::single-step,azure-restricted[] * In the directory that contains the installation program, initialize the cluster deployment by running the following command: endif::single-step,azure-restricted[] + [source,terminal] ---- $ ./openshift-install create cluster --dir \ <1> --log-level=info <2> ---- <1> For ``, specify the ifdef::custom-config[] location of your customized `./install-config.yaml` file. endif::custom-config[] ifdef::no-config[] directory name to store the files that the installation program creates. endif::no-config[] <2> To view different installation details, specify `warn`, `debug`, or `error` instead of `info`. ifdef::azure-gov,azure-private[] + If the installation program cannot locate the `osServicePrincipal.json` configuration file from a previous installation, you are prompted for Azure subscription and authentication values. . Enter the following Azure parameter values for your subscription: ** *azure subscription id*: Enter the subscription ID to use for the cluster. ** *azure tenant id*: Enter the tenant ID. . Depending on the Azure identity you are using to deploy the cluster, do one of the following when prompted for the *azure service principal client id*: ** If you are using a service principal, enter its application ID. ** If you are using a system-assigned managed identity, leave this value blank. ** If you are using a user-assigned managed identity, specify its client ID. . Depending on the Azure identity you are using to deploy the cluster, do one of the following when prompted for the *azure service principal client secret*: ** If you are using a service principal, enter its password. ** If you are using a system-assigned managed identity, leave this value blank. ** If you are using a user-assigned managed identity,leave this value blank. If previously not detected, the installation program creates an `osServicePrincipal.json` configuration file and stores this file in the `~/.azure/` directory on your computer. This ensures that the installation program can load the profile when it is creating an {product-title} cluster on the target platform. endif::azure-gov,azure-private[] ifdef::no-config[] + When specifying the directory: * Verify that the directory has the `execute` permission. This permission is required to run Terraform binaries under the installation directory. * Use an empty directory. Some installation assets, such as bootstrap X.509 certificates, have short expiration intervals, therefore you must not reuse an installation directory. If you want to reuse individual files from another cluster installation, you can copy them into your directory. However, the file names for the installation assets might change between releases. Use caution when copying installation files from an earlier {product-title} version. . Provide values at the prompts: .. Optional: Select an SSH key to use to access your cluster machines. + [NOTE] ==== For production {product-title} clusters on which you want to perform installation debugging or disaster recovery, specify an SSH key that your `ssh-agent` process uses. ==== ifdef::aws[] .. Select *aws* as the platform to target. .. If you do not have an Amazon Web Services (AWS) profile stored on your computer, enter the AWS access key ID and secret access key for the user that you configured to run the installation program. + [NOTE] ==== The AWS access key ID and secret access key are stored in `~/.aws/credentials` in the home directory of the current user on the installation host. You are prompted for the credentials by the installation program if the credentials for the exported profile are not present in the file. Any credentials that you provide to the installation program are stored in the file. ==== .. Select the AWS region to deploy the cluster to. .. Select the base domain for the Route 53 service that you configured for your cluster. endif::aws[] ifdef::azure[] .. Select *azure* as the platform to target. + If the installation program cannot locate the `osServicePrincipal.json` configuration file from a previous installation, you are prompted for Azure subscription and authentication values. .. Specify the following Azure parameter values for your subscription and service principal: *** *azure subscription id*: Enter the subscription ID to use for the cluster. *** *azure tenant id*: Enter the tenant ID. *** *azure service principal client id*: Enter its application ID. *** *azure service principal client secret*: Enter its password. .. Select the region to deploy the cluster to. .. Select the base domain to deploy the cluster to. The base domain corresponds to the Azure DNS Zone that you created for your cluster. endif::azure[] ifdef::gcp[] .. Select *gcp* as the platform to target. .. If you have not configured the service account key for your {gcp-short} account on your host, you must obtain it from {gcp-short} and paste the contents of the file or enter the absolute path to the file. .. Select the project ID to provision the cluster in. The default value is specified by the service account that you configured. .. Select the region to deploy the cluster to. .. Select the base domain to deploy the cluster to. The base domain corresponds to the public DNS zone that you created for your cluster. endif::gcp[] ifdef::ibm-cloud[] .. test endif::ibm-cloud[] ifdef::osp[] .. Select *openstack* as the platform to target. .. Specify the {rh-openstack-first} external network name to use for installing the cluster. .. Specify the Floating IP address to use for external access to the OpenShift API. .. Specify the {rh-openstack} flavor with at least 16 GB RAM to use for control plane and compute nodes. .. Select the base domain to deploy the cluster to. All DNS records will be sub-domains of this base and will also include the cluster name. endif::osp[] ifdef::vsphere[] .. Select *vsphere* as the platform to target. .. Specify the name of your vCenter instance. .. Specify the user name and password for the vCenter account that has the required permissions to create the cluster. + The installation program connects to your vCenter instance. + [IMPORTANT] ==== Some VMware vCenter Single Sign-On (SSO) environments with Active Directory (AD) integration might primarily require you to use the traditional login method, which requires the `\` construct. To ensure that vCenter account permission checks complete properly, consider using the User Principal Name (UPN) login method, such as `@`. ==== .. Select the data center in your vCenter instance to connect to. .. Select the default vCenter datastore to use. + [NOTE] ==== Datastore and cluster names cannot exceed 60 characters; therefore, ensure the combined string length does not exceed the 60 character limit. ==== .. Select the vCenter cluster to install the {product-title} cluster in. The installation program uses the root resource pool of the vSphere cluster as the default resource pool. .. Select the network in the vCenter instance that contains the virtual IP addresses and DNS records that you configured. .. Enter the virtual IP address that you configured for control plane API access. .. Enter the virtual IP address that you configured for cluster ingress. .. Enter the base domain. This base domain must be the same one that you used in the DNS records that you configured. endif::vsphere[] .. Enter a descriptive name for your cluster. ifdef::vsphere[] The cluster name must be the same one that you used in the DNS records that you configured. + [NOTE] ==== Datastore and cluster names cannot exceed 60 characters; therefore, ensure the combined string length does not exceed the 60 character limit. ==== endif::vsphere[] ifdef::azure[] + [IMPORTANT] ==== All Azure resources that are available through public endpoints are subject to resource name restrictions, and you cannot create resources that use certain terms. For a list of terms that Azure restricts, see link:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-reserved-resourcename[Resolve reserved resource name errors] in the Azure documentation. ==== endif::azure[] ifdef::gcp[] If you provide a name that is longer than 6 characters, only the first 6 characters will be used in the infrastructure ID that is generated from the cluster name. endif::gcp[] ifndef::openshift-origin[] .. Paste the {cluster-manager-url-pull}. endif::openshift-origin[] ifdef::openshift-origin[] .. Paste the {cluster-manager-url-pull}. * If you do not have a {cluster-manager-url-pull}, you can paste the pull secret another private registry. * If you do not need the cluster to pull images from a private registry, you can paste `{"auths":{"fake":{"auth":"aWQ6cGFzcwo="}}}` as the pull secret. endif::openshift-origin[] ifdef::azure[] If previously not detected, the installation program creates an `osServicePrincipal.json` configuration file and stores this file in the `~/.azure/` directory on your computer. This ensures that the installation program can load the profile when it is creating an {product-title} cluster on the target platform. endif::azure[] endif::no-config[] ifdef::aws[] . Optional: Remove or disable the `AdministratorAccess` policy from the IAM account that you used to install the cluster. + [NOTE] ==== The elevated permissions provided by the `AdministratorAccess` policy are required only during installation. ==== endif::aws[] ifdef::gcp[] . Optional: You can reduce the number of permissions for the service account that you used to install the cluster. ** If you assigned the `Owner` role to your service account, you can remove that role and replace it with the `Viewer` role. ** If you included the `Service Account Key Admin` role, you can remove it. endif::gcp[] .Verification When the cluster deployment completes successfully: * The terminal displays directions for accessing your cluster, including a link to the web console and credentials for the `kubeadmin` user. * Credential information also outputs to `/.openshift_install.log`. [IMPORTANT] ==== Do not delete the installation program or the files that the installation program creates. Both are required to delete the cluster. ==== .Example output [source,terminal] ---- ... INFO Install complete! INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/myuser/install_dir/auth/kubeconfig' INFO Access the OpenShift web-console here: https://console-openshift-console.apps.mycluster.example.com INFO Login to the console with user: "kubeadmin", and password: "password" INFO Time elapsed: 36m22s ---- [IMPORTANT] ==== * The Ignition config files that the installation program generates contain certificates that expire after 24 hours, which are then renewed at that time. If the cluster is shut down before renewing the certificates and the cluster is later restarted after the 24 hours have elapsed, the cluster automatically recovers the expired certificates. The exception is that you must manually approve the pending `node-bootstrapper` certificate signing requests (CSRs) to recover kubelet certificates. See the documentation for _Recovering from expired control plane certificates_ for more information. * It is recommended that you use Ignition config files within 12 hours after they are generated because the 24-hour certificate rotates from 16 to 22 hours after the cluster is installed. By using the Ignition config files within 12 hours, you can avoid installation failure if the certificate update runs during installation. ==== ifeval::["{context}" == "installing-aws-private"] :!custom-config: :!aws: endif::[] ifeval::["{context}" == "installing-aws-customizations"] :!custom-config: :!aws: endif::[] ifeval::["{context}" == "installing-aws-china-region"] :!custom-config: :!aws: endif::[] ifeval::["{context}" == "installing-aws-government-region"] :!custom-config: :!aws: endif::[] ifeval::["{context}" == "installing-aws-secret-region"] :!custom-config: :!aws: endif::[] ifeval::["{context}" == "installing-aws-specialized-region"] :!custom-config: :!aws: endif::[] ifeval::["{context}" == "installing-aws-vpc"] :!custom-config: :!aws: endif::[] ifeval::["{context}" == "installing-restricted-networks-aws-installer-provisioned"] :!custom-config: :!aws: endif::[] ifeval::["{context}" == "installing-aws-default"] :!no-config: :!aws: endif::[] ifeval::["{context}" == "installing-aws-localzone"] :!custom-config: :!aws: endif::[] ifeval::["{context}" == "installing-aws-wavelength-zone"] :!custom-config: :!aws: endif::[] ifeval::["{context}" == "installing-aws-outposts-remote-workers"] :!custom-config: :!aws: endif::[] ifeval::["{context}" == "installing-azure-default"] :!no-config: :!azure: :!azure-default: endif::[] ifeval::["{context}" == "installing-gcp-customizations"] :!custom-config: :!gcp: endif::[] ifeval::["{context}" == "installing-gcp-vpc"] :!custom-config: :!gcp: endif::[] ifeval::["{context}" == "installing-gcp-shared-vpc"] :!custom-config: :!gcp: endif::[] ifeval::["{context}" == "installing-gcp-default"] :!no-config: :!gcp: endif::[] ifeval::["{context}" == "installing-restricted-networks-gcp-installer-provisioned"] :!custom-config: :!gcp: endif::[] ifeval::["{context}" == "installing-gcp-network-customizations"] :!custom-config: :!gcp: endif::[] ifeval::["{context}" == "installing-gcp-private"] :!custom-config: :!gcp: endif::[] ifeval::["{context}" == "installing-azure-customizations"] :!custom-config: :!azure: :!single-step: endif::[] ifeval::["{context}" == "installing-azure-government-region"] :!custom-config: :!azure: :!azure-gov: endif::[] ifeval::["{context}" == "installing-azure-vnet"] :!custom-config: :!azure: :!single-step: endif::[] ifeval::["{context}" == "installing-azure-private"] :!custom-config: :!azure: :!azure-private: endif::[] ifeval::["{context}" == "installing-azure-stack-hub-default"] :!custom-config: :!ash: :!single-step: endif::[] ifeval::["{context}" == "installing-azure-stack-hub-network-customizations"] :!custom-config: :!ash: :!single-step: endif::[] ifeval::["{context}" == "installing-openstack-installer-custom"] :!osp: :!custom-config: :!single-step: endif::[] ifeval::["{context}" == "installing-openstack-installer-restricted"] :!osp: :!custom-config: :!single-step: endif::[] ifeval::["{context}" == "installing-openstack-installer"] :!osp: endif::[] ifeval::["{context}" == "installing-vsphere-installer-provisioned"] :!no-config: :!vsphere: endif::[] ifeval::["{context}" == "installing-vsphere-installer-provisioned-customizations"] :!custom-config: :!vsphere: :!single-step: endif::[] ifeval::["{context}" == "installing-restricted-networks-installer-provisioned-vsphere"] :!custom-config: :!vsphere: :!single-step: endif::[] ifeval::["{context}" == "installing-ibm-cloud-customizations"] :!custom-config: :!ibm-cloud: :!single-step: endif::[] ifeval::["{context}" == "installing-ibm-cloud-vpc"] :!custom-config: :!ibm-cloud: :!single-step: endif::[] ifeval::["{context}" == "installing-ibm-cloud-private"] :!custom-config: :!ibm-cloud: :!single-step: endif::[] ifeval::["{context}" == "installing-ibm-cloud-restricted"] :!custom-config: :!ibm-cloud-restricted: endif::[] ifeval::["{context}" == "installing-nutanix-installer-provisioned"] :!custom-config: :!nutanix: :!single-step: endif::[] ifeval::["{context}" == "installing-restricted-networks-nutanix-installer-provisioned"] :!custom-config: :!nutanix: :!single-step: endif::[] ifeval::["{context}" == "installing-ibm-powervc-installer-custom"] :!custom-config: :!single-step: endif::[] ifeval::["{context}" == "installing-ibm-power-vs-customizations"] :!custom-config: :!single-step: endif::[] ifeval::["{context}" == "installing-ibm-power-vs-private-cluster"] :!custom-config: :!single-step: endif::[] ifeval::["{context}" == "installing-restricted-networks-ibm-power-vs"] :!custom-config: :!single-step: endif::[] ifeval::["{context}" == "installing-ibm-powervs-vpc"] :!custom-config: :!single-step: endif::[] ifeval::["{context}" == "installing-restricted-networks-azure-installer-provisioned"] :!custom-config: :!azure: :!single-step: endif::[]