From a421ce7d61c54075cb5ea1ea3d29ced0784e33e5 Mon Sep 17 00:00:00 2001 From: Frank Ketelaars Date: Sun, 24 Sep 2023 14:28:08 +0000 Subject: [PATCH 1/9] #537 Rearrange documentation --- docs/mkdocs.yml | 1 - .../10-use-deployer/1-overview/overview.md | 8 +- .../10-use-deployer/2-configure/configure.md | 108 --------------- docs/src/10-use-deployer/3-run/aws-rosa.md | 107 +++++++-------- docs/src/10-use-deployer/3-run/run.md | 1 + .../src/50-advanced/advanced-configuration.md | 125 ++++++++++++++++++ .../images/directory-structure.drawio | 0 .../images/directory-structure.png | Bin 8 files changed, 183 insertions(+), 167 deletions(-) delete mode 100644 docs/src/10-use-deployer/2-configure/configure.md rename docs/src/{10-use-deployer/2-configure => 50-advanced}/images/directory-structure.drawio (100%) rename docs/src/{10-use-deployer/2-configure => 50-advanced}/images/directory-structure.png (100%) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index f9c1e43a2..9d8f885dc 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -24,7 +24,6 @@ nav: - 'Installing Cloud Pak Deployer': ./05-install/install.md - 'Using Cloud Pak Deployer': - Overview: ./10-use-deployer/1-overview/overview.md - - Configure: ./10-use-deployer/2-configure/configure.md - Run: - 'Running Cloud Pak Deployer': ./10-use-deployer/3-run/run.md - 'Existing OpenShift': ./10-use-deployer/3-run/existing-openshift.md diff --git a/docs/src/10-use-deployer/1-overview/overview.md b/docs/src/10-use-deployer/1-overview/overview.md index f0edecbc7..29a9794fe 100644 --- a/docs/src/10-use-deployer/1-overview/overview.md +++ b/docs/src/10-use-deployer/1-overview/overview.md @@ -8,20 +8,16 @@ There are 3 main steps you need to perform to provision an OpenShift cluster wit 3. [Run the Cloud Pak Deployer to create the cluster and install the Cloud Pak](../../../10-use-deployer/3-run/run) ## What will I need? -To complete the deployment, you will need the following. Details will be provided when you need them. +To complete the deployment, you will or may need the following. Details will be provided when you need them. * Your Cloud Pak entitlement key to pull images from the IBM Container Registry * IBM Cloud VPC: An IBM Cloud API key that allows you to provision infrastructure * vSphere: A vSphere user and password which has infrastructure create permissions * AWS ROSA: AWS IAM credentials (access key and secret access key), a ROSA login token and optionally a temporary security token * AWS Self-managed: AWS IAM credentials (access key and secret access key) and optionally a temporary security token +* Azure: Azure service principal with the correct permissions * Existing OpenShift: Cluster admin login credentials of the OpenShift cluster -## Other "deployment" activities -There are a few activities that are somewhat related to deployment of the OpenShift cluster and/or Cloud Paks. These can also be performed through the deployer. - -### Post-run configuration and secret retrieval - ### Executing commands on the OpenShift cluster The server on which you run the Cloud Pak Deployer may not have the necessary clients to interact with the cloud infrastructure, OpenShift, or the installed Cloud Pak. You can run commands using the same container image that runs the deployment of OpenShift and the Cloud Paks through the command line: [Open a command line](7-command/command) diff --git a/docs/src/10-use-deployer/2-configure/configure.md b/docs/src/10-use-deployer/2-configure/configure.md deleted file mode 100644 index d1dca556d..000000000 --- a/docs/src/10-use-deployer/2-configure/configure.md +++ /dev/null @@ -1,108 +0,0 @@ -# Cloud Pak Deployer Configuration - -Before starting the configuration, take a look at the [basic and extended topologies](../../30-reference/configuration/topologies.md) to plan your infrastructure, OpenShift cluster and Cloud Pak. - -The Cloud Pak Deployer includes several samples which you can use to build your own configuration. You can find sample configuration `yaml` files in the sub-directories of the `sample-configurations` directory of the repository. Descriptions are also included in the sub-directories. - -!!! warning - Do not make changes to the sample configurations in the `cloud-pak-deployer` directory, but rather copy it to your own home directory or somewhere else and then make changes. If you store your own configuration under the repository's clone, you may not be able to update (pull) the repository with changes applied on GitHub, or accidentally overwrite it. - -!!! warning - The deployer expects to manage all objects referenced in the configuration files, including the referenced OpenShift cluster and Cloud Pak installation. If you have already pre-provisioned the OpenShift cluster, choose a configuration with `existing-ocp` cloud platform. If the Cloud Pak has already been installed, unexpected and undesired activities may happen. The deployer has not been designed to alter a pre-provisioned OpenShift cluster or existing Cloud Pak installation. - -## Configuration steps - static sample configuration -1. Copy the static sample configuration directory to your own directory: -```bash -mkdir -p $HOME/cpd-config/config -cp -r ./sample-configurations/roks-ocs-cp4d/config/* $HOME/cpd-config/config/ -cd $HOME/cpd-config/config -``` -2. Edit the "cp4d-....yaml" file and select the cartridges to be installed by changing the state to `installed`. Additionally you can accept the Cloud Pak license in the config file by specifying `accept_licenses: True`. -``` -nano ./config/cp4d-450.yaml -``` - -The configuration typically works without any configuration changes and will create all referenced objects, including the Virtual Private Cloud, subnets, SSH keys, ROKS cluster and OCS storage ndoes. There is typically no need to change address prefixes and subnets. The IP addresses used by the provisioned components are private to the VPC and are not externally exposed. - -## Configuration steps - dynamically choose OpenShift and Cloud Pak -1. Copy the sample configuration directory to your own directory: -``` -mkdir -p $HOME/cpd-config/config -``` -2. Copy the relevant OpenShift configuration file from the `samples-configuration` directory to the `config` directory, for example: -``` -cp ./sample-configurations/sample-dynamic/config-samples/ocp-ibm-cloud-roks-ocs.yaml $HOME/cpd-config/config/ -``` -3. Copy the relevant "cp4d-..." file from the `samples-configuration` directory to the `config` directory, for example: -``` -cp ./sample-configurations/sample-dynamic/config-samples/cp4d-462.yaml $HOME/cpd-config/config/ -``` - -4. Edit the "$HOME/cpd-config/config/cp4d-....yaml" file and select the cartridges to be installed by changing the state to `installed`. Additionally you can accept the Cloud Pak license in the config file by specifying `accept_licenses: True`. -``` -nano $HOME/cpd-config/config/cp4d-463.yaml -``` - -For more advanced configuration topics such as using a private registry, setting up transit gateways between VPCs, etc, go to the **Advanced configuration** section - -## Directory structure - -Every configuration has a fixed directory structure, consisting of mandatory and optional subdirectories. -![Directory structure](images/directory-structure.png) - -Mandatory subdirectories: - -* `config`: Keeps one or more `yaml` files with your OpenShift and Cloud Pak configuration - -Additionally, there are 3 optional subdirectories: - -* `defaults`: Directory that keeps the defaults which will be merged with your configuration -* `inventory`: Keep global settings for the configuration such as environment name or other variables used in the configs -* `assets`: Keeps directories of assets which must be deployed onto the Cloud Pak - -### `config` directory -You can choose to keep only a single file per subdirectory or, for more complex configurations, you can create multiple yaml files. You can find a full list of all supported object types here: [Configuration objects](../../../30-reference/configuration/cpd-objects). The generator automatically merges all `.yaml` files in the config and defaults directory. Files with different extensions are ignored. In the sample configurations we split configuration of the OpenShift `ocp-...` and Cloud Pak `cp4.-...` objects. - -For example, your `config` directory could hold the following files: -``` -cp4d-463.yaml -ocp-ibm-cloud-roks-ocs.yaml -``` - -This will provision a ROKS cluster on IBM Cloud with OpenShift Data Foundation (fka OCS) and Cloud Pak for Data 4.0.8. - -### `defaults` directory (optional) -Holds the defaults for all object types. If a certain object property has not been specified in the `config` directory, it will be retrieved from the `defaults` directory using the flavour specified in the configured object. If no flavour has been selected, the `default` flavour will be chosen. - -You should not need this subdirectory in most circumstances. - -### `assets` directory (optional) -Optional directory holding the assets you wish to deploy for the Cloud Pak. More information about Cloud Pak for Data assets which can be deployed can be found in object definition [cp4d_asset](../../../30-reference/configuration/cp4d-assets). The directory can be named differently as well, for example `cp4d-assets` or `customer-churn-demo`. - -### `inventory` directory (optional) -The Cloud Pak Deployer pipeline has been built using Ansible and it can be configured using "inventory" files. Inventory files allow you to specify global variables used throughout Ansible playbooks. In the current version of the Cloud Pak Deployer, the inventory directory has become fully optional as the `global_config` and `vault` objects have taken over its role. However, if there are certain global variables such as `env_id` you want to pass via an inventory file, you can also do this. - -## Vault secrets -User passwords, certificates and other "secret" information is kept in the vault, which can be either a flat file (not encrypted), HashiCorp Vault or the IBM Cloud Secrets Manager service. Some of the deployment configurations require that the vault is pre-populated with secrets which as needed during the deployment. For example, a vSphere deployment needs the vSphere user and password to authenticate to vSphere and Cloud Pak for Data SAML configuration requires the idP certificate - -All samples default to the **File Vault**, meaning that the vault will be kept in the `vault` directory under the status directory you specify when you run the deployer. Detailed descriptions of the vault settings can be found in the sample inventory file and also here: [vault settings](../../../30-reference/configuration/vault). - -Optional: Ensure that the environment variables for the configuration and status directories are set. If not specified, the directories are assumed to be `$HOME/cpd-config` and `$HOME/cpd-status`. -``` -export STATUS_DIR=$HOME/cpd-status -export CONFIG_DIR=$HOME/cpd-config -``` - -Set vSphere user secret: -``` -./cp-deploy.sh vault set \ - --vault-secret vsphere-user \ - --vault-secret-value super_user@vsphere.local -``` - -Or, if you want to create the secret from an input file: -``` -./cp-deploy.sh vault set \ - --vault-secret kubeconfig \ - --vault-secret-file ~/.kube/config -``` diff --git a/docs/src/10-use-deployer/3-run/aws-rosa.md b/docs/src/10-use-deployer/3-run/aws-rosa.md index d6aaad331..91a1da275 100644 --- a/docs/src/10-use-deployer/3-run/aws-rosa.md +++ b/docs/src/10-use-deployer/3-run/aws-rosa.md @@ -2,6 +2,13 @@ On Amazon Web Services (AWS), OpenShift can be set up in various ways, managed by Red Hat (ROSA) or self-managed. The steps below are applicable to the ROSA (Red Hat OpenShift on AWS) installation. More information about ROSA can be found here: https://aws.amazon.com/rosa/ +There are 5 main steps to run the deploye for AWS (ROSA): +1. [Create and set the configuration and status directories](#1-create-and-set-the-configuration-and-status-directories) +2. [Prepare the AWS cloud environment](#2-prepare-the-aws-cloud-enironment) +3. [Obtain Cloud Pak entitlement key](#3-acquire-an-ibm-cloud-pak-entitlement-key) +4. [Set environment variables](#4-set-environment-variables-for-aws-rosa) +5. [Run the deployer](#5-run-the-deployer) + ## Topology A typical setup of the ROSA cluster is pictured below: @@ -9,6 +16,34 @@ A typical setup of the ROSA cluster is pictured below: When deploying ROSA, an external host name and domain name are automatically generated by Amazon Web Services and both the API and Ingress servers can be resolved by external clients. At this stage, one cannot configure the domain name to be used. +# 1. Create and set the configuration and status directories + +## Set deployer Configuration directory +You can use a local directory to hold the deployer configuration or retrieve the configuration from a GitHub repository. If you don't specify any configuration directory or GitHub repository, the configuration directory are assumed to be `$HOME/cpd-config`. +``` +export CONFIG_DIR=$HOME/cpd-config +``` + +- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory. + +You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). Copy these files into the `$CONFIG_DIR/config` directory. + +### Advanced configuration +If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). + +For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). + +## Set deployer status directory +Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. + +``` +export STATUS_DIR=$HOME/cpd-status +``` + +- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. **Please note** that if you have chosen to use a File Vault, the properties file is keps under the `vault` directory within the status directory. If you don't specify a status directory, it is assumed to be `$HOME/cpd-status`. + +# 2. Prepare the AWS Cloud enironment + ## Enable ROSA on AWS Before you can use ROSA on AWS, you have to enable it if this has not been done already. This can be done as follows: @@ -29,7 +64,7 @@ You will need an **Access Key ID** and **Secret Access Key** for the deployer to - If you do not yet have an access key (or you no longer have the associated secret), create an access key - Store your **Access Key ID** and **Secret Access Key** in safe place -## Alternative: Using temporary AWS security credentials +### Alternative: Using temporary AWS security credentials If your account uses temporary security credentials for AWS resources, you must use the **Access Key ID**, **Secret Access Key** and **Session Token** associated with your temporary credentials. @@ -46,7 +81,7 @@ printf "\nexport AWS_ACCESS_KEY_ID=%s\nexport AWS_SECRET_ACCESS_KEY=%s\nexport A --output text) ``` -Thie would return something like the below, which you can then paste into the session running the deployer. +This would return something like the below, which you can then paste into the session running the deployer. ```output export AWS_ACCESS_KEY_ID=ASIxxxxxxAW export AWS_SECRET_ACCESS_KEY=jtLxxxxxxxxxxxxxxxGQ @@ -63,24 +98,11 @@ To run `rosa` commands to manage the cluster, the deployer requires the ROSA log - Login with your Red Hat user ID and password. If you don't have one yet, you need to create it. - Copy the offline access token presented on the screen and store it in a safe place. -## Acquire an IBM Cloud Pak Entitlement Key - -If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. - -- Navigate to https://myibm.ibm.com/products-services/containerlibrary and login with your IBMId credentials -- Select **Get Entitlement Key** and create a new key (or copy your existing key) -- Copy the key value - -!!! warning - As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. - -## Prepare for running - -## Rosa is already installed +## If ROSA is already installed This scenario is supported. To enable this feature, please ensure that you take the following steps: -1. Include the environment ID in the inftastrucure definition {{ env_id }} to match existing cluster +1. Include the environment ID in the infrastrucure definition `{{ env_id }}` to match existing cluster 2. Create "cluster-admin " password token using the following command: ```bash @@ -89,8 +111,18 @@ This scenario is supported. To enable this feature, please ensure that you take Without these changes, sthe cloud player will fail and you will receive the following error message: "Failed to get the cluster-admin password from the vault". +# 3. Acquire an IBM Cloud Pak Entitlement Key + +If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. -### Set environment variables for AWS ROSA +- Navigate to https://myibm.ibm.com/products-services/containerlibrary and login with your IBMId credentials +- Select **Get Entitlement Key** and create a new key (or copy your existing key) +- Copy the key value + +!!! warning + As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. + +# 4. Set environment variables for AWS ROSA ``` export AWS_ACCESS_KEY_ID=your_access_key @@ -113,43 +145,14 @@ export AWS_SESSION_TOKEN=your_session_token !!! warning If your `AWS_SESSION_TOKEN` is expires while the deployer is still running, the deployer may end abnormally. In such case, you can just issue new temporary credentials (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` and `AWS_SESSION_TOKEN`) and restart the deployer. Alternatively, you can update the 3 vault secrets, respectively `aws-access-key`, `aws-secret-access-key` and `aws-session-token` with new values as they are re-retrieved by the deployer on a regular basis. -### Set deployer status directory -Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. - -``` -export STATUS_DIR=$HOME/cpd-status -``` - -- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. **Please note** that if you have chosen to use a File Vault, the properties file is keps under the `vault` directory within the status directory. If you don't specify a status directory, it is assumted to be `$HOME/cpd-status`. - -### Set deployer configuration location -You can use a local directory to hold the deployer configuration or retrieve the configuration from a GitHub repository. If you don't specify any configuration directory or GitHub repository, the configuration directory are assumed to be `$HOME/cpd-config`. -``` -export CONFIG_DIR=$HOME/cpd-config -``` - -- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory. - -Or, when using a GitHub repository for the configuration. -``` -export CPD_CONFIG_GIT_REPO="https://github.com/IBM/cloud-pak-deployer-config.git" -export CPD_CONFIG_GIT_REF="main" -export CPD_CONFIG_GIT_CONTEXT="" -``` - -- `CPD_CONFIG_GIT_REPO`: The clone URL of the GitHub repository that holds the configuration. -- `CPD_CONFIG_GIT_REF`: The branch, tag or commit ID to be cloned. If not specified, the repository's default branch will be cloned. -- `CPD_CONFIG_GIT_CONTEXT`: The directory within the GitHub repository that holds the configuration. This directory must contain the `config` directory under which the YAML files are kept. - -!!! info - When specifying a GitHub repository, the contents will be copied under `$STATUS_DIR/cpd-config` and this directory is then set as the configuration directory. +# 5. Run the deployer ## Optional: validate the configuration If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. ``` -./cp-deploy.sh env apply --check-only [--accept-all-licenses] +./cp-deploy.sh env apply --check-only --accept-all-licenses ``` ## Run the Cloud Pak Deployer @@ -157,10 +160,10 @@ If you only want to validate the configuration, you can run the dpeloyer with th To run the container using a local configuration input directory and a data directory where temporary and state is kept, use the example below. If you don't specify the status directory, the deployer will automatically create a temporary directory. Please note that the status directory will also hold secrets if you have configured a flat file vault. If you lose the directory, you will not be able to make changes to the configuration and adjust the deployment. It is best to specify a permanent directory that you can reuse later. If you specify an existing directory the current user **must** be the owner of the directory. Failing to do so may cause the container to fail with insufficient permissions. ``` -./cp-deploy.sh env apply [--accept-all-licenses] +./cp-deploy.sh env apply --accept-all-licenses ``` -You can also specify extra variables such as `env_id` to override the names of the objects referenced in the `.yaml` configuration files as `{{ env_id }}-xxxx`. For more information about the extra (dynamic) variables, see [advanced configuration](../../../50-advanced/advanced-configuration). +You can also specify extra variables such as `env_id` to override the names of the objects referenced in the `.yaml` configuration files as `{{ env_id }}-xxxx`. For more information about the extra (dynamic) variables, see [advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). The `--accept-all-licenses` flag is optional and confirms that you accept all licenses of the installed cartridges and instances. Licenses must be either accepted in the configuration files or at the command line. @@ -172,7 +175,7 @@ You can return to view the logs as follows: ./cp-deploy.sh env logs ``` -Deploying the infrastructure, preparing OpenShift and installing the Cloud Pak will take a long time, typically between 1-5 hours,dependent on which Cloud Pak cartridges you configured. For estimated duration of the steps, refer to [Timings](../../../30-reference/timings). +Deploying the infrastructure, preparing OpenShift and installing the Cloud Pak will take a long time, typically between 1-5 hours,dependent on which Cloud Pak cartridges you configured. For estimated duration of the steps, refer to [Timings](../../30-reference/timings). If you need to interrupt the automation, use CTRL-C to stop the logging output and then use: diff --git a/docs/src/10-use-deployer/3-run/run.md b/docs/src/10-use-deployer/3-run/run.md index fa104f84b..0efa57a8e 100644 --- a/docs/src/10-use-deployer/3-run/run.md +++ b/docs/src/10-use-deployer/3-run/run.md @@ -7,4 +7,5 @@ Cloud Pak Deployer supports various public and private cloud infrastructures. Cl * [AWS - ROSA](aws-rosa.md) * [AWS - Self-managed](aws-self-managed.md) * [Azure - ARO](azure-aro.md) +* [Azure - Self-managed](azure-self-managed.md) * [vSphere](vsphere.md) \ No newline at end of file diff --git a/docs/src/50-advanced/advanced-configuration.md b/docs/src/50-advanced/advanced-configuration.md index 66bc456b2..355952400 100644 --- a/docs/src/50-advanced/advanced-configuration.md +++ b/docs/src/50-advanced/advanced-configuration.md @@ -1,5 +1,130 @@ # Cloud Pak Deployer Advanced Configuration +Before starting the configuration, take a look at the [basic and extended topologies](../../30-reference/configuration/topologies.md) to plan your infrastructure, OpenShift cluster and Cloud Pak. + +The Cloud Pak Deployer includes several samples which you can use to build your own configuration. You can find sample configuration `yaml` files in the sub-directories of the `sample-configurations` directory of the repository. Descriptions are also included in the sub-directories. + +!!! warning + Do not make changes to the sample configurations in the `cloud-pak-deployer` directory, but rather copy it to your own home directory or somewhere else and then make changes. If you store your own configuration under the repository's clone, you may not be able to update (pull) the repository with changes applied on GitHub, or accidentally overwrite it. + +!!! warning + The deployer expects to manage all objects referenced in the configuration files, including the referenced OpenShift cluster and Cloud Pak installation. If you have already pre-provisioned the OpenShift cluster, choose a configuration with `existing-ocp` cloud platform. If the Cloud Pak has already been installed, unexpected and undesired activities may happen. The deployer has not been designed to alter a pre-provisioned OpenShift cluster or existing Cloud Pak installation. + +## Configuration steps - static sample configuration +1. Copy the static sample configuration directory to your own directory: +```bash +mkdir -p $HOME/cpd-config/config +cp -r ./sample-configurations/roks-ocs-cp4d/config/* $HOME/cpd-config/config/ +cd $HOME/cpd-config/config +``` +2. Edit the "cp4d-....yaml" file and select the cartridges to be installed by changing the state to `installed`. Additionally you can accept the Cloud Pak license in the config file by specifying `accept_licenses: True`. +``` +nano ./config/cp4d-450.yaml +``` + +The configuration typically works without any configuration changes and will create all referenced objects, including the Virtual Private Cloud, subnets, SSH keys, ROKS cluster and OCS storage ndoes. There is typically no need to change address prefixes and subnets. The IP addresses used by the provisioned components are private to the VPC and are not externally exposed. + +## Configuration steps - dynamically choose OpenShift and Cloud Pak +1. Copy the sample configuration directory to your own directory: +``` +mkdir -p $HOME/cpd-config/config +``` +2. Copy the relevant OpenShift configuration file from the `samples-configuration` directory to the `config` directory, for example: +``` +cp ./sample-configurations/sample-dynamic/config-samples/ocp-ibm-cloud-roks-ocs.yaml $HOME/cpd-config/config/ +``` +3. Copy the relevant "cp4d-..." file from the `samples-configuration` directory to the `config` directory, for example: +``` +cp ./sample-configurations/sample-dynamic/config-samples/cp4d-462.yaml $HOME/cpd-config/config/ +``` + +4. Edit the "$HOME/cpd-config/config/cp4d-....yaml" file and select the cartridges to be installed by changing the state to `installed`. Additionally you can accept the Cloud Pak license in the config file by specifying `accept_licenses: True`. +``` +nano $HOME/cpd-config/config/cp4d-463.yaml +``` + +For more advanced configuration topics such as using a private registry, setting up transit gateways between VPCs, etc, go to the **Advanced configuration** section + +## Directory structure + +Every configuration has a fixed directory structure, consisting of mandatory and optional subdirectories. +![Directory structure](images/directory-structure.png) + +Mandatory subdirectories: + +* `config`: Keeps one or more `yaml` files with your OpenShift and Cloud Pak configuration + +Additionally, there are 3 optional subdirectories: + +* `defaults`: Directory that keeps the defaults which will be merged with your configuration +* `inventory`: Keep global settings for the configuration such as environment name or other variables used in the configs +* `assets`: Keeps directories of assets which must be deployed onto the Cloud Pak + +### `config` directory +You can choose to keep only a single file per subdirectory or, for more complex configurations, you can create multiple yaml files. You can find a full list of all supported object types here: [Configuration objects](../../../30-reference/configuration/cpd-objects). The generator automatically merges all `.yaml` files in the config and defaults directory. Files with different extensions are ignored. In the sample configurations we split configuration of the OpenShift `ocp-...` and Cloud Pak `cp4.-...` objects. + +For example, your `config` directory could hold the following files: +``` +cp4d-463.yaml +ocp-ibm-cloud-roks-ocs.yaml +``` + +This will provision a ROKS cluster on IBM Cloud with OpenShift Data Foundation (fka OCS) and Cloud Pak for Data 4.0.8. + +### `defaults` directory (optional) +Holds the defaults for all object types. If a certain object property has not been specified in the `config` directory, it will be retrieved from the `defaults` directory using the flavour specified in the configured object. If no flavour has been selected, the `default` flavour will be chosen. + +You should not need this subdirectory in most circumstances. + +### `assets` directory (optional) +Optional directory holding the assets you wish to deploy for the Cloud Pak. More information about Cloud Pak for Data assets which can be deployed can be found in object definition [cp4d_asset](../../../30-reference/configuration/cp4d-assets). The directory can be named differently as well, for example `cp4d-assets` or `customer-churn-demo`. + +### `inventory` directory (optional) +The Cloud Pak Deployer pipeline has been built using Ansible and it can be configured using "inventory" files. Inventory files allow you to specify global variables used throughout Ansible playbooks. In the current version of the Cloud Pak Deployer, the inventory directory has become fully optional as the `global_config` and `vault` objects have taken over its role. However, if there are certain global variables such as `env_id` you want to pass via an inventory file, you can also do this. + +## Vault secrets +User passwords, certificates and other "secret" information is kept in the vault, which can be either a flat file (not encrypted), HashiCorp Vault or the IBM Cloud Secrets Manager service. Some of the deployment configurations require that the vault is pre-populated with secrets which as needed during the deployment. For example, a vSphere deployment needs the vSphere user and password to authenticate to vSphere and Cloud Pak for Data SAML configuration requires the idP certificate + +All samples default to the **File Vault**, meaning that the vault will be kept in the `vault` directory under the status directory you specify when you run the deployer. Detailed descriptions of the vault settings can be found in the sample inventory file and also here: [vault settings](../../../30-reference/configuration/vault). + +Optional: Ensure that the environment variables for the configuration and status directories are set. If not specified, the directories are assumed to be `$HOME/cpd-config` and `$HOME/cpd-status`. +``` +export STATUS_DIR=$HOME/cpd-status +export CONFIG_DIR=$HOME/cpd-config +``` + +Set vSphere user secret: +``` +./cp-deploy.sh vault set \ + --vault-secret vsphere-user \ + --vault-secret-value super_user@vsphere.local +``` + +Or, if you want to create the secret from an input file: +``` +./cp-deploy.sh vault set \ + --vault-secret kubeconfig \ + --vault-secret-file ~/.kube/config +``` + +## Using a GitHub repository for the configuration + +If the configuration is kept in a GitHub repository, you can set environment variables to have the deployer pull the GitHub repository to the current server before starting the process. + +Set environment variables. +``` +export CPD_CONFIG_GIT_REPO="https://github.com/IBM/cloud-pak-deployer-config.git" +export CPD_CONFIG_GIT_REF="main" +export CPD_CONFIG_GIT_CONTEXT="" +``` + +- `CPD_CONFIG_GIT_REPO`: The clone URL of the GitHub repository that holds the configuration. +- `CPD_CONFIG_GIT_REF`: The branch, tag or commit ID to be cloned. If not specified, the repository's default branch will be cloned. +- `CPD_CONFIG_GIT_CONTEXT`: The directory within the GitHub repository that holds the configuration. This directory must contain the `config` directory under which the YAML files are kept. + +!!! info + When specifying a GitHub repository, the contents will be copied under `$STATUS_DIR/cpd-config` and this directory is then set as the configuration directory. + ## Using dynamic variables (extra variables) In some situations you may want to use a single configuration for deployment in different environments, such as development, acceptance test and production. The Cloud Pak Deployer uses the Jinja2 templating engine which is included in Ansible to pre-process the configuration. This allows you to dynamically adjust the configuration based on extra variables you specify at the command line. diff --git a/docs/src/10-use-deployer/2-configure/images/directory-structure.drawio b/docs/src/50-advanced/images/directory-structure.drawio similarity index 100% rename from docs/src/10-use-deployer/2-configure/images/directory-structure.drawio rename to docs/src/50-advanced/images/directory-structure.drawio diff --git a/docs/src/10-use-deployer/2-configure/images/directory-structure.png b/docs/src/50-advanced/images/directory-structure.png similarity index 100% rename from docs/src/10-use-deployer/2-configure/images/directory-structure.png rename to docs/src/50-advanced/images/directory-structure.png From 0adb3285cefbde54be0206751ba35d5574101ae3 Mon Sep 17 00:00:00 2001 From: Frank Ketelaars Date: Sat, 21 Oct 2023 14:12:19 +0200 Subject: [PATCH 2/9] #537 Simplify AWS ROSA --- docs/src/10-use-deployer/3-run/aws-rosa.md | 39 ++++++++++++---------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/docs/src/10-use-deployer/3-run/aws-rosa.md b/docs/src/10-use-deployer/3-run/aws-rosa.md index 91a1da275..df80a7684 100644 --- a/docs/src/10-use-deployer/3-run/aws-rosa.md +++ b/docs/src/10-use-deployer/3-run/aws-rosa.md @@ -3,7 +3,7 @@ On Amazon Web Services (AWS), OpenShift can be set up in various ways, managed by Red Hat (ROSA) or self-managed. The steps below are applicable to the ROSA (Red Hat OpenShift on AWS) installation. More information about ROSA can be found here: https://aws.amazon.com/rosa/ There are 5 main steps to run the deploye for AWS (ROSA): -1. [Create and set the configuration and status directories](#1-create-and-set-the-configuration-and-status-directories) +1. [Configure deployer](#1-configure-deployer) 2. [Prepare the AWS cloud environment](#2-prepare-the-aws-cloud-enironment) 3. [Obtain Cloud Pak entitlement key](#3-acquire-an-ibm-cloud-pak-entitlement-key) 4. [Set environment variables](#4-set-environment-variables-for-aws-rosa) @@ -16,31 +16,36 @@ A typical setup of the ROSA cluster is pictured below: When deploying ROSA, an external host name and domain name are automatically generated by Amazon Web Services and both the API and Ingress servers can be resolved by external clients. At this stage, one cannot configure the domain name to be used. -# 1. Create and set the configuration and status directories +# 1. Configure deployer -## Set deployer Configuration directory -You can use a local directory to hold the deployer configuration or retrieve the configuration from a GitHub repository. If you don't specify any configuration directory or GitHub repository, the configuration directory are assumed to be `$HOME/cpd-config`. -``` -export CONFIG_DIR=$HOME/cpd-config -``` - -- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory. +## Deployer configuration and status directories +Deployer reads the configuration from a directory you set in the `CONFIG_DIR` environment variable. A status directory (`STATUS_DIR` environment variable) is used to log activities, store temporary files, scripts. If you use a File Vault (default), the secrets are kept in the `$STATUS_DIR/vault` directory. -You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). Copy these files into the `$CONFIG_DIR/config` directory. +You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). For ROSA installations, copy one of `ocp-aws-rosa-*.yaml` files into the `$CONFIG_DIR/config` directory. If you also want to install a Cloud Pak, copy one of the `cp4*.yaml` files. -### Advanced configuration -If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). - -For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). +Example: +``` +mkdir -p $HOME/cpd-config/config +cp sample-configurations/sample-dynamic/config-samples/ocp-aws-rosa-elastic.yaml $HOME/cpd-config/config/ +cp sample-configurations/sample-dynamic/config-samples/cp4d-471.yaml $HOME/cpd-config/config/ +``` -## Set deployer status directory +## Set configuration and status directories environment variables Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. ``` +export CONFIG_DIR=$HOME/cpd-config export STATUS_DIR=$HOME/cpd-status ``` -- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. **Please note** that if you have chosen to use a File Vault, the properties file is keps under the `vault` directory within the status directory. If you don't specify a status directory, it is assumed to be `$HOME/cpd-status`. +- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory which contains the configuration `yaml` files. +- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. + +### Optional: advanced configuration +If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). + +For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). + # 2. Prepare the AWS Cloud enironment @@ -64,7 +69,7 @@ You will need an **Access Key ID** and **Secret Access Key** for the deployer to - If you do not yet have an access key (or you no longer have the associated secret), create an access key - Store your **Access Key ID** and **Secret Access Key** in safe place -### Alternative: Using temporary AWS security credentials +### Alternative: Using temporary AWS security credentials (STS) If your account uses temporary security credentials for AWS resources, you must use the **Access Key ID**, **Secret Access Key** and **Session Token** associated with your temporary credentials. From 5691bb215fdac0932411ec973fbf1e66bb5d590e Mon Sep 17 00:00:00 2001 From: Frank Ketelaars Date: Sat, 21 Oct 2023 14:12:31 +0200 Subject: [PATCH 3/9] #537 Fix post-run steps --- docs/src/10-use-deployer/5-post-run/post-run.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/10-use-deployer/5-post-run/post-run.md b/docs/src/10-use-deployer/5-post-run/post-run.md index a5bca7567..7c30fa4fc 100644 --- a/docs/src/10-use-deployer/5-post-run/post-run.md +++ b/docs/src/10-use-deployer/5-post-run/post-run.md @@ -4,9 +4,9 @@ If you want to change the deployed configuration, you can just update the config Below are a couple of examples of post-run changes you may want to do. ## Change Cloud Pak for Data admin password -When initially installed, the Cloud Pak Deployer will generate a strong password for the Cloud Pak for Data `admin` user. If you want to change the password afterwards, you can do this from the Cloud Pak for Data user interface, but this means that the deployer will no longer be able to make changes to the Cloud Pak for Data configuration. +When initially installed, the Cloud Pak Deployer will generate a strong password for the Cloud Pak for Data `admin` user (or `cpadmin` if you have selected to use Foundational Services IAM). If you want to change the password afterwards, you can do this from the Cloud Pak for Data user interface, but this means that the deployer will no longer be able to make changes to the Cloud Pak for Data configuration. -If you have updated the `admin` password from the UI, please make sure you also update the secret in the vault. +If you have updated the admin password from the UI, please make sure you also update the secret in the vault. First, list the secrets in the vault: ``` From dd18c7330b62c03524b7db28055226a15b63eafd Mon Sep 17 00:00:00 2001 From: Frank Ketelaars Date: Sat, 21 Oct 2023 14:16:02 +0200 Subject: [PATCH 4/9] #564 Add use_fs_iam documentation --- docs/src/30-reference/configuration/cloud-pak.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/src/30-reference/configuration/cloud-pak.md b/docs/src/30-reference/configuration/cloud-pak.md index 075740a3a..c7c86bbce 100644 --- a/docs/src/30-reference/configuration/cloud-pak.md +++ b/docs/src/30-reference/configuration/cloud-pak.md @@ -15,12 +15,11 @@ Defines the Cloud Pak for Data instances to be configured on the OpenShift clust cp4d: - project: cpd openshift_cluster_name: sample - cp4d_version: 4.0.9 - use_case_files: False + cp4d_version: 4.7.3 sequential_install: False + use_fs_iam: False change_node_settings: True accept_licenses: False - image_registry_name: cpd404 openshift_storage_name: nfs-storage cp4d_entitlement: cpd-enterprise cp4d_production_license: True @@ -36,8 +35,8 @@ cp4d: | project | Name of the OpenShift project of the Cloud Pak for Data instance | Yes | | | openshift_cluster_name | Name of the OpenShift cluster | Yes, inferred from openshift | Existing `openshift` cluster | | cp4d_version | Cloud Pak for Data version to install, this will determine the version for all cartridges that do not specify a version | Yes | 4.x.x | -| use_case_files | This property indicates whether or not the case files will be used to install the catalog sources in case of an online install from the entitled registry. If `true`, operator case files are downloaded from the case repository to define the catalog sources. If a private registry has been specified (property `image_registry_name`), it is assumed that case file are used to install the catalog sources. | No | True, False (default) | | sequential_install | If set to `True` the deployer will run the **OLM utils** playbooks to install catalog sources, subscriptions and CRs. If set to `False`, deployer will use OLM utils to generate the scripts and then run them, which will cause the catalog sources, subscriptions and CRs to be created immediately and install in parallel | No | True (default), False | +| use_fs_iam | If set to `True` the deployer will enable Foundational Services IAM for authentication | No | False (default), True | | change_node_settings | Controls whether the node settings using the machine configs will be applied onto the OpenShift cluster. | No | True, False | | accept_licenses | Set to 'True' to accept Cloud Pak licenses. Alternatively the `--accept-all-licenses` can be used for the `cp-deploy.sh` command | No | True, False (default) | | cp4d_entitlement | Set to `cpd-enterprise` or `cpd-standard`, dependent on the deployed license | No | cpd-enterprise (default), cpd-standard | From 8e9bd1f5c9d91a36c0164f7fb704124ca5745c84 Mon Sep 17 00:00:00 2001 From: Frank Ketelaars Date: Sat, 21 Oct 2023 14:30:58 +0200 Subject: [PATCH 5/9] #537 AWS self-managed --- docs/src/10-use-deployer/3-run/aws-rosa.md | 4 +- .../10-use-deployer/3-run/aws-self-managed.md | 92 ++++++++++--------- 2 files changed, 52 insertions(+), 44 deletions(-) diff --git a/docs/src/10-use-deployer/3-run/aws-rosa.md b/docs/src/10-use-deployer/3-run/aws-rosa.md index df80a7684..3bdf1c7a0 100644 --- a/docs/src/10-use-deployer/3-run/aws-rosa.md +++ b/docs/src/10-use-deployer/3-run/aws-rosa.md @@ -4,7 +4,7 @@ On Amazon Web Services (AWS), OpenShift can be set up in various ways, managed b There are 5 main steps to run the deploye for AWS (ROSA): 1. [Configure deployer](#1-configure-deployer) -2. [Prepare the AWS cloud environment](#2-prepare-the-aws-cloud-enironment) +2. [Prepare the AWS cloud environment](#2-prepare-the-aws-cloud-environment) 3. [Obtain Cloud Pak entitlement key](#3-acquire-an-ibm-cloud-pak-entitlement-key) 4. [Set environment variables](#4-set-environment-variables-for-aws-rosa) 5. [Run the deployer](#5-run-the-deployer) @@ -47,7 +47,7 @@ If the deployer configuration is kept on GitHub, follow the instructions in [Git For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). -# 2. Prepare the AWS Cloud enironment +# 2. Prepare the AWS Cloud environment ## Enable ROSA on AWS diff --git a/docs/src/10-use-deployer/3-run/aws-self-managed.md b/docs/src/10-use-deployer/3-run/aws-self-managed.md index fcc022e4b..647881f40 100644 --- a/docs/src/10-use-deployer/3-run/aws-self-managed.md +++ b/docs/src/10-use-deployer/3-run/aws-self-managed.md @@ -1,6 +1,13 @@ # Running the Cloud Pak Deployer on AWS (Self-managed) -On Amazon Web Services (AWS), OpenShift can be set up in various ways, managed by Red Hat (ROSA) or self-managed. The steps below are applicable to a self-managed OpenShift installation. The IPI (Installer Provisioned Infrastructure) installer will be used. More information about IPI installation can be found here: https://docs.openshift.com/container-platform/4.10/installing/installing_aws/installing-aws-customizations.html. +On Amazon Web Services (AWS), OpenShift can be set up in various ways, self-managed or managed by Red Hat (ROSA). The steps below are applicable to a self-managed OpenShift installation. The IPI (Installer Provisioned Infrastructure) installer will be used. More information about IPI installation can be found here: https://docs.openshift.com/container-platform/4.12/installing/installing_aws/installing-aws-customizations.html. + +There are 5 main steps to run the deploye for AWS (ROSA): +1. [Configure deployer](#1-configure-deployer) +2. [Prepare the AWS cloud environment](#2-prepare-the-aws-cloud-environment) +3. [Obtain Cloud Pak entitlement key](#3-acquire-an-ibm-cloud-pak-entitlement-key) +4. [Set environment variables](#4-set-environment-variables-for-aws-self-managed-openshift-cluster) +5. [Run the deployer](#5-run-the-deployer) See the deployer in action in this video: https://ibm.box.com/v/cpd-aws-self-managed @@ -17,6 +24,38 @@ Cloud Pak Deployer can deploy a single-node OpenShift with elastic storage and a !!! warning When deploying the IBM Cloud Paks on single-node OpenShift, there may be intermittent timeouts as pods are starting up. In those cases, just re-run the deployer with the same configuration and check status of the pods. +# 1. Configure deployer + +## Deployer configuration and status directories +Deployer reads the configuration from a directory you set in the `CONFIG_DIR` environment variable. A status directory (`STATUS_DIR` environment variable) is used to log activities, store temporary files, scripts. If you use a File Vault (default), the secrets are kept in the `$STATUS_DIR/vault` directory. + +You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). For self-managed OpenShift installations, copy one of `ocp-aws-self-managed-*.yaml` files into the `$CONFIG_DIR/config` directory. If you also want to install a Cloud Pak, copy one of the `cp4*.yaml` files. + +Example: +``` +mkdir -p $HOME/cpd-config/config +cp sample-configurations/sample-dynamic/config-samples/ocp-aws-self-managed-elastic.yaml $HOME/cpd-config/config/ +cp sample-configurations/sample-dynamic/config-samples/cp4d-471.yaml $HOME/cpd-config/config/ +``` + +## Set configuration and status directories environment variables +Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. + +``` +export CONFIG_DIR=$HOME/cpd-config +export STATUS_DIR=$HOME/cpd-status +``` + +- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory which contains the configuration `yaml` files. +- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. + +### Optional: advanced configuration +If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). + +For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). + +# 2. Prepare the AWS Cloud environment + ## Configure Route53 service on AWS When deploying a self-managed OpenShift on Amazon web Services, a public hosted zone must be created in the same account as your OpenShift cluster. The domain name or subdomain name registered in the Route53 service must be specifed in the `openshift` configuration of the deployer. @@ -34,7 +73,7 @@ If you can use your permanent security credentials for the AWS account, you will - If you do not yet have an access key (or you no longer have the associated secret), create an access key - Store your **Access Key ID** and **Secret Access Key** in safe place -## Alternative: Using temporary AWS security credentials +## Alternative: Using temporary AWS security credentials (STS) If your account uses temporary security credentials for AWS resources, you must use the **Access Key ID**, **Secret Access Key** and **Session Token** associated with your temporary credentials. @@ -66,7 +105,7 @@ To install OpenShift you need an OpenShift pull secret which holds your entitlem - Navigate to https://console.redhat.com/openshift/install/pull-secret and download the pull secret into file `/tmp/ocp_pullsecret.json` -## Acquire an IBM Cloud Pak Entitlement Key +# 3. Acquire an IBM Cloud Pak Entitlement Key If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. @@ -78,11 +117,9 @@ If you want to pull the Cloud Pak images from the entitled registry (i.e. an onl As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. ## Optional: Locate or generate a public SSH Key -To obtain access to the OpenShift nodes post-installation, you will need to specify the public SSH key of your server; typically this is `~/.ssh/id_rsa.pub`, where `~` is the home directory of your user. If you don't have an SSH key-pair yet, you can generate one using the steps documented here: https://docs.openshift.com/container-platform/4.10/installing/installing_aws/installing-aws-customizations.html#ssh-agent-using_installing-aws-customizations. Alternatively, deployer can generate SSH key-pair automatically if credential `ocp-ssh-pub-key` is not in the vault. - -## Prepare for running +To obtain access to the OpenShift nodes post-installation, you will need to specify the public SSH key of your server; typically this is `~/.ssh/id_rsa.pub`, where `~` is the home directory of your user. If you don't have an SSH key-pair yet, you can generate one using the steps documented here: https://docs.openshift.com/container-platform/4.12/installing/installing_aws/installing-aws-customizations.html#ssh-agent-using_installing-aws-customizations. Alternatively, deployer can generate SSH key-pair automatically if credential `ocp-ssh-pub-key` is not in the vault. -### Set environment variables for AWS self-managed OpenShift cluster +# 4. Set environment variables for AWS self-managed OpenShift cluster ``` export AWS_ACCESS_KEY_ID=your_access_key @@ -90,7 +127,7 @@ export AWS_SECRET_ACCESS_KEY=your_secret_access_key export CP_ENTITLEMENT_KEY=your_cp_entitlement_key ``` -Optional: If you want to use the temporary security credentials, you must set the `AWS_SESSION_TOKEN` to be used for the AWS CLI. +Optional: If your user does not have permanent administrator access but using temporary credentials, you can set the `AWS_SESSION_TOKEN` to be used for the AWS CLI. ``` export AWS_SESSION_TOKEN=your_session_token ``` @@ -103,38 +140,7 @@ export AWS_SESSION_TOKEN=your_session_token !!! warning If your `AWS_SESSION_TOKEN` is expires while the deployer is still running, the deployer may end abnormally. In such case, you can just issue new temporary credentials (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` and `AWS_SESSION_TOKEN`) and restart the deployer. Alternatively, you can update the 3 vault secrets, respectively `aws-access-key`, `aws-secret-access-key` and `aws-session-token` with new values as they are re-retrieved by the deployer on a regular basis. -### Set deployer status directory -Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. - -``` -export STATUS_DIR=$HOME/cpd-status -``` - -- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. **Please note** that if you have chosen to use a File Vault, the properties file is keps under the `vault` directory within the status directory. If you don't specify a status directory, it is assumted to be `$HOME/cpd-status`. - -### Set deployer configuration location -You can use a local directory to hold the deployer configuration or retrieve the configuration from a GitHub repository. If you don't specify any configuration directory or GitHub repository, the configuration directory are assumed to be `$HOME/cpd-config`. -``` -export CONFIG_DIR=$HOME/cpd-config -``` - -- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory. - -Or, when using a GitHub repository for the configuration. -``` -export CPD_CONFIG_GIT_REPO="https://github.com/IBM/cloud-pak-deployer-config.git" -export CPD_CONFIG_GIT_REF="main" -export CPD_CONFIG_GIT_CONTEXT="" -``` - -- `CPD_CONFIG_GIT_REPO`: The clone URL of the GitHub repository that holds the configuration. -- `CPD_CONFIG_GIT_REF`: The branch, tag or commit ID to be cloned. If not specified, the repository's default branch will be cloned. -- `CPD_CONFIG_GIT_CONTEXT`: The directory within the GitHub repository that holds the configuration. This directory must contain the `config` directory under which the YAML files are kept. - -!!! info - When specifying a GitHub repository, the contents will be copied under `$STATUS_DIR/cpd-config` and this directory is then set as the configuration directory. - -### Create the secrets needed for self-managed OpenShift cluster +## Create the secrets needed for self-managed OpenShift cluster You need to store the below credentials in the vault so that the deployer has access to them when installing self-managed OpenShift cluster on AWS. @@ -149,12 +155,14 @@ You need to store the below credentials in the vault so that the deployer has ac --vault-secret-file ~/.ssh/id_rsa.pub ``` +# 5. Run the deployer + ## Optional: validate the configuration If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. ``` -./cp-deploy.sh env apply --check-only [--accept-all-licenses] +./cp-deploy.sh env apply --check-only --accept-all-licenses ``` ## Run the Cloud Pak Deployer @@ -162,7 +170,7 @@ If you only want to validate the configuration, you can run the dpeloyer with th To run the container using a local configuration input directory and a data directory where temporary and state is kept, use the example below. If you don't specify the status directory, the deployer will automatically create a temporary directory. Please note that the status directory will also hold secrets if you have configured a flat file vault. If you lose the directory, you will not be able to make changes to the configuration and adjust the deployment. It is best to specify a permanent directory that you can reuse later. If you specify an existing directory the current user **must** be the owner of the directory. Failing to do so may cause the container to fail with insufficient permissions. ``` -./cp-deploy.sh env apply [--accept-all-licenses] +./cp-deploy.sh env apply --accept-all-licenses ``` You can also specify extra variables such as `env_id` to override the names of the objects referenced in the `.yaml` configuration files as `{{ env_id }}-xxxx`. For more information about the extra (dynamic) variables, see [advanced configuration](../../../50-advanced/advanced-configuration). From 648272def23604c06a7f5d84e443a972c046557f Mon Sep 17 00:00:00 2001 From: Frank Ketelaars Date: Sat, 21 Oct 2023 23:10:34 +0200 Subject: [PATCH 6/9] #537 AWS and Azure --- docs/src/10-use-deployer/3-run/aws-rosa.md | 2 +- .../10-use-deployer/3-run/aws-self-managed.md | 12 +- docs/src/10-use-deployer/3-run/azure-aro.md | 287 +++++++----------- .../3-run/azure-self-managed.md | 283 ++++++----------- .../3-run/azure-service-principal.md | 103 +++++++ 5 files changed, 316 insertions(+), 371 deletions(-) create mode 100644 docs/src/10-use-deployer/3-run/azure-service-principal.md diff --git a/docs/src/10-use-deployer/3-run/aws-rosa.md b/docs/src/10-use-deployer/3-run/aws-rosa.md index 3bdf1c7a0..e618276e2 100644 --- a/docs/src/10-use-deployer/3-run/aws-rosa.md +++ b/docs/src/10-use-deployer/3-run/aws-rosa.md @@ -2,7 +2,7 @@ On Amazon Web Services (AWS), OpenShift can be set up in various ways, managed by Red Hat (ROSA) or self-managed. The steps below are applicable to the ROSA (Red Hat OpenShift on AWS) installation. More information about ROSA can be found here: https://aws.amazon.com/rosa/ -There are 5 main steps to run the deploye for AWS (ROSA): +There are 5 main steps to run the deployer for AWS (ROSA): 1. [Configure deployer](#1-configure-deployer) 2. [Prepare the AWS cloud environment](#2-prepare-the-aws-cloud-environment) 3. [Obtain Cloud Pak entitlement key](#3-acquire-an-ibm-cloud-pak-entitlement-key) diff --git a/docs/src/10-use-deployer/3-run/aws-self-managed.md b/docs/src/10-use-deployer/3-run/aws-self-managed.md index 647881f40..bcd476851 100644 --- a/docs/src/10-use-deployer/3-run/aws-self-managed.md +++ b/docs/src/10-use-deployer/3-run/aws-self-managed.md @@ -99,12 +99,6 @@ export AWS_SESSION_TOKEN=IQxxxxxxxxxxxxxbfQ If the `openshift` configuration has the `infrastructure.credentials_mode` set to `Manual`, Cloud Pak Deployer will automatically configure and run the Cloud Credential Operator utility. -## Acquire an OpenShift pull secret - -To install OpenShift you need an OpenShift pull secret which holds your entitlement. - -- Navigate to https://console.redhat.com/openshift/install/pull-secret and download the pull secret into file `/tmp/ocp_pullsecret.json` - # 3. Acquire an IBM Cloud Pak Entitlement Key If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. @@ -116,6 +110,12 @@ If you want to pull the Cloud Pak images from the entitled registry (i.e. an onl !!! warning As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. +## Acquire an OpenShift pull secret + +To install OpenShift you need an OpenShift pull secret which holds your entitlement. + +- Navigate to https://console.redhat.com/openshift/install/pull-secret and download the pull secret into file `/tmp/ocp_pullsecret.json` + ## Optional: Locate or generate a public SSH Key To obtain access to the OpenShift nodes post-installation, you will need to specify the public SSH key of your server; typically this is `~/.ssh/id_rsa.pub`, where `~` is the home directory of your user. If you don't have an SSH key-pair yet, you can generate one using the steps documented here: https://docs.openshift.com/container-platform/4.12/installing/installing_aws/installing-aws-customizations.html#ssh-agent-using_installing-aws-customizations. Alternatively, deployer can generate SSH key-pair automatically if credential `ocp-ssh-pub-key` is not in the vault. diff --git a/docs/src/10-use-deployer/3-run/azure-aro.md b/docs/src/10-use-deployer/3-run/azure-aro.md index 3391fe097..66babcdf7 100644 --- a/docs/src/10-use-deployer/3-run/azure-aro.md +++ b/docs/src/10-use-deployer/3-run/azure-aro.md @@ -1,5 +1,14 @@ # Running the Cloud Pak Deployer on Microsoft Azure - ARO +On Azure, OpenShift can be set up in various ways, managed by Red Hat (ARO) or self-managed. The steps below are applicable to the ARO (Azure Red Hat OpenShift). + +There are 5 main steps to run the deployer for Azure (ARO): +1. [Configure deployer](#1-configure-deployer) +2. [Prepare the Azure cloud environment](#2-prepare-the-azure-cloud-environment) +3. [Obtain Cloud Pak entitlement key](#3-acquire-an-ibm-cloud-pak-entitlement-key) +4. [Set environment variables](#4-set-environment-variables-for-azure-aro) +5. [Run the deployer](#5-run-the-deployer) + ## Topology A typical setup of the ARO cluster is pictured below: @@ -7,169 +16,62 @@ A typical setup of the ARO cluster is pictured below: When deploying ARO, you can configure the domain name by setting the `openshift.domain_name` attribute. The resulting domain name is managed by Azure, and it must be unique across all ARO instances deployed in Azure. Both the API and Ingress urls are set to be public in the template, so they can be resolved by external clients. If you want to use a custom domain and don't have one yet, you buy one from Azure: https://learn.microsoft.com/en-us/azure/app-service/manage-custom-dns-buy-domain. -## Acquire an Red Hat OpenShift pull secret - -To install OpenShift you need an OpenShift pull secret which holds your entitlement. - -- Navigate and login to [Red Hat OpenShift cluster manager portal](https://cloud.redhat.com/openshift/install/azure/aro-provisioned) - -- Click on `Download pull secret` button, and save the pull secret into the `/tmp/ocp_pullsecret.json` file. - -## Acquire an IBM Cloud Pak Entitlement Key - -If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. - -- Navigate to https://myibm.ibm.com/products-services/containerlibrary and login with your IBMId credentials -- Select **Get Entitlement Key** and create a new key (or copy your existing key) -- Copy the key value - -!!! warning - As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. - -## Verify your quota and permissions in Microsoft Azure - -- Check [Azure resource quota](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#before-you-begin) of the subscription - Azure Red Hat OpenShift requires a minimum of 40 cores to create and run an OpenShift cluster. -- The ARO cluster is provisioned using the `az` command. Ideally, one has to have `Contributor` permissions on the subscription (Azure resources) and `Application administrator` role assigned in the Azure Active Directory. See details [here](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#verify-your-permissions). +# 1. Configure deployer -## Login to the Microsoft Azure +## Deployer configuration and status directories +Deployer reads the configuration from a directory you set in the `CONFIG_DIR` environment variable. A status directory (`STATUS_DIR` environment variable) is used to log activities, store temporary files, scripts. If you use a File Vault (default), the secrets are kept in the `$STATUS_DIR/vault` directory. -You are required to create a Service Principal and get Azure Red Hat OpenShift Resource Provider objectId before starting the deployment. The future steps expect that you are logged in to the Microsoft Azure by using CLI. +You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). For ARO installations, copy one of `ocp-azure-aro*.yaml` files into the `$CONFIG_DIR/config` directory. If you also want to install a Cloud Pak, copy one of the `cp4*.yaml` files. -[Install Azure CLI tool](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=dnf), and run the commands in your operating system, or - -Login to the Microsoft Azure: +Example: ``` -az login +mkdir -p $HOME/cpd-config/config +cp sample-configurations/sample-dynamic/config-samples/ocp-azure-aro.yaml $HOME/cpd-config/config/ +cp sample-configurations/sample-dynamic/config-samples/cp4d-471.yaml $HOME/cpd-config/config/ ``` -If you have a subscription with multiple tenants, use: -``` -az login --tenant -``` +## Set configuration and status directories environment variables +Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. -Example: -```bash -az login --tenant 869930ac-17ee-4dda-bbad-7354c3e7629c8 -To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AXWFQQ5FJ to authenticate. -[ - { - "cloudName": "AzureCloud", - "homeTenantId": "869930ac-17ee-4dda-bbad-7354c3e7629c8", - "id": "72281667-6d54-46cb-8423-792d7bcb1234", - "isDefault": true, - "managedByTenants": [], - "name": "Azure Account", - "state": "Enabled", - "tenantId": "869930ac-17ee-4dda-bbad-7354c3e7629c8", - "user": { - "name": "you_user@domain.com", - "type": "user" - } - } -] +``` +export CONFIG_DIR=$HOME/cpd-config +export STATUS_DIR=$HOME/cpd-status ``` -### Set subscription (optional) +- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory which contains the configuration `yaml` files. +- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. -If you have multiple Azure subscriptions, specify the relevant subscription ID: `az account set --subscription ` +### Optional: advanced configuration +If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). -You can list the subscriptions via command: -```bash -az account subscription list -``` +For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). -```output -[ - { - "authorizationSource": "RoleBased", - "displayName": "IBM xxx", - "id": "/subscriptions/dcexxx", - "state": "Enabled", - "subscriptionId": "dcexxx", ---> your_subscription_id parameter - "subscriptionPolicies": { - "locationPlacementId": "Public_2014-09-01", - "quotaId": "EnterpriseAgreement_2014-09-01", - "spendingLimit": "Off" - } - } -] -``` +# 2. Prepare the Azure Cloud environment -## Register Resource Providers +## Install the Azure CLI tool -Make sure the following Resource Providers are registered for your subscription by running: +[Install Azure CLI tool](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=dnf), and run the commands in your operating system. -```bash -az provider register -n Microsoft.RedHatOpenShift --wait -az provider register -n Microsoft.Compute --wait -az provider register -n Microsoft.Storage --wait -az provider register -n Microsoft.Authorization --wait -``` +## Verify your quota and permissions in Microsoft Azure -## Prepare Azure resources +- Check [Azure resource quota](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#before-you-begin) of the subscription - Azure Red Hat OpenShift requires a minimum of 40 cores to create and run an OpenShift cluster. +- The ARO cluster is provisioned using the `az` command. Ideally, one has to have `Contributor` permissions on the subscription (Azure resources) and `Application administrator` role assigned in the Azure Active Directory. See details [here](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#verify-your-permissions). ### Set environment variables for Azure ```bash -export ENV_ID=env_id_in_config_files -export AZURE_SUBSCRIPTION_ID=your_azure_subscription_id -export AZURE_RESOURCE_GROUP=${ENV_ID}-rg -export AZURE_LOCATION=azure_location -export AZURE_SP=${ENV_ID}-sp +export AZURE_RESOURCE_GROUP=pluto-01-rg +export AZURE_LOCATION=westeurope +export AZURE_SP=pluto-01-sp ``` -- `AZURE_SUBSCRIPTION_ID`: The id of your Azure subscription. Once logged in, you can retrieve this using the `az account show` command. - `AZURE_RESOURCE_GROUP`: The Azure resource group that will hold all resources belonging to the cluster: VMs, load balancers, virtual networks, subnets, etc.. Typically you will create a resource group for every OpenShift cluster you provision. - `AZURE_LOCATION`: The Azure location of the resource group, for example `useast` or `westeurope`. -- `AZURE_SP`: Azure service principal that is used to create the resources on Azure. Typically you will use a service principal for every OpenShift cluster you provision. +- `AZURE_SP`: Azure service principal that is used to create the resources on Azure. You will get the service principal from the Azure administrator. -Example: -```bash -export ENV_ID=pluto-01 -export AZURE_SUBSCRIPTION_ID=72281667-6d54-46cb-8423-792d7bcb1234 -export AZURE_RESOURCE_GROUP=${ENV_ID}-rg -export AZURE_LOCATION=uksouth -export AZURE_SP=${ENV_ID}-sp -``` +## Store Service Principal credentials -### Create resource group, service principal and set permissions - -First the resource group must be created; this must be the same resource group as specified under `azure.resource_group.name` in the configuration file. -```bash -az group create \ - --name ${AZURE_RESOURCE_GROUP} \ - --location ${AZURE_LOCATION} -``` - -```output -{ - "id": "/subscriptions/72281667-6d54-46cb-8423-792d7bcb1234/resourceGroups/pluto-01-rg", - "location": "uksouth", - "managedBy": null, - "name": "pluto-01-rg", - "properties": { - "provisioningState": "Succeeded" - }, - "tags": null, - "type": "Microsoft.Resources/resourceGroups" -} -``` - -Then, create the service principal that will do the installation and assign the `Contributor role` -```bash -az ad sp create-for-rbac \ - --role Contributor \ - --name ${AZURE_SP} \ - --scopes /subscriptions/${AZURE_SUBSCRIPTION_ID} > /tmp/${AZURE_SP}-credentials.json -``` - -If you only have Contributor access to a resource group, you must specify the resource group scope instead: -```bash -az ad sp create-for-rbac \ - --role Contributor \ - --name ${AZURE_SP} \ - --scopes /subscriptions/${AZURE_SUBSCRIPTION_ID}/resourceGroups/pluto-01-rg > /tmp/${AZURE_SP}-credentials.json -``` +You must run the OpenShift installation using an Azure Service Principal with sufficient permissions. The Azure account administrator will share the SP credentials as a JSON file. Example output in credentials file: ```output @@ -181,65 +83,59 @@ Example output in credentials file: } ``` -Finally, set the permissions of the service principal to allow creation of the OpenShift cluster -```bash -az role assignment create \ - --role "User Access Administrator" \ - --assignee-object-id $(az ad sp list --display-name=${AZURE_SP} --query='[].id' -o tsv) -``` - -If you do not have permissions to list service principals, you can also run the following commands: -```bash -export AZURE_SP_ID=$(jq -r .appId /tmp/${AZURE_SP}-credentials.json) -az role assignment create \ - --role "User Access Administrator" \ - --assignee-object-id $(az ad sp show --id ${AZURE_SP_ID} --query='id' -o tsv) -``` +Store this file as `/tmp/${AZURE_SP}-credentials.json`. -## Prepare for running +If you have subscription-level access you can also create the Service Principal yourself. See steps in [Create Azure service principal](./azure-service-principal.md). -### Set environment variables for Azure ARO cluster +## Login as Service Principal +Login as the service principal: ``` -export CP_ENTITLEMENT_KEY=your_cp_entitlement_key +az login --service-principal -u a4c39ae9-f9d1-4038-b4a4-ab011e769111 -p xyz-xyz --tenant 869930ac-17ee-4dda-bbad-7354c3e7629c8 ``` -- `CP_ENTITLEMENT_KEY`: This is the entitlement key you acquired as per the instructions above, this is a 80+ character string +## Register Resource Providers -### Set deployer status directory -Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. +Make sure the following Resource Providers are registered for your subscription by running: -``` -export STATUS_DIR=$HOME/cpd-status +```bash +az provider register -n Microsoft.RedHatOpenShift --wait +az provider register -n Microsoft.Compute --wait +az provider register -n Microsoft.Storage --wait +az provider register -n Microsoft.Authorization --wait ``` -- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. **Please note** that if you have chosen to use a File Vault, the properties file is keps under the `vault` directory within the status directory. If you don't specify a status directory, it is assumted to be `$HOME/cpd-status`. +## Create the resource group -### Set deployer configuration location -You can use a local directory to hold the deployer configuration or retrieve the configuration from a GitHub repository. If you don't specify any configuration directory or GitHub repository, the configuration directory are assumed to be `$HOME/cpd-config`. -``` -export CONFIG_DIR=$HOME/cpd-config +First the resource group must be created; this resource group must match the one configured in your OpenShift yaml config file. +```bash +az group create \ + --name ${AZURE_RESOURCE_GROUP} \ + --location ${AZURE_LOCATION} ``` -- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory. +# 3. Acquire an IBM Cloud Pak Entitlement Key -Or, when using a GitHub repository for the configuration. -``` -export CPD_CONFIG_GIT_REPO="https://github.com/IBM/cloud-pak-deployer-config.git" -export CPD_CONFIG_GIT_REF="main" -export CPD_CONFIG_GIT_CONTEXT="" -``` +If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. + +- Navigate to https://myibm.ibm.com/products-services/containerlibrary and login with your IBMId credentials +- Select **Get Entitlement Key** and create a new key (or copy your existing key) +- Copy the key value -- `CPD_CONFIG_GIT_REPO`: The clone URL of the GitHub repository that holds the configuration. -- `CPD_CONFIG_GIT_REF`: The branch, tag or commit ID to be cloned. If not specified, the repository's default branch will be cloned. -- `CPD_CONFIG_GIT_CONTEXT`: The directory within the GitHub repository that holds the configuration. This directory must contain the `config` directory under which the YAML files are kept. +!!! warning + As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. -!!! info - When specifying a GitHub repository, the contents will be copied under `$STATUS_DIR/cpd-config` and this directory is then set as the configuration directory. +## Acquire an OpenShift pull secret + +To install OpenShift you need an OpenShift pull secret which holds your entitlement. + +- Navigate to https://console.redhat.com/openshift/install/pull-secret and download the pull secret into file `/tmp/ocp_pullsecret.json` + +# 4. Set environment variables for Azure ARO ### Create the secrets needed for ARO deployment -You need to store the OpenShift pull secret in the vault so that the deployer has access to it. +You need to store the OpenShift pull secret and service principal credentials in the vault so that the deployer has access to it. ``` ./cp-deploy.sh vault set \ @@ -252,15 +148,25 @@ You need to store the OpenShift pull secret in the vault so that the deployer ha --vault-secret-file /tmp/${AZURE_SP}-credentials.json ``` +# 5. Run the deployer + +## Optional: validate the configuration + +If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. + +``` +./cp-deploy.sh env apply --check-only --accept-all-licenses +``` + ## Run the Cloud Pak Deployer To run the container using a local configuration input directory and a data directory where temporary and state is kept, use the example below. If you don't specify the status directory, the deployer will automatically create a temporary directory. Please note that the status directory will also hold secrets if you have configured a flat file vault. If you lose the directory, you will not be able to make changes to the configuration and adjust the deployment. It is best to specify a permanent directory that you can reuse later. If you specify an existing directory the current user **must** be the owner of the directory. Failing to do so may cause the container to fail with insufficient permissions. ``` -./cp-deploy.sh env apply [--accept-all-licenses] +./cp-deploy.sh env apply --accept-all-licenses ``` -For more information about the extra (dynamic) variables, see [advanced configuration](../../../50-advanced/advanced-configuration). +You can also specify extra variables such as `env_id` to override the names of the objects referenced in the `.yaml` configuration files as `{{ env_id }}-xxxx`. For more information about the extra (dynamic) variables, see [advanced configuration](../../../50-advanced/advanced-configuration). The `--accept-all-licenses` flag is optional and confirms that you accept all licenses of the installed cartridges and instances. Licenses must be either accepted in the configuration files or at the command line. @@ -272,7 +178,7 @@ You can return to view the logs as follows: ./cp-deploy.sh env logs ``` -Deploying the infrastructure, preparing OpenShift and installing the Cloud Pak will take a long time, typically between 1-5 hours, dependent on which Cloud Pak cartridges you configured. For estimated duration of the steps, refer to [Timings](../../../30-reference/timings). +Deploying the infrastructure, preparing OpenShift and installing the Cloud Pak will take a long time, typically between 1-5 hours,dependent on which Cloud Pak cartridges you configured. For estimated duration of the steps, refer to [Timings](../../../30-reference/timings). If you need to interrupt the automation, use CTRL-C to stop the logging output and then use: @@ -280,9 +186,28 @@ If you need to interrupt the automation, use CTRL-C to stop the logging output a ./cp-deploy.sh env kill ``` +## On failure + +If the Cloud Pak Deployer fails, for example because certain infrastructure components are temporarily not available, fix the cause if needed and then just re-run it with the same `CONFIG_DIR` and `STATUS_DIR` as well extra variables. The provisioning process has been designed to be idempotent and it will not redo actions that have already completed successfully. + ## Finishing up -Once the process has finished, it will output the URLs by which you can access the deployed Cloud Pak. You can also find this information under the `cloud-paks` directory in the status directory you specified. The `admin` password can be retrieved from the vault as follows: +Once the process has finished, it will output the URLs by which you can access the deployed Cloud Pak. You can also find this information under the `cloud-paks` directory in the status directory you specified. + +To retrieve the Cloud Pak URL(s): + +``` +cat $STATUS_DIR/cloud-paks/* +``` + +This will show the Cloud Pak URLs: + +```output +Cloud Pak for Data URL for cluster pluto-01 and project cpd (domain name specified was example.com): +https://cpd-cpd.apps.pluto-01.example.com +``` + +The `admin` password can be retrieved from the vault as follows: List the secrets in the vault: diff --git a/docs/src/10-use-deployer/3-run/azure-self-managed.md b/docs/src/10-use-deployer/3-run/azure-self-managed.md index 89fd471d1..e9434ce62 100644 --- a/docs/src/10-use-deployer/3-run/azure-self-managed.md +++ b/docs/src/10-use-deployer/3-run/azure-self-managed.md @@ -1,5 +1,14 @@ # Running the Cloud Pak Deployer on Microsoft Azure - Self-managed +On Azure, OpenShift can be set up in various ways, managed by Red Hat (ARO) or self-managed. The steps below are applicable to the self-managed Red Hat OpenShift. + +There are 5 main steps to run the deployer for Azure self-managed OpenShift: +1. [Configure deployer](#1-configure-deployer) +2. [Prepare the Azure cloud environment](#2-prepare-the-azure-cloud-environment) +3. [Obtain Cloud Pak entitlement key](#3-acquire-an-ibm-cloud-pak-entitlement-key) +4. [Set environment variables](#4-set-environment-variables-for-azure-self-managed) +5. [Run the deployer](#5-run-the-deployer) + ## Topology A typical setup of the OpenShift cluster on Azure is pictured below: @@ -7,158 +16,62 @@ A typical setup of the OpenShift cluster on Azure is pictured below: When deploying self-managed OpenShift on Azure, you must configure the domain name by setting the `openshift.domain_name`, which must be public domain with a registrar. OpenShift will create a public DNS zone with additional entries to reach the OpenShift API and the applications (Cloud Paks). If you don't have a domain yet, you buy one from Azure: https://learn.microsoft.com/en-us/azure/app-service/manage-custom-dns-buy-domain. -## Acquire an Red Hat OpenShift pull secret - -To install OpenShift you need an OpenShift pull secret which holds your entitlement. +# 1. Configure deployer -When installing an IBM Cloud Pak, you can retrieve your Red Hat entitlement using instructions on this page: https://www.ibm.com/docs/en/cloud-paks/1.0?topic=iocpc-accessing-red-hat-entitlements-from-your-cloud-pak. Or, retrieve your pull secret from Red Hat: https://console.redhat.com/openshift/install/pull-secret. +## Deployer configuration and status directories +Deployer reads the configuration from a directory you set in the `CONFIG_DIR` environment variable. A status directory (`STATUS_DIR` environment variable) is used to log activities, store temporary files, scripts. If you use a File Vault (default), the secrets are kept in the `$STATUS_DIR/vault` directory. -Download the pull secret into file `/tmp/ocp_pullsecret.json` - -## Acquire an IBM Cloud Pak Entitlement Key - -If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. +You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). For Azure self-managed installations, copy one of `ocp-azure-self-managed*.yaml` files into the `$CONFIG_DIR/config` directory. If you also want to install a Cloud Pak, copy one of the `cp4*.yaml` files. -- Navigate to https://myibm.ibm.com/products-services/containerlibrary and login with your IBMId credentials -- Select **Get Entitlement Key** and create a new key (or copy your existing key) -- Copy the key value - -!!! warning - As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. - -## Verify your quota and permissons in Microsoft Azure - -- Check [Azure resource quota](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#before-you-begin) of the subscription - Azure Red Hat OpenShift requires a minimum of 40 cores to create and run an OpenShift cluster. -- The ARO cluster is provisioned using the `az` command. Ideally, one has to have `Contributor` permissions on the subscription (Azure resources) and `Application administrator` role assigned in the Azure Active Directory. See details [here](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#verify-your-permissions). - -## Login to the Microsoft Azure - -You are required to create a Service Principal and get Azure Red Hat OpenShift Resource Provider objectId before starting the deployment. The future steps expect that you are logged in to the Microsoft Azure by using CLI. - -[Install Azure CLI tool](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=dnf), and run the commands in your operating system, or - -Login to the Microsoft Azure: +Example: ``` -az login +mkdir -p $HOME/cpd-config/config +cp sample-configurations/sample-dynamic/config-samples/ocp-azure-self-managed.yaml $HOME/cpd-config/config/ +cp sample-configurations/sample-dynamic/config-samples/cp4d-471.yaml $HOME/cpd-config/config/ ``` -If you have a subscription with multiple tenants, use: +## Set configuration and status directories environment variables +Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. + ``` -az login --tenant +export CONFIG_DIR=$HOME/cpd-config +export STATUS_DIR=$HOME/cpd-status ``` -Example: -```bash -az login --tenant 869930ac-17ee-4dda-bbad-7354c3e7629c8 -To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AXWFQQ5FJ to authenticate. -[ - { - "cloudName": "AzureCloud", - "homeTenantId": "869930ac-17ee-4dda-bbad-7354c3e7629c8", - "id": "72281667-6d54-46cb-8423-792d7bcb1234", - "isDefault": true, - "managedByTenants": [], - "name": "Azure Account", - "state": "Enabled", - "tenantId": "869930ac-17ee-4dda-bbad-7354c3e7629c8", - "user": { - "name": "you_user@domain.com", - "type": "user" - } - } -] -``` +- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory which contains the configuration `yaml` files. +- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. -### Set subscription (optional) +### Optional: advanced configuration +If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). -If you have multiple Azure subscriptions, specify the relevant subscription ID: `az account set --subscription ` +For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). -You can list the subscriptions via command: -```bash -az account subscription list -``` +# 2. Prepare the Azure Cloud environment -```output -[ - { - "authorizationSource": "RoleBased", - "displayName": "IBM xxx", - "id": "/subscriptions/dcexxx", - "state": "Enabled", - "subscriptionId": "dcexxx", ---> your_subscription_id parameter - "subscriptionPolicies": { - "locationPlacementId": "Public_2014-09-01", - "quotaId": "EnterpriseAgreement_2014-09-01", - "spendingLimit": "Off" - } - } -] -``` +## Install the Azure CLI tool -## Prepare Azure resources +[Install Azure CLI tool](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=dnf), and run the commands in your operating system. + +## Verify your quota and permissions in Microsoft Azure + +- Check [Azure resource quota](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#before-you-begin) of the subscription - Azure Red Hat OpenShift requires a minimum of 40 cores to create and run an OpenShift cluster. +- The self-managed cluster is provisioned using the IPI installer command. Ideally, one has to have `Contributor` permissions on the subscription (Azure resources) and `Application administrator` role assigned in the Azure Active Directory. See details [here](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#verify-your-permissions). ### Set environment variables for Azure ```bash -export ENV_ID=env_id_in_config_files -export AZURE_SUBSCRIPTION_ID=your_azure_subscription_id -export AZURE_RESOURCE_GROUP=${ENV_ID}-rg -export AZURE_LOCATION=azure_location -export AZURE_SP=${ENV_ID}-sp +export AZURE_RESOURCE_GROUP=pluto-01-rg +export AZURE_LOCATION=westeurope +export AZURE_SP=pluto-01-sp ``` -- `AZURE_SUBSCRIPTION_ID`: The id of your Azure subscription. Once logged in, you can retrieve this using the `az account show` command. - `AZURE_RESOURCE_GROUP`: The Azure resource group that will hold all resources belonging to the cluster: VMs, load balancers, virtual networks, subnets, etc.. Typically you will create a resource group for every OpenShift cluster you provision. - `AZURE_LOCATION`: The Azure location of the resource group, for example `useast` or `westeurope`. -- `AZURE_SP`: Azure service principal that is used to create the resources on Azure. Typically you will use a service principal for every OpenShift cluster you provision. - -Example: -```bash -export ENV_ID=pluto-01 -export AZURE_SUBSCRIPTION_ID=72281667-6d54-46cb-8423-792d7bcb1234 -export AZURE_RESOURCE_GROUP=${ENV_ID}-rg -export AZURE_LOCATION=uksouth -export AZURE_SP=${ENV_ID}-sp -``` - -### Create resource group, service principal and set permissions - -First the resource group must be created; this must be the same resource group as specified under `azure.resource_group.name` in the configuration file. -```bash -az group create \ - --name ${AZURE_RESOURCE_GROUP} \ - --location ${AZURE_LOCATION} -``` - -```output -{ - "id": "/subscriptions/72281667-6d54-46cb-8423-792d7bcb1234/resourceGroups/pluto-01-rg", - "location": "uksouth", - "managedBy": null, - "name": "pluto-01-rg", - "properties": { - "provisioningState": "Succeeded" - }, - "tags": null, - "type": "Microsoft.Resources/resourceGroups" -} -``` +- `AZURE_SP`: Azure service principal that is used to create the resources on Azure. You will get the service principal from the Azure administrator. -Then, create the service principal that will do the installation and assign the `Contributor role` -```bash -az ad sp create-for-rbac \ - --role Contributor \ - --name ${AZURE_SP} \ - --scopes /subscriptions/${AZURE_SUBSCRIPTION_ID} > /tmp/${AZURE_SP}-credentials.json -``` +## Store Service Principal credentials -If you only have Contributor access to a resource group, you must specify the resource group scope instead: -```bash -az ad sp create-for-rbac \ - --role Contributor \ - --name ${AZURE_SP} \ - --scopes /subscriptions/${AZURE_SUBSCRIPTION_ID}/resourceGroups/pluto-01-rg > /tmp/${AZURE_SP}-credentials.json -``` +You must run the OpenShift installation using an Azure Service Principal with sufficient permissions. The Azure account administrator will share the SP credentials as a JSON file. Example output in credentials file: ```output @@ -170,83 +83,68 @@ Example output in credentials file: } ``` -Finally, set the permissions of the service principal to allow creation of the OpenShift cluster -```bash -az role assignment create \ - --role "User Access Administrator" \ - --scope /subscriptions/${AZURE_SUBSCRIPTION_ID} \ - --assignee-principal-type ServicePrincipal \ - --assignee-object-id $(az ad sp list --display-name=${AZURE_SP} --query='[].id' -o tsv) -``` +Store this file as `/tmp/${AZURE_SP}-credentials.json`. -If you do not have permissions to list service principals, you can also run the following commands: -```bash -export AZURE_SP_ID=$(jq -r .appId /tmp/${AZURE_SP}-credentials.json) -az role assignment create \ - --role "User Access Administrator" \ - --scope /subscriptions/${AZURE_SUBSCRIPTION_ID} \ - --assignee-principal-type ServicePrincipal \ - --assignee-object-id $(az ad sp show --id ${AZURE_SP_ID} --query='id' -o tsv) -``` - -## Prepare for running +If you have subscription-level access you can also create the Service Principal yourself. See steps in [Create Azure service principal](./azure-service-principal.md). -### Set environment variables for deployer +## Login as Service Principal +Login as the service principal: ``` -export CP_ENTITLEMENT_KEY=your_cp_entitlement_key +az login --service-principal -u a4c39ae9-f9d1-4038-b4a4-ab011e769111 -p xyz-xyz --tenant 869930ac-17ee-4dda-bbad-7354c3e7629c8 ``` -- `CP_ENTITLEMENT_KEY`: This is the entitlement key you acquired as per the instructions above, this is a 80+ character string +## Create the resource group -### Set deployer status directory -Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. - -``` -export STATUS_DIR=$HOME/cpd-status +First the resource group must be created; this resource group must match the one configured in your OpenShift yaml config file. +```bash +az group create \ + --name ${AZURE_RESOURCE_GROUP} \ + --location ${AZURE_LOCATION} ``` -- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. **Please note** that if you have chosen to use a File Vault, the properties file is keps under the `vault` directory within the status directory. If you don't specify a status directory, it is assumted to be `$HOME/cpd-status`. +# 3. Acquire an IBM Cloud Pak Entitlement Key -### Set deployer configuration location -You can use a local directory to hold the deployer configuration or retrieve the configuration from a GitHub repository. If you don't specify any configuration directory or GitHub repository, the configuration directory are assumed to be `$HOME/cpd-config`. -``` -export CONFIG_DIR=$HOME/cpd-config -``` +If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. + +- Navigate to https://myibm.ibm.com/products-services/containerlibrary and login with your IBMId credentials +- Select **Get Entitlement Key** and create a new key (or copy your existing key) +- Copy the key value -- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory. +!!! warning + As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. -Or, when using a GitHub repository for the configuration. -``` -export CPD_CONFIG_GIT_REPO="https://github.com/IBM/cloud-pak-deployer-config.git" -export CPD_CONFIG_GIT_REF="main" -export CPD_CONFIG_GIT_CONTEXT="" -``` +## Acquire an OpenShift pull secret + +To install OpenShift you need an OpenShift pull secret which holds your entitlement. -- `CPD_CONFIG_GIT_REPO`: The clone URL of the GitHub repository that holds the configuration. -- `CPD_CONFIG_GIT_REF`: The branch, tag or commit ID to be cloned. If not specified, the repository's default branch will be cloned. -- `CPD_CONFIG_GIT_CONTEXT`: The directory within the GitHub repository that holds the configuration. This directory must contain the `config` directory under which the YAML files are kept. +- Navigate to https://console.redhat.com/openshift/install/pull-secret and download the pull secret into file `/tmp/ocp_pullsecret.json` -!!! info - When specifying a GitHub repository, the contents will be copied under `$STATUS_DIR/cpd-config` and this directory is then set as the configuration directory. +# 4. Set environment variables for Azure self-managed -### Create the secrets needed for Azure deployment +### Create the secrets needed for self-managed deployment -You need to store the below secrets in the vault so that the deployer has access to them when installing self-managed OpenShift cluster on Azure. +You need to store the OpenShift pull secret and service principal credentials in the vault so that the deployer has access to it. ``` ./cp-deploy.sh vault set \ --vault-secret ocp-pullsecret \ --vault-secret-file /tmp/ocp_pullsecret.json + ./cp-deploy.sh vault set \ --vault-secret ${AZURE_SP}-credentials \ --vault-secret-file /tmp/${AZURE_SP}-credentials.json +``` + +# 5. Run the deployer + +## Optional: validate the configuration + +If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. -# Optional if you would like to use your own public key -./cp-deploy.sh vault set \ - --vault-secret ocp-ssh-pub-key \ - --vault-secret-file ~/.ssh/id_rsa.pub +``` +./cp-deploy.sh env apply --check-only --accept-all-licenses ``` ## Run the Cloud Pak Deployer @@ -254,10 +152,10 @@ You need to store the below secrets in the vault so that the deployer has access To run the container using a local configuration input directory and a data directory where temporary and state is kept, use the example below. If you don't specify the status directory, the deployer will automatically create a temporary directory. Please note that the status directory will also hold secrets if you have configured a flat file vault. If you lose the directory, you will not be able to make changes to the configuration and adjust the deployment. It is best to specify a permanent directory that you can reuse later. If you specify an existing directory the current user **must** be the owner of the directory. Failing to do so may cause the container to fail with insufficient permissions. ``` -./cp-deploy.sh env apply [--accept-all-licenses] +./cp-deploy.sh env apply --accept-all-licenses ``` -For more information about the extra (dynamic) variables, see [advanced configuration](../../../50-advanced/advanced-configuration). +You can also specify extra variables such as `env_id` to override the names of the objects referenced in the `.yaml` configuration files as `{{ env_id }}-xxxx`. For more information about the extra (dynamic) variables, see [advanced configuration](../../../50-advanced/advanced-configuration). The `--accept-all-licenses` flag is optional and confirms that you accept all licenses of the installed cartridges and instances. Licenses must be either accepted in the configuration files or at the command line. @@ -269,7 +167,7 @@ You can return to view the logs as follows: ./cp-deploy.sh env logs ``` -Deploying the infrastructure, preparing OpenShift and installing the Cloud Pak will take a long time, typically between 1-5 hours, dependent on which Cloud Pak cartridges you configured. For estimated duration of the steps, refer to [Timings](../../../30-reference/timings). +Deploying the infrastructure, preparing OpenShift and installing the Cloud Pak will take a long time, typically between 1-5 hours,dependent on which Cloud Pak cartridges you configured. For estimated duration of the steps, refer to [Timings](../../../30-reference/timings). If you need to interrupt the automation, use CTRL-C to stop the logging output and then use: @@ -277,9 +175,28 @@ If you need to interrupt the automation, use CTRL-C to stop the logging output a ./cp-deploy.sh env kill ``` +## On failure + +If the Cloud Pak Deployer fails, for example because certain infrastructure components are temporarily not available, fix the cause if needed and then just re-run it with the same `CONFIG_DIR` and `STATUS_DIR` as well extra variables. The provisioning process has been designed to be idempotent and it will not redo actions that have already completed successfully. + ## Finishing up -Once the process has finished, it will output the URLs by which you can access the deployed Cloud Pak. You can also find this information under the `cloud-paks` directory in the status directory you specified. The `admin` password can be retrieved from the vault as follows: +Once the process has finished, it will output the URLs by which you can access the deployed Cloud Pak. You can also find this information under the `cloud-paks` directory in the status directory you specified. + +To retrieve the Cloud Pak URL(s): + +``` +cat $STATUS_DIR/cloud-paks/* +``` + +This will show the Cloud Pak URLs: + +```output +Cloud Pak for Data URL for cluster pluto-01 and project cpd (domain name specified was example.com): +https://cpd-cpd.apps.pluto-01.example.com +``` + +The `admin` password can be retrieved from the vault as follows: List the secrets in the vault: diff --git a/docs/src/10-use-deployer/3-run/azure-service-principal.md b/docs/src/10-use-deployer/3-run/azure-service-principal.md new file mode 100644 index 000000000..fc8b59f3a --- /dev/null +++ b/docs/src/10-use-deployer/3-run/azure-service-principal.md @@ -0,0 +1,103 @@ +# Create an Azure Service Principal + +## Login to Azure +Login to the Microsoft Azure using your subscription-level credentials. +``` +az login +``` + +If you have a subscription with multiple tenants, use: +``` +az login --tenant +``` + +Example: +```bash +az login --tenant 869930ac-17ee-4dda-bbad-7354c3e7629c8 +To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AXWFQQ5FJ to authenticate. +[ + { + "cloudName": "AzureCloud", + "homeTenantId": "869930ac-17ee-4dda-bbad-7354c3e7629c8", + "id": "72281667-6d54-46cb-8423-792d7bcb1234", + "isDefault": true, + "managedByTenants": [], + "name": "Azure Account", + "state": "Enabled", + "tenantId": "869930ac-17ee-4dda-bbad-7354c3e7629c8", + "user": { + "name": "your_user@domain.com", + "type": "user" + } + } +] +``` + +## Set subscription (optional) + +If you have multiple Azure subscriptions, specify the relevant subscription ID: `az account set --subscription ` + +You can list the subscriptions via command: +```bash +az account subscription list +``` + +```output +[ + { + "authorizationSource": "RoleBased", + "displayName": "IBM xxx", + "id": "/subscriptions/dcexxx", + "state": "Enabled", + "subscriptionId": "dcexxx", + "subscriptionPolicies": { + "locationPlacementId": "Public_2014-09-01", + "quotaId": "EnterpriseAgreement_2014-09-01", + "spendingLimit": "Off" + } + } +] +``` + +## Create service principal + +Create the service principal that will do the installation and assign the `Contributor role` + +### Set environment variables for Azure + +```bash +export AZURE_SUBSCRIPTION_ID=72281667-6d54-46cb-8423-792d7bcb1234 +export AZURE_LOCATION=westeurope +export AZURE_SP=pluto-01-sp +``` + +- `AZURE_SUBSCRIPTION_ID`: The id of your Azure subscription. Once logged in, you can retrieve this using the `az account show` command. +- `AZURE_LOCATION`: The Azure location of the resource group, for example `useast` or `westeurope`. +- `AZURE_SP`: Azure service principal that is used to create the resources on Azure. + +### Create the service principal +```bash +az ad sp create-for-rbac \ + --role Contributor \ + --name ${AZURE_SP} \ + --scopes /subscriptions/${AZURE_SUBSCRIPTION_ID} | tee /tmp/${AZURE_SP}-credentials.json +``` + +Example output: +```output +{ + "appId": "a4c39ae9-f9d1-4038-b4a4-ab011e769111", + "displayName": "pluto-01-sp", + "password": "xyz-xyz", + "tenant": "869930ac-17ee-4dda-bbad-7354c3e7629c8" +} +``` + +### Set permissions for service principal + +Finally, set the permissions of the service principal to allow creation of the OpenShift cluster +```bash +az role assignment create \ + --role "User Access Administrator" \ + --assignee-object-id $(az ad sp list --display-name=${AZURE_SP} --query='[].id' -o tsv) +``` From 468c282fc379cff19aac5a212cf17989375c8a54 Mon Sep 17 00:00:00 2001 From: Frank Ketelaars Date: Sun, 22 Oct 2023 12:23:58 +0200 Subject: [PATCH 7/9] #537 Simplify deployment steps documentation --- docs/dev-doc-run.sh | 12 +- docs/mkdocs.yml | 1 + docs/requirements.txt | 1 + .../10-use-deployer/1-overview/overview.md | 3 +- docs/src/10-use-deployer/3-run/aws-rosa.md | 45 ++--- .../10-use-deployer/3-run/aws-self-managed.md | 71 ++++---- docs/src/10-use-deployer/3-run/azure-aro.md | 53 +++--- .../3-run/azure-self-managed.md | 74 ++++++--- .../3-run/existing-openshift.md | 132 ++++++++------- docs/src/10-use-deployer/3-run/ibm-cloud.md | 120 +++++++------ docs/src/10-use-deployer/3-run/vsphere.md | 157 +++++++++--------- .../80-development/doc-development-setup.md | 2 +- 12 files changed, 378 insertions(+), 293 deletions(-) diff --git a/docs/dev-doc-run.sh b/docs/dev-doc-run.sh index 70e40a211..a53f063e6 100755 --- a/docs/dev-doc-run.sh +++ b/docs/dev-doc-run.sh @@ -1,5 +1,13 @@ #!/bin/bash +SELINUX_OPTION="" +if hash getenforce 2>/dev/null; then + SELINUXSTATUS=$(getenforce) + if [ "$SELINUXSTATUS" != "Disabled" ]; then + SELINUX_OPTION=":z" + fi +fi + podman rm -f cpd-doc 2>/dev/null -podman run --name cpd-doc -d -p 8000:8000 -v $PWD:/docs:Z cpd-doc:latest -podman logs -fl \ No newline at end of file +PROCESS=$(podman run --name cpd-doc -d -p 8000:8000 -v $PWD:/docs${SELINUX_OPTION} cpd-doc:latest) +podman logs -f ${PROCESS} \ No newline at end of file diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 9d8f885dc..7c88a952a 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -127,6 +127,7 @@ extra_css: plugins: - search - table-reader + - open-in-new-tab # - git-revision-date-localized: # fallback_to_build_date: true # - git-authors diff --git a/docs/requirements.txt b/docs/requirements.txt index 757ed7843..c33c9df48 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -6,6 +6,7 @@ mkdocs-material==8.5.3 mkdocs-material-extensions==1.0.3 mkdocs-mermaid-plugin==0.1.1 mkdocs-minify-plugin==0.5.0 +mkdocs-open-in-new-tab mkdocs-pdf-export-plugin==0.5.10 mkdocs-table-reader-plugin==1.1.0 mkdocs-enumerate-headings-plugin==0.5.0 diff --git a/docs/src/10-use-deployer/1-overview/overview.md b/docs/src/10-use-deployer/1-overview/overview.md index 29a9794fe..7c9c77d27 100644 --- a/docs/src/10-use-deployer/1-overview/overview.md +++ b/docs/src/10-use-deployer/1-overview/overview.md @@ -4,8 +4,7 @@ There are 3 main steps you need to perform to provision an OpenShift cluster with the desired Cloud Pak(s): 1. [Install the Cloud Pak Deployer](../../../05-install/install) -2. [Configure the environment you want to deploy](../../../10-use-deployer/2-configure/configure) -3. [Run the Cloud Pak Deployer to create the cluster and install the Cloud Pak](../../../10-use-deployer/3-run/run) +2. [Run the Cloud Pak Deployer to create the cluster and install the Cloud Pak](../../../10-use-deployer/3-run/run) ## What will I need? To complete the deployment, you will or may need the following. Details will be provided when you need them. diff --git a/docs/src/10-use-deployer/3-run/aws-rosa.md b/docs/src/10-use-deployer/3-run/aws-rosa.md index e618276e2..87711beb8 100644 --- a/docs/src/10-use-deployer/3-run/aws-rosa.md +++ b/docs/src/10-use-deployer/3-run/aws-rosa.md @@ -2,11 +2,12 @@ On Amazon Web Services (AWS), OpenShift can be set up in various ways, managed by Red Hat (ROSA) or self-managed. The steps below are applicable to the ROSA (Red Hat OpenShift on AWS) installation. More information about ROSA can be found here: https://aws.amazon.com/rosa/ -There are 5 main steps to run the deployer for AWS (ROSA): +There are 5 main steps to run the deployer for AWS: + 1. [Configure deployer](#1-configure-deployer) -2. [Prepare the AWS cloud environment](#2-prepare-the-aws-cloud-environment) -3. [Obtain Cloud Pak entitlement key](#3-acquire-an-ibm-cloud-pak-entitlement-key) -4. [Set environment variables](#4-set-environment-variables-for-aws-rosa) +2. [Prepare the cloud environment](#2-prepare-the-cloud-environment) +3. [Obtain entitlement keys and secrets](#3-acquire-entitlement-keys-and-secrets) +4. [Set environment variables and secrets](#4-set-environment-variables-and-secrets) 5. [Run the deployer](#5-run-the-deployer) ## Topology @@ -16,9 +17,9 @@ A typical setup of the ROSA cluster is pictured below: When deploying ROSA, an external host name and domain name are automatically generated by Amazon Web Services and both the API and Ingress servers can be resolved by external clients. At this stage, one cannot configure the domain name to be used. -# 1. Configure deployer +## 1. Configure deployer -## Deployer configuration and status directories +### Deployer configuration and status directories Deployer reads the configuration from a directory you set in the `CONFIG_DIR` environment variable. A status directory (`STATUS_DIR` environment variable) is used to log activities, store temporary files, scripts. If you use a File Vault (default), the secrets are kept in the `$STATUS_DIR/vault` directory. You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). For ROSA installations, copy one of `ocp-aws-rosa-*.yaml` files into the `$CONFIG_DIR/config` directory. If you also want to install a Cloud Pak, copy one of the `cp4*.yaml` files. @@ -30,7 +31,7 @@ cp sample-configurations/sample-dynamic/config-samples/ocp-aws-rosa-elastic.yaml cp sample-configurations/sample-dynamic/config-samples/cp4d-471.yaml $HOME/cpd-config/config/ ``` -## Set configuration and status directories environment variables +### Set configuration and status directories environment variables Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. ``` @@ -41,15 +42,15 @@ export STATUS_DIR=$HOME/cpd-status - `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory which contains the configuration `yaml` files. - `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. -### Optional: advanced configuration +#### Optional: advanced configuration If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). -# 2. Prepare the AWS Cloud environment +## 2. Prepare the cloud environment -## Enable ROSA on AWS +### Enable ROSA on AWS Before you can use ROSA on AWS, you have to enable it if this has not been done already. This can be done as follows: @@ -58,7 +59,7 @@ Before you can use ROSA on AWS, you have to enable it if this has not been done - Search for **ROSA service** - Click **Enable OpenShift** -## Obtain the AWS IAM credentials +### Obtain the AWS IAM credentials You will need an **Access Key ID** and **Secret Access Key** for the deployer to run `rosa` commands. @@ -69,7 +70,7 @@ You will need an **Access Key ID** and **Secret Access Key** for the deployer to - If you do not yet have an access key (or you no longer have the associated secret), create an access key - Store your **Access Key ID** and **Secret Access Key** in safe place -### Alternative: Using temporary AWS security credentials (STS) +#### Alternative: Using temporary AWS security credentials (STS) If your account uses temporary security credentials for AWS resources, you must use the **Access Key ID**, **Secret Access Key** and **Session Token** associated with your temporary credentials. @@ -95,7 +96,7 @@ export AWS_SESSION_TOKEN=IQxxxxxxxxxxxxxbfQ You must set the `infrastructure.use_sts` to `True` in the `openshift` configuration if you need to use the temporary security credentials. Cloud Pak Deployer will then run the `rosa create cluster` command with the appropriate flag. -## Obtain your ROSA login token +### Obtain your ROSA login token To run `rosa` commands to manage the cluster, the deployer requires the ROSA login token. @@ -103,7 +104,7 @@ To run `rosa` commands to manage the cluster, the deployer requires the ROSA log - Login with your Red Hat user ID and password. If you don't have one yet, you need to create it. - Copy the offline access token presented on the screen and store it in a safe place. -## If ROSA is already installed +### If ROSA is already installed This scenario is supported. To enable this feature, please ensure that you take the following steps: @@ -116,7 +117,7 @@ This scenario is supported. To enable this feature, please ensure that you take Without these changes, sthe cloud player will fail and you will receive the following error message: "Failed to get the cluster-admin password from the vault". -# 3. Acquire an IBM Cloud Pak Entitlement Key +## 3. Acquire entitlement keys and secrets If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. @@ -127,7 +128,7 @@ If you want to pull the Cloud Pak images from the entitled registry (i.e. an onl !!! warning As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. -# 4. Set environment variables for AWS ROSA +## 4. Set environment variables and secrets ``` export AWS_ACCESS_KEY_ID=your_access_key @@ -150,9 +151,9 @@ export AWS_SESSION_TOKEN=your_session_token !!! warning If your `AWS_SESSION_TOKEN` is expires while the deployer is still running, the deployer may end abnormally. In such case, you can just issue new temporary credentials (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` and `AWS_SESSION_TOKEN`) and restart the deployer. Alternatively, you can update the 3 vault secrets, respectively `aws-access-key`, `aws-secret-access-key` and `aws-session-token` with new values as they are re-retrieved by the deployer on a regular basis. -# 5. Run the deployer +## 5. Run the deployer -## Optional: validate the configuration +### Optional: validate the configuration If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. @@ -160,7 +161,7 @@ If you only want to validate the configuration, you can run the dpeloyer with th ./cp-deploy.sh env apply --check-only --accept-all-licenses ``` -## Run the Cloud Pak Deployer +### Run the Cloud Pak Deployer To run the container using a local configuration input directory and a data directory where temporary and state is kept, use the example below. If you don't specify the status directory, the deployer will automatically create a temporary directory. Please note that the status directory will also hold secrets if you have configured a flat file vault. If you lose the directory, you will not be able to make changes to the configuration and adjust the deployment. It is best to specify a permanent directory that you can reuse later. If you specify an existing directory the current user **must** be the owner of the directory. Failing to do so may cause the container to fail with insufficient permissions. @@ -188,11 +189,11 @@ If you need to interrupt the automation, use CTRL-C to stop the logging output a ./cp-deploy.sh env kill ``` -## On failure +### On failure If the Cloud Pak Deployer fails, for example because certain infrastructure components are temporarily not available, fix the cause if needed and then just re-run it with the same `CONFIG_DIR` and `STATUS_DIR` as well extra variables. The provisioning process has been designed to be idempotent and it will not redo actions that have already completed successfully. -## Finishing up +### Finishing up Once the process has finished, it will output the URLs by which you can access the deployed Cloud Pak. You can also find this information under the `cloud-paks` directory in the status directory you specified. @@ -242,5 +243,5 @@ included: /cloud-pak-deployer/automation-roles/99-generic/vault/vault-get-secret cp4d_admin_zen_40_pluto_01: gelGKrcgaLatBsnAdMEbmLwGr ``` -## Post-install configuration +### Post-install configuration You can find examples of a couple of typical changes you may want to do here: [Post-run changes](../../../10-use-deployer/5-post-run/post-run). diff --git a/docs/src/10-use-deployer/3-run/aws-self-managed.md b/docs/src/10-use-deployer/3-run/aws-self-managed.md index bcd476851..d4a05ed59 100644 --- a/docs/src/10-use-deployer/3-run/aws-self-managed.md +++ b/docs/src/10-use-deployer/3-run/aws-self-managed.md @@ -2,11 +2,12 @@ On Amazon Web Services (AWS), OpenShift can be set up in various ways, self-managed or managed by Red Hat (ROSA). The steps below are applicable to a self-managed OpenShift installation. The IPI (Installer Provisioned Infrastructure) installer will be used. More information about IPI installation can be found here: https://docs.openshift.com/container-platform/4.12/installing/installing_aws/installing-aws-customizations.html. -There are 5 main steps to run the deploye for AWS (ROSA): +There are 5 main steps to run the deploye for AWS: + 1. [Configure deployer](#1-configure-deployer) -2. [Prepare the AWS cloud environment](#2-prepare-the-aws-cloud-environment) -3. [Obtain Cloud Pak entitlement key](#3-acquire-an-ibm-cloud-pak-entitlement-key) -4. [Set environment variables](#4-set-environment-variables-for-aws-self-managed-openshift-cluster) +2. [Prepare the cloud environment](#2-prepare-the-cloud-environment) +3. [Obtain entitlement keys and secrets](#3-acquire-entitlement-keys-and-secrets) +4. [Set environment variables and secrets](#4-set-environment-variables-and-secrets) 5. [Run the deployer](#5-run-the-deployer) See the deployer in action in this video: https://ibm.box.com/v/cpd-aws-self-managed @@ -16,7 +17,7 @@ See the deployer in action in this video: https://ibm.box.com/v/cpd-aws-self-man A typical setup of the self-managed OpenShift cluster is pictured below: ![AWS self-managed OpenShift](images/aws-self-managed-ocs.png) -## Single-node OpenShift (SNO) on AWS +### Single-node OpenShift (SNO) on AWS Red Hat OpenShift also supports single-node deployments in which control plane and compute are combined into a single node. Obviously, this type of configuration does not cater for any high availability requirements that are usually part of a production installation, but it does offer a more cost-efficient option for development and testing purposes. Cloud Pak Deployer can deploy a single-node OpenShift with elastic storage and a sample configuration is provided as part of the deployer. @@ -24,9 +25,9 @@ Cloud Pak Deployer can deploy a single-node OpenShift with elastic storage and a !!! warning When deploying the IBM Cloud Paks on single-node OpenShift, there may be intermittent timeouts as pods are starting up. In those cases, just re-run the deployer with the same configuration and check status of the pods. -# 1. Configure deployer +## 1. Configure deployer -## Deployer configuration and status directories +### Deployer configuration and status directories Deployer reads the configuration from a directory you set in the `CONFIG_DIR` environment variable. A status directory (`STATUS_DIR` environment variable) is used to log activities, store temporary files, scripts. If you use a File Vault (default), the secrets are kept in the `$STATUS_DIR/vault` directory. You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). For self-managed OpenShift installations, copy one of `ocp-aws-self-managed-*.yaml` files into the `$CONFIG_DIR/config` directory. If you also want to install a Cloud Pak, copy one of the `cp4*.yaml` files. @@ -38,7 +39,7 @@ cp sample-configurations/sample-dynamic/config-samples/ocp-aws-self-managed-elas cp sample-configurations/sample-dynamic/config-samples/cp4d-471.yaml $HOME/cpd-config/config/ ``` -## Set configuration and status directories environment variables +### Set configuration and status directories environment variables Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. ``` @@ -49,20 +50,20 @@ export STATUS_DIR=$HOME/cpd-status - `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory which contains the configuration `yaml` files. - `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. -### Optional: advanced configuration +#### Optional: advanced configuration If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). -# 2. Prepare the AWS Cloud environment +## 2. Prepare the cloud environment -## Configure Route53 service on AWS +### Configure Route53 service on AWS When deploying a self-managed OpenShift on Amazon web Services, a public hosted zone must be created in the same account as your OpenShift cluster. The domain name or subdomain name registered in the Route53 service must be specifed in the `openshift` configuration of the deployer. For more information on acquiring or specifying a domain on AWS, you can refer to https://github.com/openshift/installer/blob/master/docs/user/aws/route53.md. -## Obtain the AWS IAM credentials +### Obtain the AWS IAM credentials If you can use your permanent security credentials for the AWS account, you will need an **Access Key ID** and **Secret Access Key** for the deployer to setup an OpenShift cluster on AWS. @@ -73,7 +74,7 @@ If you can use your permanent security credentials for the AWS account, you will - If you do not yet have an access key (or you no longer have the associated secret), create an access key - Store your **Access Key ID** and **Secret Access Key** in safe place -## Alternative: Using temporary AWS security credentials (STS) +### Alternative: Using temporary AWS security credentials (STS) If your account uses temporary security credentials for AWS resources, you must use the **Access Key ID**, **Secret Access Key** and **Session Token** associated with your temporary credentials. @@ -99,7 +100,9 @@ export AWS_SESSION_TOKEN=IQxxxxxxxxxxxxxbfQ If the `openshift` configuration has the `infrastructure.credentials_mode` set to `Manual`, Cloud Pak Deployer will automatically configure and run the Cloud Credential Operator utility. -# 3. Acquire an IBM Cloud Pak Entitlement Key +## 3. Acquire entitlement keys and secrets + +### Acquire IBM Cloud Pak entitlement key If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. @@ -110,21 +113,30 @@ If you want to pull the Cloud Pak images from the entitled registry (i.e. an onl !!! warning As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. -## Acquire an OpenShift pull secret +### Acquire an OpenShift pull secret To install OpenShift you need an OpenShift pull secret which holds your entitlement. - Navigate to https://console.redhat.com/openshift/install/pull-secret and download the pull secret into file `/tmp/ocp_pullsecret.json` -## Optional: Locate or generate a public SSH Key -To obtain access to the OpenShift nodes post-installation, you will need to specify the public SSH key of your server; typically this is `~/.ssh/id_rsa.pub`, where `~` is the home directory of your user. If you don't have an SSH key-pair yet, you can generate one using the steps documented here: https://docs.openshift.com/container-platform/4.12/installing/installing_aws/installing-aws-customizations.html#ssh-agent-using_installing-aws-customizations. Alternatively, deployer can generate SSH key-pair automatically if credential `ocp-ssh-pub-key` is not in the vault. +### Optional: Locate or generate a public SSH Key +To obtain access to the OpenShift nodes post-installation, you will need to specify the public SSH key of your server; typically this is `~/.ssh/id_rsa.pub`, where `~` is the home directory of your user. If you don't have an SSH key-pair yet, you can generate one using the steps documented here: https://cloud.ibm.com/docs/ssh-keys?topic=ssh-keys-generating-and-using-ssh-keys-for-remote-host-authentication#generating-ssh-keys-on-linux. Alternatively, deployer can generate SSH key-pair automatically if credential `ocp-ssh-pub-key` is not in the vault. + +## 4. Set environment variables and secrets + +### Set the Cloud Pak entitlement key +If you want the Cloud Pak images to be pulled from the entitled registry, set the Cloud Pak entitlement key. + +``` +export CP_ENTITLEMENT_KEY=your_cp_entitlement_key +``` -# 4. Set environment variables for AWS self-managed OpenShift cluster +- `CP_ENTITLEMENT_KEY`: This is the entitlement key you acquired as per the instructions above, this is a 80+ character string. **You don't need to set this environment variable when you install the Cloud Pak(s) from a private registry** +### Set the environment variables for AWS self-managed OpenShift deployment ``` export AWS_ACCESS_KEY_ID=your_access_key export AWS_SECRET_ACCESS_KEY=your_secret_access_key -export CP_ENTITLEMENT_KEY=your_cp_entitlement_key ``` Optional: If your user does not have permanent administrator access but using temporary credentials, you can set the `AWS_SESSION_TOKEN` to be used for the AWS CLI. @@ -135,12 +147,11 @@ export AWS_SESSION_TOKEN=your_session_token - `AWS_ACCESS_KEY_ID`: This is the AWS Access Key you retrieved above, often this is something like `AK1A2VLMPQWBJJQGD6GV` - `AWS_SECRET_ACCESS_KEY`: The secret associated with your AWS Access Key, also retrieved above - `AWS_SESSION_TOKEN`: The session token that will grant temporary elevated permissions -- `CP_ENTITLEMENT_KEY`: This is the entitlement key you acquired as per the instructions above, this is a 80+ character string !!! warning If your `AWS_SESSION_TOKEN` is expires while the deployer is still running, the deployer may end abnormally. In such case, you can just issue new temporary credentials (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` and `AWS_SESSION_TOKEN`) and restart the deployer. Alternatively, you can update the 3 vault secrets, respectively `aws-access-key`, `aws-secret-access-key` and `aws-session-token` with new values as they are re-retrieved by the deployer on a regular basis. -## Create the secrets needed for self-managed OpenShift cluster +### Create the secrets needed for self-managed OpenShift cluster You need to store the below credentials in the vault so that the deployer has access to them when installing self-managed OpenShift cluster on AWS. @@ -148,16 +159,20 @@ You need to store the below credentials in the vault so that the deployer has ac ./cp-deploy.sh vault set \ --vault-secret ocp-pullsecret \ --vault-secret-file /tmp/ocp_pullsecret.json +``` + +### Optional: Create secret for public SSH key -# Optional if you would like to use your own public key +If you want to use your SSH key to access nodes in the cluster, set the Vault secret with the public SSH key. +``` ./cp-deploy.sh vault set \ --vault-secret ocp-ssh-pub-key \ --vault-secret-file ~/.ssh/id_rsa.pub ``` -# 5. Run the deployer +## 5. Run the deployer -## Optional: validate the configuration +### Optional: validate the configuration If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. @@ -165,7 +180,7 @@ If you only want to validate the configuration, you can run the dpeloyer with th ./cp-deploy.sh env apply --check-only --accept-all-licenses ``` -## Run the Cloud Pak Deployer +### Run the Cloud Pak Deployer To run the container using a local configuration input directory and a data directory where temporary and state is kept, use the example below. If you don't specify the status directory, the deployer will automatically create a temporary directory. Please note that the status directory will also hold secrets if you have configured a flat file vault. If you lose the directory, you will not be able to make changes to the configuration and adjust the deployment. It is best to specify a permanent directory that you can reuse later. If you specify an existing directory the current user **must** be the owner of the directory. Failing to do so may cause the container to fail with insufficient permissions. @@ -193,11 +208,11 @@ If you need to interrupt the automation, use CTRL-C to stop the logging output a ./cp-deploy.sh env kill ``` -## On failure +### On failure If the Cloud Pak Deployer fails, for example because certain infrastructure components are temporarily not available, fix the cause if needed and then just re-run it with the same `CONFIG_DIR` and `STATUS_DIR` as well extra variables. The provisioning process has been designed to be idempotent and it will not redo actions that have already completed successfully. -## Finishing up +### Finishing up Once the process has finished, it will output the URLs by which you can access the deployed Cloud Pak. You can also find this information under the `cloud-paks` directory in the status directory you specified. @@ -248,5 +263,5 @@ included: /cloud-pak-deployer/automation-roles/99-generic/vault/vault-get-secret cp4d_admin_zen_40_pluto_01: gelGKrcgaLatBsnAdMEbmLwGr ``` -## Post-install configuration +### Post-install configuration You can find examples of a couple of typical changes you may want to do here: [Post-run changes](../../../10-use-deployer/5-post-run/post-run). \ No newline at end of file diff --git a/docs/src/10-use-deployer/3-run/azure-aro.md b/docs/src/10-use-deployer/3-run/azure-aro.md index 66babcdf7..a487d2c60 100644 --- a/docs/src/10-use-deployer/3-run/azure-aro.md +++ b/docs/src/10-use-deployer/3-run/azure-aro.md @@ -2,11 +2,12 @@ On Azure, OpenShift can be set up in various ways, managed by Red Hat (ARO) or self-managed. The steps below are applicable to the ARO (Azure Red Hat OpenShift). -There are 5 main steps to run the deployer for Azure (ARO): +There are 5 main steps to run the deployer for Azure: + 1. [Configure deployer](#1-configure-deployer) -2. [Prepare the Azure cloud environment](#2-prepare-the-azure-cloud-environment) -3. [Obtain Cloud Pak entitlement key](#3-acquire-an-ibm-cloud-pak-entitlement-key) -4. [Set environment variables](#4-set-environment-variables-for-azure-aro) +2. [Prepare the cloud environment](#2-prepare-the-cloud-environment) +3. [Obtain entitlement keys and secrets](#3-acquire-entitlement-keys-and-secrets) +4. [Set environment variables and secrets](#4-set-environment-variables-and-secrets) 5. [Run the deployer](#5-run-the-deployer) ## Topology @@ -16,9 +17,9 @@ A typical setup of the ARO cluster is pictured below: When deploying ARO, you can configure the domain name by setting the `openshift.domain_name` attribute. The resulting domain name is managed by Azure, and it must be unique across all ARO instances deployed in Azure. Both the API and Ingress urls are set to be public in the template, so they can be resolved by external clients. If you want to use a custom domain and don't have one yet, you buy one from Azure: https://learn.microsoft.com/en-us/azure/app-service/manage-custom-dns-buy-domain. -# 1. Configure deployer +## 1. Configure deployer -## Deployer configuration and status directories +### Deployer configuration and status directories Deployer reads the configuration from a directory you set in the `CONFIG_DIR` environment variable. A status directory (`STATUS_DIR` environment variable) is used to log activities, store temporary files, scripts. If you use a File Vault (default), the secrets are kept in the `$STATUS_DIR/vault` directory. You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). For ARO installations, copy one of `ocp-azure-aro*.yaml` files into the `$CONFIG_DIR/config` directory. If you also want to install a Cloud Pak, copy one of the `cp4*.yaml` files. @@ -30,7 +31,7 @@ cp sample-configurations/sample-dynamic/config-samples/ocp-azure-aro.yaml $HOME/ cp sample-configurations/sample-dynamic/config-samples/cp4d-471.yaml $HOME/cpd-config/config/ ``` -## Set configuration and status directories environment variables +### Set configuration and status directories environment variables Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. ``` @@ -41,23 +42,23 @@ export STATUS_DIR=$HOME/cpd-status - `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory which contains the configuration `yaml` files. - `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. -### Optional: advanced configuration +#### Optional: advanced configuration If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). -# 2. Prepare the Azure Cloud environment +## 2. Prepare the cloud environment -## Install the Azure CLI tool +### Install the Azure CLI tool [Install Azure CLI tool](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=dnf), and run the commands in your operating system. -## Verify your quota and permissions in Microsoft Azure +### Verify your quota and permissions in Microsoft Azure - Check [Azure resource quota](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#before-you-begin) of the subscription - Azure Red Hat OpenShift requires a minimum of 40 cores to create and run an OpenShift cluster. - The ARO cluster is provisioned using the `az` command. Ideally, one has to have `Contributor` permissions on the subscription (Azure resources) and `Application administrator` role assigned in the Azure Active Directory. See details [here](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#verify-your-permissions). -### Set environment variables for Azure +#### Set environment variables for Azure ```bash export AZURE_RESOURCE_GROUP=pluto-01-rg @@ -69,7 +70,7 @@ export AZURE_SP=pluto-01-sp - `AZURE_LOCATION`: The Azure location of the resource group, for example `useast` or `westeurope`. - `AZURE_SP`: Azure service principal that is used to create the resources on Azure. You will get the service principal from the Azure administrator. -## Store Service Principal credentials +### Store Service Principal credentials You must run the OpenShift installation using an Azure Service Principal with sufficient permissions. The Azure account administrator will share the SP credentials as a JSON file. @@ -87,14 +88,14 @@ Store this file as `/tmp/${AZURE_SP}-credentials.json`. If you have subscription-level access you can also create the Service Principal yourself. See steps in [Create Azure service principal](./azure-service-principal.md). -## Login as Service Principal +### Login as Service Principal Login as the service principal: ``` az login --service-principal -u a4c39ae9-f9d1-4038-b4a4-ab011e769111 -p xyz-xyz --tenant 869930ac-17ee-4dda-bbad-7354c3e7629c8 ``` -## Register Resource Providers +### Register Resource Providers Make sure the following Resource Providers are registered for your subscription by running: @@ -105,7 +106,7 @@ az provider register -n Microsoft.Storage --wait az provider register -n Microsoft.Authorization --wait ``` -## Create the resource group +### Create the resource group First the resource group must be created; this resource group must match the one configured in your OpenShift yaml config file. ```bash @@ -114,7 +115,7 @@ az group create \ --location ${AZURE_LOCATION} ``` -# 3. Acquire an IBM Cloud Pak Entitlement Key +## 3. Acquire entitlement keys and secrets If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. @@ -125,15 +126,15 @@ If you want to pull the Cloud Pak images from the entitled registry (i.e. an onl !!! warning As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. -## Acquire an OpenShift pull secret +### Acquire an OpenShift pull secret To install OpenShift you need an OpenShift pull secret which holds your entitlement. - Navigate to https://console.redhat.com/openshift/install/pull-secret and download the pull secret into file `/tmp/ocp_pullsecret.json` -# 4. Set environment variables for Azure ARO +## 4. Set environment variables and secrets -### Create the secrets needed for ARO deployment +#### Create the secrets needed for ARO deployment You need to store the OpenShift pull secret and service principal credentials in the vault so that the deployer has access to it. @@ -148,9 +149,9 @@ You need to store the OpenShift pull secret and service principal credentials in --vault-secret-file /tmp/${AZURE_SP}-credentials.json ``` -# 5. Run the deployer +## 5. Run the deployer -## Optional: validate the configuration +### Optional: validate the configuration If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. @@ -158,7 +159,7 @@ If you only want to validate the configuration, you can run the dpeloyer with th ./cp-deploy.sh env apply --check-only --accept-all-licenses ``` -## Run the Cloud Pak Deployer +### Run the Cloud Pak Deployer To run the container using a local configuration input directory and a data directory where temporary and state is kept, use the example below. If you don't specify the status directory, the deployer will automatically create a temporary directory. Please note that the status directory will also hold secrets if you have configured a flat file vault. If you lose the directory, you will not be able to make changes to the configuration and adjust the deployment. It is best to specify a permanent directory that you can reuse later. If you specify an existing directory the current user **must** be the owner of the directory. Failing to do so may cause the container to fail with insufficient permissions. @@ -186,11 +187,11 @@ If you need to interrupt the automation, use CTRL-C to stop the logging output a ./cp-deploy.sh env kill ``` -## On failure +### On failure If the Cloud Pak Deployer fails, for example because certain infrastructure components are temporarily not available, fix the cause if needed and then just re-run it with the same `CONFIG_DIR` and `STATUS_DIR` as well extra variables. The provisioning process has been designed to be idempotent and it will not redo actions that have already completed successfully. -## Finishing up +### Finishing up Once the process has finished, it will output the URLs by which you can access the deployed Cloud Pak. You can also find this information under the `cloud-paks` directory in the status directory you specified. @@ -237,5 +238,5 @@ included: /automation_script/automation-roles/99-generic/vault/vault-get-secret/ cp4d_admin_zen_sample_sample: gelGKrcgaLatBsnAdMEbmLwGr ``` -## Post-install configuration +### Post-install configuration You can find examples of a couple of typical changes you may want to do here: [Post-run changes](../../../10-use-deployer/5-post-run/post-run). \ No newline at end of file diff --git a/docs/src/10-use-deployer/3-run/azure-self-managed.md b/docs/src/10-use-deployer/3-run/azure-self-managed.md index e9434ce62..2d46cef76 100644 --- a/docs/src/10-use-deployer/3-run/azure-self-managed.md +++ b/docs/src/10-use-deployer/3-run/azure-self-managed.md @@ -2,11 +2,12 @@ On Azure, OpenShift can be set up in various ways, managed by Red Hat (ARO) or self-managed. The steps below are applicable to the self-managed Red Hat OpenShift. -There are 5 main steps to run the deployer for Azure self-managed OpenShift: +There are 5 main steps to run the deployer for Azure: + 1. [Configure deployer](#1-configure-deployer) -2. [Prepare the Azure cloud environment](#2-prepare-the-azure-cloud-environment) -3. [Obtain Cloud Pak entitlement key](#3-acquire-an-ibm-cloud-pak-entitlement-key) -4. [Set environment variables](#4-set-environment-variables-for-azure-self-managed) +2. [Prepare the cloud environment](#2-prepare-the-cloud-environment) +3. [Obtain entitlement keys and secrets](#3-acquire-entitlement-keys-and-secrets) +4. [Set environment variables and secrets](#4-set-environment-variables-and-secrets) 5. [Run the deployer](#5-run-the-deployer) ## Topology @@ -16,9 +17,9 @@ A typical setup of the OpenShift cluster on Azure is pictured below: When deploying self-managed OpenShift on Azure, you must configure the domain name by setting the `openshift.domain_name`, which must be public domain with a registrar. OpenShift will create a public DNS zone with additional entries to reach the OpenShift API and the applications (Cloud Paks). If you don't have a domain yet, you buy one from Azure: https://learn.microsoft.com/en-us/azure/app-service/manage-custom-dns-buy-domain. -# 1. Configure deployer +## 1. Configure deployer -## Deployer configuration and status directories +### Deployer configuration and status directories Deployer reads the configuration from a directory you set in the `CONFIG_DIR` environment variable. A status directory (`STATUS_DIR` environment variable) is used to log activities, store temporary files, scripts. If you use a File Vault (default), the secrets are kept in the `$STATUS_DIR/vault` directory. You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). For Azure self-managed installations, copy one of `ocp-azure-self-managed*.yaml` files into the `$CONFIG_DIR/config` directory. If you also want to install a Cloud Pak, copy one of the `cp4*.yaml` files. @@ -30,7 +31,7 @@ cp sample-configurations/sample-dynamic/config-samples/ocp-azure-self-managed.ya cp sample-configurations/sample-dynamic/config-samples/cp4d-471.yaml $HOME/cpd-config/config/ ``` -## Set configuration and status directories environment variables +### Set configuration and status directories environment variables Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. ``` @@ -41,18 +42,18 @@ export STATUS_DIR=$HOME/cpd-status - `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory which contains the configuration `yaml` files. - `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. -### Optional: advanced configuration +#### Optional: advanced configuration If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). -# 2. Prepare the Azure Cloud environment +## 2. Prepare the cloud environment -## Install the Azure CLI tool +### Install the Azure CLI tool [Install Azure CLI tool](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=dnf), and run the commands in your operating system. -## Verify your quota and permissions in Microsoft Azure +### Verify your quota and permissions in Microsoft Azure - Check [Azure resource quota](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#before-you-begin) of the subscription - Azure Red Hat OpenShift requires a minimum of 40 cores to create and run an OpenShift cluster. - The self-managed cluster is provisioned using the IPI installer command. Ideally, one has to have `Contributor` permissions on the subscription (Azure resources) and `Application administrator` role assigned in the Azure Active Directory. See details [here](https://docs.microsoft.com/en-us/azure/openshift/tutorial-create-cluster#verify-your-permissions). @@ -69,7 +70,7 @@ export AZURE_SP=pluto-01-sp - `AZURE_LOCATION`: The Azure location of the resource group, for example `useast` or `westeurope`. - `AZURE_SP`: Azure service principal that is used to create the resources on Azure. You will get the service principal from the Azure administrator. -## Store Service Principal credentials +### Store Service Principal credentials You must run the OpenShift installation using an Azure Service Principal with sufficient permissions. The Azure account administrator will share the SP credentials as a JSON file. @@ -87,14 +88,14 @@ Store this file as `/tmp/${AZURE_SP}-credentials.json`. If you have subscription-level access you can also create the Service Principal yourself. See steps in [Create Azure service principal](./azure-service-principal.md). -## Login as Service Principal +### Login as Service Principal Login as the service principal: ``` az login --service-principal -u a4c39ae9-f9d1-4038-b4a4-ab011e769111 -p xyz-xyz --tenant 869930ac-17ee-4dda-bbad-7354c3e7629c8 ``` -## Create the resource group +### Create the resource group First the resource group must be created; this resource group must match the one configured in your OpenShift yaml config file. ```bash @@ -103,7 +104,9 @@ az group create \ --location ${AZURE_LOCATION} ``` -# 3. Acquire an IBM Cloud Pak Entitlement Key +## 3. Acquire entitlement keys and secrets + +### Acquire IBM Cloud Pak entitlement key If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. @@ -114,15 +117,27 @@ If you want to pull the Cloud Pak images from the entitled registry (i.e. an onl !!! warning As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. -## Acquire an OpenShift pull secret +### Acquire an OpenShift pull secret To install OpenShift you need an OpenShift pull secret which holds your entitlement. - Navigate to https://console.redhat.com/openshift/install/pull-secret and download the pull secret into file `/tmp/ocp_pullsecret.json` -# 4. Set environment variables for Azure self-managed +### Optional: Locate or generate a public SSH Key +To obtain access to the OpenShift nodes post-installation, you will need to specify the public SSH key of your server; typically this is `~/.ssh/id_rsa.pub`, where `~` is the home directory of your user. If you don't have an SSH key-pair yet, you can generate one using the steps documented here: https://cloud.ibm.com/docs/ssh-keys?topic=ssh-keys-generating-and-using-ssh-keys-for-remote-host-authentication#generating-ssh-keys-on-linux. Alternatively, deployer can generate SSH key-pair automatically if credential `ocp-ssh-pub-key` is not in the vault. + +## 4. Set environment variables and secrets + +### Set the Cloud Pak entitlement key +If you want the Cloud Pak images to be pulled from the entitled registry, set the Cloud Pak entitlement key. + +``` +export CP_ENTITLEMENT_KEY=your_cp_entitlement_key +``` -### Create the secrets needed for self-managed deployment +- `CP_ENTITLEMENT_KEY`: This is the entitlement key you acquired as per the instructions above, this is a 80+ character string. **You don't need to set this environment variable when you install the Cloud Pak(s) from a private registry** + +### Create the secrets needed for self-managed OpenShift cluster You need to store the OpenShift pull secret and service principal credentials in the vault so that the deployer has access to it. @@ -137,9 +152,18 @@ You need to store the OpenShift pull secret and service principal credentials in --vault-secret-file /tmp/${AZURE_SP}-credentials.json ``` -# 5. Run the deployer +### Optional: Create secret for public SSH key + +If you want to use your SSH key to access nodes in the cluster, set the Vault secret with the public SSH key. +``` +./cp-deploy.sh vault set \ + --vault-secret ocp-ssh-pub-key \ + --vault-secret-file ~/.ssh/id_rsa.pub +``` + +## 5. Run the deployer -## Optional: validate the configuration +### Optional: validate the configuration If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. @@ -147,7 +171,7 @@ If you only want to validate the configuration, you can run the dpeloyer with th ./cp-deploy.sh env apply --check-only --accept-all-licenses ``` -## Run the Cloud Pak Deployer +### Run the Cloud Pak Deployer To run the container using a local configuration input directory and a data directory where temporary and state is kept, use the example below. If you don't specify the status directory, the deployer will automatically create a temporary directory. Please note that the status directory will also hold secrets if you have configured a flat file vault. If you lose the directory, you will not be able to make changes to the configuration and adjust the deployment. It is best to specify a permanent directory that you can reuse later. If you specify an existing directory the current user **must** be the owner of the directory. Failing to do so may cause the container to fail with insufficient permissions. @@ -175,11 +199,11 @@ If you need to interrupt the automation, use CTRL-C to stop the logging output a ./cp-deploy.sh env kill ``` -## On failure +### On failure If the Cloud Pak Deployer fails, for example because certain infrastructure components are temporarily not available, fix the cause if needed and then just re-run it with the same `CONFIG_DIR` and `STATUS_DIR` as well extra variables. The provisioning process has been designed to be idempotent and it will not redo actions that have already completed successfully. -## Finishing up +### Finishing up Once the process has finished, it will output the URLs by which you can access the deployed Cloud Pak. You can also find this information under the `cloud-paks` directory in the status directory you specified. @@ -211,7 +235,7 @@ Secret list for group sample: - ibm_cp_entitlement_key - sample-provision-ssh-key - sample-provision-ssh-pub-key -- cp4d_admin_zen_sample_sample +- cp4d_admin_cpd_demo ``` You can then retrieve the Cloud Pak for Data admin password like this: @@ -226,5 +250,5 @@ included: /automation_script/automation-roles/99-generic/vault/vault-get-secret/ cp4d_admin_zen_sample_sample: gelGKrcgaLatBsnAdMEbmLwGr ``` -## Post-install configuration +### Post-install configuration You can find examples of a couple of typical changes you may want to do here: [Post-run changes](../../../10-use-deployer/5-post-run/post-run). \ No newline at end of file diff --git a/docs/src/10-use-deployer/3-run/existing-openshift.md b/docs/src/10-use-deployer/3-run/existing-openshift.md index 1ca501fb5..d012bcfc9 100644 --- a/docs/src/10-use-deployer/3-run/existing-openshift.md +++ b/docs/src/10-use-deployer/3-run/existing-openshift.md @@ -8,64 +8,78 @@ When running the Cloud Pak Deployer on an existing OpenShift cluster, the follow With the **Existing OpenShift** type of deployment you can install and configure the Cloud Pak(s) both on connected and disconnected (air-gapped) cluster. When using the deployer for a disconnected cluster, make sure you specify `--air-gapped` for the `cp-deploy.sh` command. -## Acquire an IBM Cloud Pak Entitlement Key (connected cluster only) +There are 5 main steps to run the deployer for existing OpenShift: -If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. +1. [Configure deployer](#1-configure-deployer) +2. [Prepare the cloud environment](#2-prepare-the-cloud-environment) +3. [Obtain entitlement keys and secrets](#3-acquire-entitlement-keys-and-secrets) +4. [Set environment variables and secrets](#4-set-environment-variables-and-secrets) +5. [Run the deployer](#5-run-the-deployer) -- Navigate to https://myibm.ibm.com/products-services/containerlibrary and login with your IBMId credentials -- Select **Get Entitlement Key** and create a new key (or copy your existing key) -- Copy the key value +## 1. Configure deployer -!!! warning - As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. +### Deployer configuration and status directories +Deployer reads the configuration from a directory you set in the `CONFIG_DIR` environment variable. A status directory (`STATUS_DIR` environment variable) is used to log activities, store temporary files, scripts. If you use a File Vault (default), the secrets are kept in the `$STATUS_DIR/vault` directory. -## Prepare for running - -### Set environment variables for existing OpenShift +You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). For existing OpenShift installations, copy one of `ocp-existing-ocp-*.yaml` files into the `$CONFIG_DIR/config` directory. If you also want to install a Cloud Pak, copy one of the `cp4*.yaml` files. +Example: ``` -export CP_ENTITLEMENT_KEY=your_cp_entitlement_key +mkdir -p $HOME/cpd-config/config +cp sample-configurations/sample-dynamic/config-samples/ocp-existing-ocp-auto.yaml $HOME/cpd-config/config/ +cp sample-configurations/sample-dynamic/config-samples/cp4d-471.yaml $HOME/cpd-config/config/ ``` -- `CP_ENTITLEMENT_KEY`: This is the entitlement key you acquired as per the instructions above, this is a 80+ character string. **You don't need to set this environment variable when you do an air-gapped installation** - -### Set deployer status directory +### Set configuration and status directories environment variables Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. ``` +export CONFIG_DIR=$HOME/cpd-config export STATUS_DIR=$HOME/cpd-status ``` -- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. **Please note** that if you have chosen to use a File Vault, the properties file is keps under the `vault` directory within the status directory. If you don't specify a status directory, it is assumted to be `$HOME/cpd-status`. +- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory which contains the configuration `yaml` files. +- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. -### Set deployer configuration location -You can use a local directory to hold the deployer configuration or retrieve the configuration from a GitHub repository. If you don't specify any configuration directory or GitHub repository, the configuration directory are assumed to be `$HOME/cpd-config`. -``` -export CONFIG_DIR=$HOME/cpd-config -``` +#### Optional: advanced configuration +If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). + +For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). + +## 2. Prepare the cloud environment + +No steps should be required to prepare the infrastructure; this type of installation expects the OpenShift cluster to be up and running with the supported storage classes. -- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory. +## 3. Acquire entitlement keys and secrets + +If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. + +- Navigate to https://myibm.ibm.com/products-services/containerlibrary and login with your IBMId credentials +- Select **Get Entitlement Key** and create a new key (or copy your existing key) +- Copy the key value + +!!! warning + As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. + + +## 4. Set environment variables and secrets + +### Set the Cloud Pak entitlement key +If you want the Cloud Pak images to be pulled from the entitled registry, set the Cloud Pak entitlement key. -Or, when using a GitHub repository for the configuration. ``` -export CPD_CONFIG_GIT_REPO="https://github.com/IBM/cloud-pak-deployer-config.git" -export CPD_CONFIG_GIT_REF="main" -export CPD_CONFIG_GIT_CONTEXT="" +export CP_ENTITLEMENT_KEY=your_cp_entitlement_key ``` -- `CPD_CONFIG_GIT_REPO`: The clone URL of the GitHub repository that holds the configuration. -- `CPD_CONFIG_GIT_REF`: The branch, tag or commit ID to be cloned. If not specified, the repository's default branch will be cloned. -- `CPD_CONFIG_GIT_CONTEXT`: The directory within the GitHub repository that holds the configuration. This directory must contain the `config` directory under which the YAML files are kept. - -!!! info - When specifying a GitHub repository, the contents will be copied under `$STATUS_DIR/cpd-config` and this directory is then set as the configuration directory. +- `CP_ENTITLEMENT_KEY`: This is the entitlement key you acquired as per the instructions above, this is a 80+ character string. **You don't need to set this environment variable when you install the Cloud Pak(s) from a private registry** ### Store the OpenShift login command or configuration -Because you will be deploying the Cloud Pak on an existing OpenShift cluster, the deployer needs to be able to access OpenShift. There are multiple methods for passing the login credentials of your OpenShift cluster(s) to the deployer process: -- Generic `oc login` command -- Specific `oc login` command(s) -- `kubeconfig` file +Because you will be deploying the Cloud Pak on an existing OpenShift cluster, the deployer needs to be able to access OpenShift. There are thre methods for passing the login credentials of your OpenShift cluster(s) to the deployer process: + +1. [Generic `oc login` command (preferred)](#option-1---generic-oc-login-command) +2. [Specific `oc login` command(s)](#option-2---specific-oc-login-commands) +3. [`kubeconfig` file](#option-3---use-a-kubeconfig-file) Regardless of which authentication option you choose, the deployer will retrieve the secret from the vault when it requires access to OpenShift. If the secret cannot be found or if it is invalid or the OpenShift login token has expired, the deployer will fail and you will need to update the secret of your choice. @@ -87,7 +101,7 @@ You have access to 65 projects, the list has been suppressed. You can list all p Using project "default". ``` -#### Option 1: specify the generic `oc login` command +#### Option 1 - Generic `oc login` command This is the most straightforward option if you only have 1 OpenShift cluster in your configuration. Set the environment variable for the `oc login` command @@ -100,7 +114,7 @@ export CPD_OC_LOGIN="oc login api.pluto-01.coc.ibm.com:6443 -u kubeadmin -p BmxQ When the deployer is run, it automatically sets the `oc-login` vault secret to the specified `oc login` command. When logging in to OpenShift, the deployer first checks if there is a specific `oc login` secret for the cluster in question (see option 2). If there is not, it will default to the generic `oc-login` secret (option 1). -#### Option 2: store the specific `oc login` command(s) +#### Option 2 - Specific `oc login` command(s) Use this option if you have multiple OpenShift clusters configured in th deployer configuration. Store the login command in secret `-oc-login` @@ -113,7 +127,7 @@ Store the login command in secret `-oc-login` !!! info Make sure you put the oc login command between quotes (single or double) to make sure the full command is stored. -#### Option 3: store the kubeconfig file +#### Option 3 - Use a kubeconfig file If you already have a "kubeconfig" file that holds the credentials of your cluster, you can use this, otherwise: - Log in to OpenShift as a cluster administrator using your method of choice - Locate the Kubernetes config file. If you have logged in with the OpenShift client, this is typically `~/.kube/config` @@ -142,34 +156,22 @@ If the deployer manages multiple OpenShift clusters, you can specify a kubeconfi ``` When connecting to the OpenShift cluster, a cluster-specific kubeconfig vault secret will take precedence over the generic `kubeconfig` secret. -## Optional: validate the configuration +## 5. Run the deployer -If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. +### Optional: validate the configuration -If the cluster is air-gapped, make sure you add the `--air-gapped` flag +If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. ``` -./cp-deploy.sh env apply --check-only [--accept-all-licenses] +./cp-deploy.sh env apply --check-only --accept-all-licenses ``` -## Creating CP4D Storage Classes (If Portworx is Already Installed) -If Portworx is already installed, CP4D will automatically create the necessary storage classes for its use during the installation process. - - -## Run the Cloud Pak Deployer +### Run the Cloud Pak Deployer To run the container using a local configuration input directory and a data directory where temporary and state is kept, use the example below. If you don't specify the status directory, the deployer will automatically create a temporary directory. Please note that the status directory will also hold secrets if you have configured a flat file vault. If you lose the directory, you will not be able to make changes to the configuration and adjust the deployment. It is best to specify a permanent directory that you can reuse later. If you specify an existing directory the current user **must** be the owner of the directory. Failing to do so may cause the container to fail with insufficient permissions. -If the cluster is air-gapped, make sure you add the `--air-gapped` flag - ``` -./cp-deploy.sh env apply [--accept-all-licenses] -``` - -If you have chosen to use dynamic properties (extra variables), you can specify these on the command line, see below. Extra variables are covered in [advanced configuration](../../../50-advanced/advanced-configuration). - -``` -./cp-deploy.sh env apply [--accept-all-licenses] +./cp-deploy.sh env apply --accept-all-licenses ``` You can also specify extra variables such as `env_id` to override the names of the objects referenced in the `.yaml` configuration files as `{{ env_id }}-xxxx`. For more information about the extra (dynamic) variables, see [advanced configuration](../../../50-advanced/advanced-configuration). @@ -184,7 +186,7 @@ You can return to view the logs as follows: ./cp-deploy.sh env logs ``` -Preparing OpenShift and installing the Cloud Pak will take a long time, typically between 1-5 hours, dependent on which Cloud Pak cartridges you configured. For estimated duration of the steps, refer to [Timings](../../../30-reference/timings). +Deploying the infrastructure, preparing OpenShift and installing the Cloud Pak will take a long time, typically between 1-5 hours,dependent on which Cloud Pak cartridges you configured. For estimated duration of the steps, refer to [Timings](../../../30-reference/timings). If you need to interrupt the automation, use CTRL-C to stop the logging output and then use: @@ -192,11 +194,11 @@ If you need to interrupt the automation, use CTRL-C to stop the logging output a ./cp-deploy.sh env kill ``` -## On failure +### On failure If the Cloud Pak Deployer fails, for example because certain infrastructure components are temporarily not available, fix the cause if needed and then just re-run it with the same `CONFIG_DIR` and `STATUS_DIR` as well extra variables. The provisioning process has been designed to be idempotent and it will not redo actions that have already completed successfully. -## Finishing up +### Finishing up Once the process has finished, it will output the URLs by which you can access the deployed Cloud Pak. You can also find this information under the `cloud-paks` directory in the status directory you specified. @@ -209,10 +211,12 @@ cat $STATUS_DIR/cloud-paks/* This will show the Cloud Pak URLs: ```output -Cloud Pak for Data URL for cluster pluto-01 and project cpd: +Cloud Pak for Data URL for cluster pluto-01 and project cpd (domain name specified was example.com): https://cpd-cpd.apps.pluto-01.example.com ``` +The `admin` password can be retrieved from the vault as follows: + List the secrets in the vault: ``` @@ -224,14 +228,14 @@ This will show something similar to the following: ```output Secret list for group sample: - ibm_cp_entitlement_key -- pluto-01-oc-login -- cp4d_admin_zen_sample_sample +- oc-login +- cp4d_admin_cpd_demo ``` You can then retrieve the Cloud Pak for Data admin password like this: ``` -./cp-deploy.sh vault get --vault-secret cp4d_admin_zen_sample_sample +./cp-deploy.sh vault get --vault-secret cp4d_admin_cpd_sample ``` ```output @@ -240,5 +244,5 @@ included: /cloud-pak-deployer/automation-roles/99-generic/vault/vault-get-secret cp4d_admin_zen_sample_sample: gelGKrcgaLatBsnAdMEbmLwGr ``` -## Post-install configuration +### Post-install configuration You can find examples of a couple of typical changes you may want to do here: [Post-run changes](../../../10-use-deployer/5-post-run/post-run). \ No newline at end of file diff --git a/docs/src/10-use-deployer/3-run/ibm-cloud.md b/docs/src/10-use-deployer/3-run/ibm-cloud.md index fd970b3cf..db0dc0f0c 100644 --- a/docs/src/10-use-deployer/3-run/ibm-cloud.md +++ b/docs/src/10-use-deployer/3-run/ibm-cloud.md @@ -1,5 +1,15 @@ # Running the Cloud Pak Deployer on IBM Cloud +You can use Cloud Pak Deployer to create a ROKS (Red Hat OpenShift Kubernetes Service) on IBM Cloud. + +There are 5 main steps to run the deployer for IBM Cloud: + +1. [Configure deployer](#1-configure-deployer) +2. [Prepare the cloud environment](#2-prepare-the-cloud-environment) +3. [Obtain entitlement keys and secrets](#3-acquire-entitlement-keys-and-secrets) +4. [Set environment variables and secrets](#4-set-environment-variables-and-secrets) +5. [Run the deployer](#5-run-the-deployer) + See the deployer in action in this video: https://ibm.box.com/v/cpd-ibm-cloud-roks ## Topology @@ -7,7 +17,39 @@ See the deployer in action in this video: https://ibm.box.com/v/cpd-ibm-cloud-ro A typical setup of the ROKS cluster on IBM Cloud VPC is pictured below: ![ROKS configuration](images/ibm-roks-ocs.png) -## Create an IBM Cloud API Key +## 1. Configure deployer + +### Deployer configuration and status directories +Deployer reads the configuration from a directory you set in the `CONFIG_DIR` environment variable. A status directory (`STATUS_DIR` environment variable) is used to log activities, store temporary files, scripts. If you use a File Vault (default), the secrets are kept in the `$STATUS_DIR/vault` directory. + +You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). For IBM Cloud installations, copy one of `ocp-ibm-cloud-roks*.yaml` files into the `$CONFIG_DIR/config` directory. If you also want to install a Cloud Pak, copy one of the `cp4*.yaml` files. + +Example: +``` +mkdir -p $HOME/cpd-config/config +cp sample-configurations/sample-dynamic/config-samples/ocp-ibm-cloud-roks-ocs.yaml $HOME/cpd-config/config/ +cp sample-configurations/sample-dynamic/config-samples/cp4d-471.yaml $HOME/cpd-config/config/ +``` + +### Set configuration and status directories environment variables +Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. + +``` +export CONFIG_DIR=$HOME/cpd-config +export STATUS_DIR=$HOME/cpd-status +``` + +- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory which contains the configuration `yaml` files. +- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. + +#### Optional: advanced configuration +If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). + +For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). + +## 2. Prepare the cloud environment + +### Create an IBM Cloud API Key In order for the Cloud Pak Deployer to create the infrastructure and deploy IBM Cloud Pak for Data, it must perform tasks on IBM Cloud. In order to do so it requires an IBM Cloud API Key. This can be created by following these steps: @@ -19,77 +61,55 @@ In order for the Cloud Pak Deployer to create the infrastructure and deploy IBM !!! warning You can choose to download the API key for later reference. However, when we reference the API key, we mean the IBM Cloud API key as a 40+ character string. -## Acquire an IBM Cloud Pak Entitlement Key - -If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. - -- Navigate to https://myibm.ibm.com/products-services/containerlibrary and login with your IBMid credentials -- Select **Get Entitlement Key** and create a new key (or copy your existing key) -- Copy the key value - -!!! warning - As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. - -## Prepare for running - ### Set environment variables for IBM Cloud Set the environment variables specific to IBM Cloud deployments. ``` export IBM_CLOUD_API_KEY=your_api_key -export CP_ENTITLEMENT_KEY=your_cp_entitlement_key ``` - `IBM_CLOUD_API_KEY`: This is the API key you generated using your IBM Cloud account, this is a 40+ character string -- `CP_ENTITLEMENT_KEY`: This is the entitlement key you acquired as per the instructions above, this is a 80+ character string -### Set deployer status directory -Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. +## 3. Acquire entitlement keys and secrets -``` -export STATUS_DIR=$HOME/cpd-status -``` +If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. -- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. **Please note** that if you have chosen to use a File Vault, the properties file is keps under the `vault` directory within the status directory. If you don't specify a status directory, it is assumted to be `$HOME/cpd-status`. +- Navigate to https://myibm.ibm.com/products-services/containerlibrary and login with your IBMId credentials +- Select **Get Entitlement Key** and create a new key (or copy your existing key) +- Copy the key value -### Set deployer configuration location -You can use a local directory to hold the deployer configuration or retrieve the configuration from a GitHub repository. If you don't specify any configuration directory or GitHub repository, the configuration directory are assumed to be `$HOME/cpd-config`. -``` -export CONFIG_DIR=$HOME/cpd-config -``` +!!! warning + As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. + +## 4. Set environment variables and secrets -- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory. +### Set the Cloud Pak entitlement key +If you want the Cloud Pak images to be pulled from the entitled registry, set the Cloud Pak entitlement key. -Or, when using a GitHub repository for the configuration. ``` -export CPD_CONFIG_GIT_REPO="https://github.com/IBM/cloud-pak-deployer-config.git" -export CPD_CONFIG_GIT_REF="main" -export CPD_CONFIG_GIT_CONTEXT="" +export CP_ENTITLEMENT_KEY=your_cp_entitlement_key ``` -- `CPD_CONFIG_GIT_REPO`: The clone URL of the GitHub repository that holds the configuration. -- `CPD_CONFIG_GIT_REF`: The branch, tag or commit ID to be cloned. If not specified, the repository's default branch will be cloned. -- `CPD_CONFIG_GIT_CONTEXT`: The directory within the GitHub repository that holds the configuration. This directory must contain the `config` directory under which the YAML files are kept. +- `CP_ENTITLEMENT_KEY`: This is the entitlement key you acquired as per the instructions above, this is a 80+ character string. **You don't need to set this environment variable when you install the Cloud Pak(s) from a private registry** -!!! info - When specifying a GitHub repository, the contents will be copied under `$STATUS_DIR/cpd-config` and this directory is then set as the configuration directory. +## 5. Run the deployer -## Optional: validate the configuration +### Optional: validate the configuration If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. ``` -./cp-deploy.sh env apply --check-only [--accept-all-licenses] +./cp-deploy.sh env apply --check-only --accept-all-licenses ``` -## Run the Cloud Pak Deployer +### Run the Cloud Pak Deployer To run the container using a local configuration input directory and a data directory where temporary and state is kept, use the example below. If you don't specify the status directory, the deployer will automatically create a temporary directory. Please note that the status directory will also hold secrets if you have configured a flat file vault. If you lose the directory, you will not be able to make changes to the configuration and adjust the deployment. It is best to specify a permanent directory that you can reuse later. If you specify an existing directory the current user **must** be the owner of the directory. Failing to do so may cause the container to fail with insufficient permissions. ``` -./cp-deploy.sh env apply [--accept-all-licenses] +./cp-deploy.sh env apply --accept-all-licenses ``` -In the above commanYou can also specify extra variables such as `env_id` and `ibm_cloud_region` to override the names of the objects referenced in the `.yaml` configuration files as `{{ env_id }}-xxxx`. For more information about the extra (dynamic) variables, see [advanced configuration](../../../50-advanced/advanced-configuration). +You can also specify extra variables such as `env_id` to override the names of the objects referenced in the `.yaml` configuration files as `{{ env_id }}-xxxx`. For more information about the extra (dynamic) variables, see [advanced configuration](../../../50-advanced/advanced-configuration). The `--accept-all-licenses` flag is optional and confirms that you accept all licenses of the installed cartridges and instances. Licenses must be either accepted in the configuration files or at the command line. @@ -109,11 +129,11 @@ If you need to interrupt the automation, use CTRL-C to stop the logging output a ./cp-deploy.sh env kill ``` -## On failure +### On failure If the Cloud Pak Deployer fails, for example because certain infrastructure components are temporarily not available, fix the cause if needed and then just re-run it with the same `CONFIG_DIR` and `STATUS_DIR` as well extra variables. The provisioning process has been designed to be idempotent and it will not redo actions that have already completed successfully. -## Finishing up +### Finishing up Once the process has finished, it will output the URLs by which you can access the deployed Cloud Pak. You can also find this information under the `cloud-paks` directory in the status directory you specified. @@ -126,10 +146,12 @@ cat $STATUS_DIR/cloud-paks/* This will show the Cloud Pak URLs: ```output -Cloud Pak for Data URL for cluster pluto-01 and project cpd: -https://cpd-cpd.fke16h-a939e0e6a37f1ce85dbfddbb7ab97418-0000.eu-de.containers.appdomain.cloud +Cloud Pak for Data URL for cluster pluto-01 and project cpd (domain name specified was example.com): +https://cpd-cpd.apps.pluto-01.example.com ``` +The `admin` password can be retrieved from the vault as follows: + List the secrets in the vault: ``` @@ -144,13 +166,13 @@ Secret list for group sample: - sample-provision-ssh-key - sample-provision-ssh-pub-key - sample-terraform-tfstate -- cp4d_admin_zen_sample_sample +- cp4d_admin_cpd_demo ``` You can then retrieve the Cloud Pak for Data admin password like this: ``` -./cp-deploy.sh vault get --vault-secret cp4d_admin_zen_sample_sample +./cp-deploy.sh vault get --vault-secret cp4d_admin_cpd_demo ``` ```output @@ -159,5 +181,5 @@ included: /cloud-pak-deployer/automation-roles/99-generic/vault/vault-get-secret cp4d_admin_zen_sample_sample: gelGKrcgaLatBsnAdMEbmLwGr ``` -## Post-install configuration +### Post-install configuration You can find examples of a couple of typical changes you may want to do here: [Post-run changes](../../../10-use-deployer/5-post-run/post-run). \ No newline at end of file diff --git a/docs/src/10-use-deployer/3-run/vsphere.md b/docs/src/10-use-deployer/3-run/vsphere.md index e0ac0df5f..22b942bca 100644 --- a/docs/src/10-use-deployer/3-run/vsphere.md +++ b/docs/src/10-use-deployer/3-run/vsphere.md @@ -1,5 +1,15 @@ # Running the Cloud Pak Deployer on vSphere +You can use Cloud Pak Deployer to create an OpenShift cluster on VMWare infrastructure. + +There are 5 main steps to run the deployer for vSphere: + +1. [Configure deployer](#1-configure-deployer) +2. [Prepare the cloud environment](#2-prepare-the-cloud-environment) +3. [Obtain entitlement keys and secrets](#3-acquire-entitlement-keys-and-secrets) +4. [Set environment variables and secrets](#4-set-environment-variables-and-secrets) +5. [Run the deployer](#5-run-the-deployer) + ## Topology A typical setup of the vSphere cluster with OpenShift is pictured below: @@ -7,7 +17,39 @@ A typical setup of the vSphere cluster with OpenShift is pictured below: When deploying OpenShift and the Cloud Pak(s) on VMWare vSphere, there is a dependency on a DHCP server for issuing IP addresses to the newly configured cluster nodes. Also, once the OpenShift cluster has been installed, valid fully qualified host names are required to connect to the OpenShift API server at port `6443` and applications running behind the ingress server at port `443`. The Cloud Pak deployer cannot set up a DHCP server or a DNS server and to be able to connect to OpenShift or to reach the Cloud Pak after installation, name entries must be set up. -### Pre-requisites +## 1. Configure deployer + +### Deployer configuration and status directories +Deployer reads the configuration from a directory you set in the `CONFIG_DIR` environment variable. A status directory (`STATUS_DIR` environment variable) is used to log activities, store temporary files, scripts. If you use a File Vault (default), the secrets are kept in the `$STATUS_DIR/vault` directory. + +You can find OpenShift and Cloud Pak sample configuration (yaml) files here: [sample configuration](https://github.com/IBM/cloud-pak-deployer/tree/main/sample-configurations/sample-dynamic/config-samples). For vSphere installations, copy one of `ocp-vsphere-*.yaml` files into the `$CONFIG_DIR/config` directory. If you also want to install a Cloud Pak, copy one of the `cp4*.yaml` files. + +Example: +``` +mkdir -p $HOME/cpd-config/config +cp sample-configurations/sample-dynamic/config-samples/ocp-vsphere-ocs-nfs.yaml $HOME/cpd-config/config/ +cp sample-configurations/sample-dynamic/config-samples/cp4d-471.yaml $HOME/cpd-config/config/ +``` + +### Set configuration and status directories environment variables +Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. + +``` +export CONFIG_DIR=$HOME/cpd-config +export STATUS_DIR=$HOME/cpd-status +``` + +- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory which contains the configuration `yaml` files. +- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. + +#### Optional: advanced configuration +If the deployer configuration is kept on GitHub, follow the instructions in [GitHub configuration](../../50-advanced/advanced-configuration.md#using-a-github-repository-for-the-configuration). + +For special configuration with defaults and dynamic variables, refer to [Advanced configuration](../../50-advanced/advanced-configuration.md#using-dynamic-variables-extra-variables). + +## 2. Prepare the cloud environment + +### Pre-requisites for vSphere In order to successfully install OpenShift on vSphere infrastructure, the following pre-requisites must have been met. | Pre-requisite | Description @@ -32,9 +74,10 @@ There are also some optional settings, dependent on the specifics of the install | Certificates | If the Cloud Pak URL must have a CA-signed certificate, the key, certificate and CA bundle must be available at instlalation time | Load balancer | The OpenShift IPI install creates 2 VIPs and takes care of the routing to the services. In some implementations, a load balancer provided by the infrastructure team is preferred. This load balancer must be configured externally - ### DNS configuration +During the provisioning and configuration process, the deployer needs access to the OpenShift API and the ingress server for which the IP addresses are specified in the `openshift` object. + Ensure that the DNS server has the following entries: - `api.openshift_name.domain_name` --> Point to the `api_vip` address configured in the `openshift` object @@ -42,19 +85,23 @@ Ensure that the DNS server has the following entries: If you do not configure the DNS entries upfront, the deployer will still run and it will "spoof" the required entries in the container's `/etc/hosts` file. However to be able to connect to OpenShift and access the Cloud Pak, the DNS entries are required. -## Obtain the vSphere user and password +### Obtain the vSphere user and password In order for the Cloud Pak Deployer to create the infrastructure and deploy the IBM Cloud Pak, it must have provisioning access to vSphere and it needs the vSphere user and password. The user must have permissions to create VM folders and virtual machines. -## Acquire an OpenShift pull secret +### Set environment variables for vSphere -To install OpenShift you need an OpenShift pull secret which holds your entitlement. +``` +export VSPHERE_USER=your_vsphere_user +export VSPHERE_PASSWORD=password_of_the_vsphere_user +``` -When installing an IBM Cloud Pak, you can retrieve your Red Hat entitlement using instructions on this page: https://www.ibm.com/docs/en/cloud-paks/1.0?topic=iocpc-accessing-red-hat-entitlements-from-your-cloud-pak. Or, retrieve your pull secret from Red Hat: https://console.redhat.com/openshift/install/pull-secret. +- `VSPHERE_USER`: This is the user name of the vSphere user, often this is something like `admin@vsphere.local` +- `VSPHERE_PASSWORD`: The password of the vSphere user. Be careful with special characters like `$`, `!` as they are not accepted by the IPI provisioning of OpenShift -Download the pull secret into file `/tmp/ocp_pullsecret.json` +## 3. Acquire entitlement keys and secrets -## Acquire an IBM Cloud Pak Entitlement Key +### Acquire IBM Cloud Pak entitlement key If you want to pull the Cloud Pak images from the entitled registry (i.e. an online install), or if you want to mirror the images to your private registry, you need to download the entitlement key. You can skip this step if you're installing from a private registry and all Cloud Pak images have already been downloaded to the private registry. @@ -65,91 +112,60 @@ If you want to pull the Cloud Pak images from the entitled registry (i.e. an onl !!! warning As stated for the API key, you can choose to download the entitlement key to a file. However, when we reference the entitlement key, we mean the 80+ character string that is displayed, not the file. -## Optional: Locate or generate a public SSH Key -To obtain access to the OpenShift nodes post-installation, you will need to specify the public SSH key of your server; typically this is `~/.ssh/id_rsa.pub`, where `~` is the home directory of your user. If you don't have an SSH key-pair yet, you can generate one using the steps documented here: https://docs.openshift.com/container-platform/4.10/installing/installing_aws/installing-aws-customizations.html#ssh-agent-using_installing-aws-customizations. Alternatively, deployer can generate SSH key-pair automatically if credential `ocp-ssh-pub-key` is not in the vault. - -## Prepare for running +### Acquire an OpenShift pull secret -### Set environment variables for vSphere OpenShift installation - -``` -export VSPHERE_USER=your_vsphere_user -export VSPHERE_PASSWORD=password_of_the_vsphere_user -export CP_ENTITLEMENT_KEY=your_cp_entitlement_key -``` - -- `VSPHERE_USER`: This is the user name of the vSphere user, often this is something like `admin@vsphere.local` -- `VSPHERE_PASSWORD`: The password of the vSphere user. Be careful with special characters like `$`, `!` as they are not accepted by the IPI provisioning of OpenShift -- `CP_ENTITLEMENT_KEY`: This is the entitlement key you acquired as per the instructions above, this is a 80+ character string - -### Set deployer status directory -Cloud Pak Deployer uses the status directory to log its activities and also to keep track of its running state. For a given environment you're provisioning or destroying, you should always specify the same status directory to avoid contention between different deploy runs. +To install OpenShift you need an OpenShift pull secret which holds your entitlement. -``` -export STATUS_DIR=$HOME/cpd-status -``` +- Navigate to https://console.redhat.com/openshift/install/pull-secret and download the pull secret into file `/tmp/ocp_pullsecret.json` -- `STATUS_DIR`: The directory where the Cloud Pak Deployer keeps all status information and logs files. **Please note** that if you have chosen to use a File Vault, the properties file is keps under the `vault` directory within the status directory. If you don't specify a status directory, it is assumted to be `$HOME/cpd-status`. +### Optional: Locate or generate a public SSH Key +To obtain access to the OpenShift nodes post-installation, you will need to specify the public SSH key of your server; typically this is `~/.ssh/id_rsa.pub`, where `~` is the home directory of your user. If you don't have an SSH key-pair yet, you can generate one using the steps documented here: https://cloud.ibm.com/docs/ssh-keys?topic=ssh-keys-generating-and-using-ssh-keys-for-remote-host-authentication#generating-ssh-keys-on-linux. Alternatively, deployer can generate SSH key-pair automatically if credential `ocp-ssh-pub-key` is not in the vault. -### Set deployer configuration location -You can use a local directory to hold the deployer configuration or retrieve the configuration from a GitHub repository. If you don't specify any configuration directory or GitHub repository, the configuration directory are assumed to be `$HOME/cpd-config`. -``` -export CONFIG_DIR=$HOME/cpd-config -``` +## 4. Set environment variables and secrets -- `CONFIG_DIR`: Directory that holds the configuration, it must have a `config` subdirectory. +### Set the Cloud Pak entitlement key +If you want the Cloud Pak images to be pulled from the entitled registry, set the Cloud Pak entitlement key. -Or, when using a GitHub repository for the configuration. ``` -export CPD_CONFIG_GIT_REPO="https://github.com/IBM/cloud-pak-deployer-config.git" -export CPD_CONFIG_GIT_REF="main" -export CPD_CONFIG_GIT_CONTEXT="" +export CP_ENTITLEMENT_KEY=your_cp_entitlement_key ``` -- `CPD_CONFIG_GIT_REPO`: The clone URL of the GitHub repository that holds the configuration. -- `CPD_CONFIG_GIT_REF`: The branch, tag or commit ID to be cloned. If not specified, the repository's default branch will be cloned. -- `CPD_CONFIG_GIT_CONTEXT`: The directory within the GitHub repository that holds the configuration. This directory must contain the `config` directory under which the YAML files are kept. +- `CP_ENTITLEMENT_KEY`: This is the entitlement key you acquired as per the instructions above, this is a 80+ character string. **You don't need to set this environment variable when you install the Cloud Pak(s) from a private registry** -!!! info - When specifying a GitHub repository, the contents will be copied under `$STATUS_DIR/cpd-config` and this directory is then set as the configuration directory. +### Create the secrets needed for vSphere deployment -### Create the secrets needed for vSphere - -You need to store the vSphere user and password in the vault so that the deployer has access to them when doing the IPI install. +You need to store the OpenShift pull secret in the vault so that the deployer has access to it. ``` -./cp-deploy.sh vault set \ - --vault-secret vsphere-user \ - --vault-secret-value $VSPHERE_USER - -./cp-deploy.sh vault set \ - --vault-secret vsphere-password \ - --vault-secret-value $VSPHERE_PASSWORD - ./cp-deploy.sh vault set \ --vault-secret ocp-pullsecret \ --vault-secret-file /tmp/ocp_pullsecret.json +``` -# Optional if you would like to use your own public key +### Optional: Create secret for public SSH key +If you want to use your SSH key to access nodes in the cluster, set the Vault secret with the public SSH key. +``` ./cp-deploy.sh vault set \ --vault-secret ocp-ssh-pub-key \ --vault-secret-file ~/.ssh/id_rsa.pub ``` -## Optional: validate the configuration +## 5. Run the deployer + +### Optional: validate the configuration If you only want to validate the configuration, you can run the dpeloyer with the `--check-only` argument. This will run the first stage to validate variables and vault secrets and then execute the generators. ``` -./cp-deploy.sh env apply --check-only [--accept-all-liceneses] +./cp-deploy.sh env apply --check-only --accept-all-licenses ``` -## Run the Cloud Pak Deployer +### Run the Cloud Pak Deployer To run the container using a local configuration input directory and a data directory where temporary and state is kept, use the example below. If you don't specify the status directory, the deployer will automatically create a temporary directory. Please note that the status directory will also hold secrets if you have configured a flat file vault. If you lose the directory, you will not be able to make changes to the configuration and adjust the deployment. It is best to specify a permanent directory that you can reuse later. If you specify an existing directory the current user **must** be the owner of the directory. Failing to do so may cause the container to fail with insufficient permissions. ``` -./cp-deploy.sh env apply [--accept-all-liceneses] +./cp-deploy.sh env apply --accept-all-licenses ``` You can also specify extra variables such as `env_id` to override the names of the objects referenced in the `.yaml` configuration files as `{{ env_id }}-xxxx`. For more information about the extra (dynamic) variables, see [advanced configuration](../../../50-advanced/advanced-configuration). @@ -172,18 +188,11 @@ If you need to interrupt the automation, use CTRL-C to stop the logging output a ./cp-deploy.sh env kill ``` -## DNS entries needed for vSphere provisioning - -During the provisioning and configuration process, the deployer needs access to the OpenShift API server and the ingress server. These have been specified in the `openshift` object. To avoid any dependencies on the DNS entries for these servers to be present prior to provisioning, the deployer will add `api.` and several <.apps.`entries to the`/etc/hosts` file within the container. Once the deployer has completed, but ideally even before, you must add the appropriate entries to our DNS server: - -\*.apps. must be mapped to the `ingress_vip` address -api. must be mapped to the `api_vip` address - -## On failure +### On failure If the Cloud Pak Deployer fails, for example because certain infrastructure components are temporarily not available, fix the cause if needed and then just re-run it with the same `CONFIG_DIR` and `STATUS_DIR` as well extra variables. The provisioning process has been designed to be idempotent and it will not redo actions that have already completed successfully. -## Finishing up +### Finishing up Once the process has finished, it will output the URLs by which you can access the deployed Cloud Pak. You can also find this information under the `cloud-paks` directory in the status directory you specified. @@ -196,7 +205,7 @@ cat $STATUS_DIR/cloud-paks/* This will show the Cloud Pak URLs: ```output -Cloud Pak for Data URL for cluster pluto-01 and project cpd: +Cloud Pak for Data URL for cluster pluto-01 and project cpd (domain name specified was example.com): https://cpd-cpd.apps.pluto-01.example.com ``` @@ -218,13 +227,13 @@ Secret list for group sample: - ocp-ssh-pub-key - ibm_cp_entitlement_key - sample-kubeadmin-password -- cp4d_admin_zen_sample_sample +- cp4d_admin_cpd_demo ``` You can then retrieve the Cloud Pak for Data admin password like this: ``` -./cp-deploy.sh vault get --vault-secret cp4d_admin_zen_sample_sample +./cp-deploy.sh vault get --vault-secret cp4d_admin_cpd_demo ``` ```output @@ -233,5 +242,5 @@ included: /cloud-pak-deployer/automation-roles/99-generic/vault/vault-get-secret cp4d_admin_zen_sample_sample: gelGKrcgaLatBsnAdMEbmLwGr ``` -## Post-install configuration +### Post-install configuration You can find examples of a couple of typical changes you may want to do here: [Post-run changes](../../../10-use-deployer/5-post-run/post-run). \ No newline at end of file diff --git a/docs/src/80-development/doc-development-setup.md b/docs/src/80-development/doc-development-setup.md index 80f54814d..2feab75ed 100644 --- a/docs/src/80-development/doc-development-setup.md +++ b/docs/src/80-development/doc-development-setup.md @@ -29,7 +29,7 @@ INFO - [11:55:49] Watching paths for changes: 'src', 'mkdocs.yml' INFO - [11:55:49] Serving on http://0.0.0.0:8000/cloud-pak-deployer/... ``` -## Starting the browswer +## Starting the browser Now that the container has fully started, it automatically tracks all changes under the `docs` folder and updates the pages site automatically. You can view the site by opening a browswer for URL: http://localhost:8000 From c6b21688517ae33068308b30d946e19703168726 Mon Sep 17 00:00:00 2001 From: Frank Ketelaars Date: Sun, 22 Oct 2023 12:29:01 +0200 Subject: [PATCH 8/9] #537 Azure SP --- docs/src/10-use-deployer/3-run/azure-aro.md | 5 ++--- docs/src/10-use-deployer/3-run/azure-self-managed.md | 4 +--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/docs/src/10-use-deployer/3-run/azure-aro.md b/docs/src/10-use-deployer/3-run/azure-aro.md index a487d2c60..5c9efa9f5 100644 --- a/docs/src/10-use-deployer/3-run/azure-aro.md +++ b/docs/src/10-use-deployer/3-run/azure-aro.md @@ -72,7 +72,8 @@ export AZURE_SP=pluto-01-sp ### Store Service Principal credentials -You must run the OpenShift installation using an Azure Service Principal with sufficient permissions. The Azure account administrator will share the SP credentials as a JSON file. +You must run the OpenShift installation using an Azure Service Principal with sufficient permissions. The Azure account administrator will share the SP credentials as a JSON file. If you have subscription-level access you can also create the Service Principal yourself. See steps in [Create Azure service principal](./azure-service-principal.md). + Example output in credentials file: ```output @@ -86,8 +87,6 @@ Example output in credentials file: Store this file as `/tmp/${AZURE_SP}-credentials.json`. -If you have subscription-level access you can also create the Service Principal yourself. See steps in [Create Azure service principal](./azure-service-principal.md). - ### Login as Service Principal Login as the service principal: diff --git a/docs/src/10-use-deployer/3-run/azure-self-managed.md b/docs/src/10-use-deployer/3-run/azure-self-managed.md index 2d46cef76..72c493140 100644 --- a/docs/src/10-use-deployer/3-run/azure-self-managed.md +++ b/docs/src/10-use-deployer/3-run/azure-self-managed.md @@ -72,7 +72,7 @@ export AZURE_SP=pluto-01-sp ### Store Service Principal credentials -You must run the OpenShift installation using an Azure Service Principal with sufficient permissions. The Azure account administrator will share the SP credentials as a JSON file. +You must run the OpenShift installation using an Azure Service Principal with sufficient permissions. The Azure account administrator will share the SP credentials as a JSON file. If you have subscription-level access you can also create the Service Principal yourself. See steps in [Create Azure service principal](./azure-service-principal.md). Example output in credentials file: ```output @@ -86,8 +86,6 @@ Example output in credentials file: Store this file as `/tmp/${AZURE_SP}-credentials.json`. -If you have subscription-level access you can also create the Service Principal yourself. See steps in [Create Azure service principal](./azure-service-principal.md). - ### Login as Service Principal Login as the service principal: From 104ca3943f31f39cec64ed450a0f04aec24728e7 Mon Sep 17 00:00:00 2001 From: Frank Ketelaars Date: Tue, 24 Oct 2023 09:07:55 +0200 Subject: [PATCH 9/9] #537 Clean-up documentation --- .../images/cp-deploy-current-state.drawio | 2 +- .../images/cp-deploy-current-state.png | Bin 157287 -> 155268 bytes .../src/50-advanced/advanced-configuration.md | 4 +--- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/src/01-introduction/images/cp-deploy-current-state.drawio b/docs/src/01-introduction/images/cp-deploy-current-state.drawio index 5c5eaf282..fc45b8b5c 100755 --- a/docs/src/01-introduction/images/cp-deploy-current-state.drawio +++ b/docs/src/01-introduction/images/cp-deploy-current-state.drawio @@ -1 +1 @@ -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 \ No newline at end of file +7Zxbc9o4FIB/TWa6D8n4BoZHMJClTQoTOk3Tl45iC6PGtlhZJtBfv5ItjLGUhIQALsQPwTrIt/Md61wkcmY64fySgOnkGnswODM0b35mds4MQ2+aJvvgkkUmaTbtTOAT5IlOK8EI/YFCqAlpgjwYr3WkGAcUTdeFLo4i6NI1GSAEP653G+Ng/apT4ENJMHJBIEtvkUcnmbRh2Cv5vxD5k+WV9Xoz+yYEy87iSeIJ8PBjQWR2z0yHYEyzvXDuwIArb6mX7LjeE9/mN0ZgRDc5YNifda+ad8Pmr2bXHejhwx/883x5czMQJOKJ+9GYgJiSxKUJgeLe6WKpkMcJonA0BS5vPzLoZ2Z7QsOAtXS2CwLkR2w/gGN2V+0ZJBQxbbaEmGLef4yCwMEBJukpTU2rs43LcUQL8l66CbkwDZ33kx9daINfDs4LIqGKS4hDSMmCdRHfmuLBl2ZZF+3HFeSmJWSTIuCmEAJhWH5+6pXu2Y5Q/2tQ6BKKwRRGowlimtwDhWZTY9tBKTRqm1LQdkbBlCiMKCZ8lNgTA6tzUAa2dXAGpvwmOAFOPCYagof9jEia1mwelEPdPDwHQ+YACGV+2mcumbuOOgi59rK/rBlwDd8TtufzPQeHUxwxlcT7gWY5B4ZWMw4PTR7AHByNkZ8QQBGO9kHCYduBXYmlH56EpSJB+SPuxZVYh2ZgavtkMDeG5OoXIt+mrW8L7N7/bs9757Inac0ACsB9IPtzgpPIg57Q+QtIytp7UsvlMYq7+AJSl2kbEgXUEHkev7P34HKeR63PkNENBZn6rsDIrqUNUeTzW8LkAXJfrxir9oGo12toVUBkHxqR7Ei+slyVPWcAWK7NCLHTagHGDxm3MVMg642DhKkLEtnl7weeVgV4liKI3hm8y5rtw3AELj/fXt71x3c/6bWvGPicIcssDK0Vx1ARjx3v4KfXSi+WIjJQsmm8A5vO+NL/bPz4L0zQwHe/PHxfGFjllG5HTNANQMzUwPaeSjmPl1JDW6dkK0oBO6OkDN+aEiVVZWzL+ptZk64yJGgGKDu91g9TGyhnVTfQR/HyCYvWAeJpVgIdozk3kvYUEsSUweF12M2gaQyHK5EqwsxZ59VKbgkeiCep1SniScuw7XabyVlQBYM2cB/81EoLXcbpVrJIg1+E2S5zHt94/NoxmQClT5x/dlDIPEsvQPfsL7oPOUcUu+xRQARxEmfSXy47LUAR8zkX8cx/JhSWkT1L/u3jf0NRTtR1VeSr78p8a3KE1Y0ookEaW33YUOVtSFUA2rMN2XIG229fM8GyHPd96Py9Pup9uJXDC11Tvft79Vx2XcI2G00nUDGbc2Kwcp1XB5bekGCVpn22neKTQ4zcGrT+sH9kNpHr881G0dg089btXRmFIb/BrT9pzFkOBmVJ62YgC0cwGJ+HIGIu0Tt54HW7esBtGTjPCV/GfTMYtT54P8u7nFtWgbc86nfnLCLPSmlPz/ufGrp8Gue1ZQFzd+s05MLAzeALr9/wgvURhsSvp1aOiavwwsmpTJGaE4A45qW3EydnGSVyqkK2ts/4uCaDW6uObhkd1+To+GtvdGR2kOvwzW/w4cuxNTkkHnR6TPBp4Iz+OXlg5SSmAsDkkHaICX3EZH7ytGpW5WjJAam05m7boVYOnNYuIWaQO4CCYzOQrWsS9U0nlHdmIMtC2Qv0+kxl/hMrzU4NYjl5qQDEF1bWCojtJEYRjPkaz1ZCcfiBUzVoVwCnsRHOW0DjNMtp9QfTv3jpxztxLJf/KsBRsWa3sND6HXxv3ZKwQ3bykWiyuGyCfRyBoLuStleGwcmt+lzhdLKVm8NvSOlC2ANgQ8W6scA5oj/44Rc10borfNOZizOnjcWyETGNFg7izbu02bBzwerQtLV2bGF2Op9r3sRiN7S3JSuuvmetjcCAjZuzYie16YhDhxjxlcH5WtryaFOe5Y1xQlwojiraw0snKi+2pYD4kEonSi05f54tjFvOsFvpUWJBmlv8SQGcu3DKb35IsJe4fO8axBzmcY1a+Rv/5oy8ploesN9RS07wFL802HbgUuQlmd1cdVrDY7MKe1ursBQ/QNmzVSiyvAzYqHV9dfLAyond4YHZisQuA9aPYgoiNx2YP3W+Zwu+O/dGtuO0ss+Li4tjK7+9HqulW1XD+uQK8GscIYpJOtV44tjKKV0FsClSOuHvsO9/MJPTtwowU6Rv4scWiYfoBzR5CcYuobHm6r9qZFnM6n+TmN3/AQ== \ No newline at end of file diff --git a/docs/src/01-introduction/images/cp-deploy-current-state.png b/docs/src/01-introduction/images/cp-deploy-current-state.png index f540e55da3168d0fed6ab5087d6611ddf32a3635..9f308cb9cbf85c6a49c6f1ae39c0fd819d5b4ae9 100755 GIT binary patch literal 155268 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 z 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

y= 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