From 92edef5a8d16bcfef26c516d12aa64e24325c10d Mon Sep 17 00:00:00 2001
From: Karl Cardenas <29551334+karl-cardenas-coding@users.noreply.github.com>
Date: Fri, 13 Dec 2024 09:48:37 -0700
Subject: [PATCH] docs: DOC-1517 updated oop diagram (#5033)
* docs: DOC-1517 updated oop diagram
* docs: updates related to both install
* docs: minor updates
* docs: feedback
* Optimised images with calibre/image-actions
---------
Co-authored-by: vault-token-factory-spectrocloud[bot] <133815545+vault-token-factory-spectrocloud[bot]@users.noreply.github.com>
---
.../airgap-install/checklist.md | 8 +-
.../vmware-vsphere-airgap-instructions.md | 154 +++++++++--------
.../airgap-install/install.md | 23 +--
.../install-on-vmware/install.md | 23 +--
.../upgrade/upgrade-vmware/airgap.md | 4 +-
.../airgap-install/checklist.md | 4 +-
.../vmware-vsphere-airgap-instructions.md | 160 +++++++++---------
.../airgap-install/install.md | 1 +
.../install-on-vmware/install.md | 1 +
.../vertex/upgrade/upgrade-vmware/airgap.md | 4 +-
.../vm-management/install-vmo-in-airgap.md | 4 +-
...-airgap-instructions_order-operations.webp | Bin 38520 -> 40846 bytes
12 files changed, 203 insertions(+), 183 deletions(-)
diff --git a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/checklist.md b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/checklist.md
index c3b2bbeb09..1fa6ffff19 100644
--- a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/checklist.md
+++ b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/checklist.md
@@ -12,9 +12,10 @@ keywords: ["self-hosted", "enterprise"]
---
Use the following checklist to ensure you have completed all the required steps before deploying the airgap Palette
-installation.
+installation. Review this checklist with your Palette support team to ensure you have all the required assets.
-- [ ] Create a vSphere VM and Template folder named `spectro-templates`.
+- [ ] Create a vSphere VM and Template folder named `spectro-templates`. You may choose a different name for the folder
+ if you prefer.
- [ ] Import the Operating System and Kubernetes distribution OVA required for the installation and place the OVA in the
`spectro-templates` folder.
@@ -25,6 +26,9 @@ installation.
- [ ] Review the list of [pack binaries](../../airgap/supplemental-packs.md) to download and upload to your OCI
registry.
+
+- [ ] Download the required third-party binary that contains the core packs and images required for the installation.
+
- [ ] If you have custom SSL certificates you want to include, copy the custom SSL certificates, in base64 PEM format,
to the support VM. The custom certificates must be placed in the **/opt/spectro/ssl** folder. Include the
following files:
diff --git a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/environment-setup/vmware-vsphere-airgap-instructions.md b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/environment-setup/vmware-vsphere-airgap-instructions.md
index 58cdbbdec6..b17556f0d9 100644
--- a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/environment-setup/vmware-vsphere-airgap-instructions.md
+++ b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/environment-setup/vmware-vsphere-airgap-instructions.md
@@ -34,6 +34,7 @@ Palette.
- If you are using a generic OVA, ensure you download the airgap Palette installation binary for the version of
Palette you plan to install.
- An OVA with the operating system and Kubernetes distribution required for the Palette nodes.
+ - The third-party binary that contains the core packs and images required for the installation.
For sensitive environments, you can download the OVAs to a system with internet access and then transfer them to your
airgap environment.
@@ -77,70 +78,24 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
1. Log in to your vCenter environment.
-2. Create a vSphere VM and Template folder named `spectro-templates`. Ensure you can access this folder with the user
- account you plan to use when deploying the Palette installation.
-
-3. Right-click on your cluster or resource group and select **Deploy OVF Template**.
-
-4. In the **Deploy OVF Template** wizard, enter the following URL to import the Operating System (OS) and Kubernetes
- distribution OVA required for the installation. Contact your support representative to learn if the version of
- Palette you are installing requires a new OS and Kubernetes OVA.
-
- Consider the following example for reference.
-
-
-
-
-
- ```url
- https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-1294-0.ova
- ```
-
-
-
-
- ```url
- https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-1294-fips.ova
- ```
-
-
-
-
- Place the OVA in the **spectro-templates** folder. Append the `r_` prefix, and remove the `.ova` suffix when
- assigning its name and target location. For example, the final output should look like `r_u-2204-0-k-1294-0`. This
- naming convention is required for the installation process to identify the OVA. Refer to the
- [Supplement Packs](../../../airgap/supplemental-packs.md#additional-ovas) page for a list of additional OS OVAs.
-
- You can terminate the deployment after the OVA is available in the `spectro-templates` folder. Refer to the
- [Deploy an OVF or OVA Template](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vm-administration/GUID-AFEDC48B-C96F-4088-9C1F-4F0A30E965DE.html)
- guide for more information about deploying an OVA in vCenter.
-
- :::warning
-
- If you encounter an error message during the OVA deployment stating unable to retrieve manifest or certificate,
- refer to this [known issue](https://kb.vmware.com/s/article/79986) from VMware's knowledge base for guidance on how
- to resolve the issue.
-
- :::
-
-5. Next, deploy the airgap installation OVA by using the **Deploy OVF Template** wizard again in vSphere. Insert the
- Palette install OVA URL in the **URL** field. The URL is provided to you by your Palette support representative.
- Click on **Next** to continue.
+2. Deploy the airgap installation OVA by using the **Deploy OVF Template** wizard again in vSphere. Insert the Palette
+ install OVA URL in the **URL** field. The URL is provided to you by your Palette support representative. Click on
+ **Next** to continue.
![View of the OVF deploy wizard](/vertex_airgap_vmware-vsphere-airgap-instructions_ovf-wizard.webp)
-6. Assign a name to the virtual machine and select a target location. Click on **Next** to continue.
+3. Assign a name to the virtual machine and select a target location. Click on **Next** to continue.
-7. Select a compute resource and click on **Next** to continue.
+4. Select a compute resource and click on **Next** to continue.
-8. Review the details and click on **Ignore All** to dismiss any warning messages. The OVA contains a self-signed
+5. Review the details and click on **Ignore All** to dismiss any warning messages. The OVA contains a self-signed
certificate, which causes vSphere to issue a warning. Click on **Next** to continue.
-9. Select the storage location and click on **Next** to continue.
+6. Select the storage location and click on **Next** to continue.
-10. Select the network and click on **Next** to continue.
+7. Select the network and click on **Next** to continue.
-11. The last step is to customize the template. Review the table below to learn more about each field. Click on **Next**
+8. The last step is to customize the template. Review the table below to learn more about each field. Click on **Next**
after you have completed the customization to continue.
| Parameter | Description | Required |
@@ -152,22 +107,22 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
| **Hostname** | Enter a fully qualified hostname for the airgap support VM. For example, `palette.example.com`. The default value is `ubuntuguest`. | Yes |
| **Url to seed instance data from** | You can specify a URL to seed instance data from. You can leave this value empty. | No |
-12. Review the details and click on **Finish** to deploy the airgap support VM.
+9. Review the details and click on **Finish** to deploy the airgap support VM.
-13. It takes a while for the airgap support VM to deploy, approximately 45 min or more depending on your internet
+10. It takes a while for the airgap support VM to deploy, approximately 45 min or more depending on your internet
connection. The download of the OVA takes up majority of the time. The image is over 30 GB and contains all the
dependencies required to deploy a Palette. Once the deployment is complete, the airgap support VM is displayed in
the vSphere inventory. The VM will be powered off. Power on the VM to continue.
-14. SSH into the airgap support VM. Use the following command to SSH into the VM. Replace the IP address below with the
+11. SSH into the airgap support VM. Use the following command to SSH into the VM. Replace the IP address below with the
IP address or hostname of the airgap support VM. The default user account is `ubuntu`. Replace the path to the
private SSH key and the IP address with the IP address or domain name of the airgap support VM.
```shell
- ssh -identity_file /path/to/private/key ubuntu@palette.example.com
+ ssh -i /path/to/private/key ubuntu@palette.example.com
```
-15. Change the password for the `ubuntu` user account. You will be prompted to change the password the first time you
+12. Change the password for the `ubuntu` user account. You will be prompted to change the password the first time you
log in through SSH. The new password must meet the following requirements:
- At least 14 characters long
@@ -177,7 +132,7 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
- At least 1 number
- At least 1 special character
-16. Once you change the password, the SSH session will be terminated. SSH back into the airgap support VM with the new
+13. Once you change the password, the SSH session will be terminated. SSH back into the airgap support VM with the new
password.
:::info
@@ -192,7 +147,7 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
Connection to palette.example.com closed.
```
-17. If you want to assign a static IP address to the airgap support VM, you can do so now. Click on the box below to
+14. If you want to assign a static IP address to the airgap support VM, you can do so now. Click on the box below to
expand the instructions. Otherwise, proceed to the next step.
@@ -250,13 +205,13 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
-18. Switch to the `root` user account. You will need to use the `root` user account to complete the remaining steps.
+15. Switch to the `root` user account. You will need to use the `root` user account to complete the remaining steps.
```shell
sudo --login
```
-19. If you have custom SSL certificates you want to apply to the image and pack registry, and the Spectro Cloud
+16. If you have custom SSL certificates you want to apply to the image and pack registry, and the Spectro Cloud
Repository, copy the custom SSL certificates, in base64 PEM format, to the airgap support VM.
If you do not provide a custom SSL certificate, the airgap setup process will generate a self-signed certificate for
@@ -285,7 +240,7 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
- **server.crt**
- **server.key**
-20. Start the airgap initialization process by issuing the following command. The script requires the hostname or IP
+17. Start the airgap initialization process by issuing the following command. The script requires the hostname or IP
address of the airgap support VM. Choose the preferred method for your environment. Be aware that the script will
generate a self-signed certificate for the value you provide.
@@ -366,25 +321,26 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
-21. The output of the script contains credentials and values you will need when completing the installation with the
+18. The output of the script contains credentials and values you will need when completing the installation with the
Palette CLI. If you need to review this information in the future, invoke the script again.
-22. If you have used a release-specific installation OVA, skip this step. Otherwise, if you have used a generic
- installation OVA, use the following command to execute the Palette airgap installation binary.
+19. Next, download the third party binary. Your support representative will provide you with credentials to access the
+ third-party binary. Use the following command to download the third-party binary. Replace the `XXXXX` and `YYYYY`
+ placeholders with the credentials provided to you. Replace the `X.X` placeholder with the version of the third-party
+ binary you are downloading. Ask your support representative for the version of the third-party binary you need.
```shell
- chmod +x airgap-.bin && ./airgap-.bin
+ curl --user XXXXX:YYYYY https://software-private.spectrocloud.com/airgap/thirdparty/airgap-thirdparty-X.X.X.bin \
+ --output airgap-upload.bin
```
- Consider the following example for reference.
+20. Use the following command to start the third-party binary. The third-party binary uploads the release-specific packs
+ and images to the registry configured in step **17** of this guide. This process may take some time to complete.
```shell
- chmod +x airgap-v4.4.14.bin && ./airgap-v4.4.14.bin
+ chmod +x airgap-upload.bin && ./airgap-upload.bin
```
- After the Palette airgap installation binary is verified and uncompressed, it uploads the release-specific packs and
- images to the registry configured in step **20** of this guide. This process may take some time to complete.
-
```text hideClipboard
Verifying archive integrity... 100% MD5 checksums are OK. All good.
Uncompressing Airgap Setup - Version 4.4.14 100%
@@ -398,9 +354,57 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
Once the airgap binary completes its tasks, you will receive a **Setup Completed** success message.
-23. Review the [Additional Packs](../../../airgap/supplemental-packs.md) page and identify any additional packs you want
+21. Review the [Additional Packs](../../../airgap/supplemental-packs.md) page and identify any additional packs you want
to add to your OCI registry. You can also add additional packs after the installation is complete.
+22. Navigate back to the vSphere console and create a vSphere VM and Template folder named `spectro-templates`. Ensure
+ you can access this folder with the user account you plan to use when deploying the VerteX installation. You can
+ choose a different name for the folder if you prefer, but ensure you use the same name when the Palette CLI prompts
+ you for the folder name.
+
+23. Right-click on your cluster or resource group and select **Deploy OVF Template**.
+
+24. In the **Deploy OVF Template** wizard, enter the following URL to import the Operating System (OS) and Kubernetes
+ distribution OVA required for the installation. Contact your support representative to learn if the version of
+ Palette you are installing requires a new OS and Kubernetes OVA.
+
+ Consider the following example for reference.
+
+
+
+
+
+ ```url
+ https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-1294-0.ova
+ ```
+
+
+
+
+ ```url
+ https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-1294-fips.ova
+ ```
+
+
+
+
+ Place the OVA in the **spectro-templates** folder or in the folder you created in step **21**. Append the `r_` prefix,
+ and remove the `.ova` suffix when assigning its name and target location. For example, the final output should look like
+ `r_u-2204-0-k-1294-0`. This naming convention is required for the installation process to identify the OVA. Refer to the
+ [Supplement Packs](../../../airgap/supplemental-packs.md#additional-ovas) page for a list of additional OS OVAs.
+
+ You can terminate the deployment after the OVA is available in the `spectro-templates` folder. Refer to the
+ [Deploy an OVF or OVA Template](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vm-administration/GUID-AFEDC48B-C96F-4088-9C1F-4F0A30E965DE.html)
+ guide for more information about deploying an OVA in vCenter.
+
+:::warning
+
+If you encounter an error message during the OVA deployment stating unable to retrieve manifest or certificate, refer to
+this [known issue](https://kb.vmware.com/s/article/79986) from VMware's knowledge base for guidance on how to resolve
+the issue.
+
+:::
+
You have now completed the preparation steps for an airgap installation. Check out the [Validate](#validate) section to
ensure the airgap setup process is completed successfully. After you validate the airgap setup process completion,
review the [Next Steps](#next-steps).
diff --git a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/install.md b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/install.md
index 53f2933217..68a7ccada6 100644
--- a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/install.md
+++ b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/install.md
@@ -210,17 +210,18 @@ Use the following steps to install Palette.
use the provided VMware credentials to retrieve information from your VMware vSphere environment and present options
for you to select from.
- | **Parameter** | **Description** |
- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- | **Datacenter** | The installer retrieves the Datacenter automatically. |
- | **Folder** | Select the folder that contains the VM instance. |
- | **Cluster** | Select the cluster where you want to deploy Palette. |
- | **Network** | Select the network where you want to deploy Palette. |
- | **Resource Pool** | Select the resource pool where you want to deploy Palette. |
- | **Datastore** | Select the datastore where you want to deploy Palette. |
- | **Fault Domains** | Configure one or more fault domains by selecting values for these properties: Cluster, Network (with network connectivity), Resource Pool, and Storage Type (Datastore or VM Storage Policy). Note that when configuring the Network, if you are using a distributed switch, choose the network that contains the switch. |
- | **NTP Servers** | You can provide a list of Network Time Protocol (NTP) servers. |
- | **SSH Public Keys** | Provide any public SSH keys to access your Palette VMs. This option opens up your system's default text editor. Vi is the default text editor for most Linux distributions. To review basic vi commands, check out the [vi Commands](https://www.cs.colostate.edu/helpdocs/vi.html) reference. |
+ | **Parameter** | **Description** |
+ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | **Datacenter** | The installer retrieves the Datacenter automatically. |
+ | **Folder** | Select the folder that contains the VM instance. |
+ | **Image Template Folder** | Select the folder that contains the CAPI image templates. |
+ | **Cluster** | Select the cluster where you want to deploy Palette. |
+ | **Network** | Select the network where you want to deploy Palette. |
+ | **Resource Pool** | Select the resource pool where you want to deploy Palette. |
+ | **Datastore** | Select the datastore where you want to deploy Palette. |
+ | **Fault Domains** | Configure one or more fault domains by selecting values for these properties: Cluster, Network (with network connectivity), Resource Pool, and Storage Type (Datastore or VM Storage Policy). Note that when configuring the Network, if you are using a distributed switch, choose the network that contains the switch. |
+ | **NTP Servers** | You can provide a list of Network Time Protocol (NTP) servers. |
+ | **SSH Public Keys** | Provide any public SSH keys to access your Palette VMs. This option opens up your system's default text editor. Vi is the default text editor for most Linux distributions. To review basic vi commands, check out the [vi Commands](https://www.cs.colostate.edu/helpdocs/vi.html) reference. |
12. Specify the IP pool configuration. The placement type can be Static or Dynamic Host Configuration Protocol (DHCP).
Choosing static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DHCP assigns IP
diff --git a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/install.md b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/install.md
index 418a0fbd32..ecf6171ca7 100644
--- a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/install.md
+++ b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/install.md
@@ -182,17 +182,18 @@ Use the following steps to install Palette.
use the provided VMware credentials to retrieve information from your VMware vSphere environment and present options
for you to select from.
- | **Parameter** | **Description** |
- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- | **Datacenter** | The installer retrieves the Datacenter automatically. |
- | **Folder** | Select the folder that contains the VM instance. |
- | **Cluster** | Select the cluster where you want to deploy Palette. |
- | **Network** | Select the network where you want to deploy Palette. |
- | **Resource Pool** | Select the resource pool where you want to deploy Palette. |
- | **Datastore** | Select the datastore where you want to deploy Palette. |
- | **Fault Domains** | Configure one or more fault domains by selecting values for these properties: Cluster, Network (with network connectivity), Resource Pool, and Storage Type (Datastore or VM Storage Policy). Note that when configuring the Network, if you are using a distributed switch, choose the network that contains the switch. |
- | **NTP Servers** | You can provide a list of Network Time Protocol (NTP) servers. |
- | **SSH Public Keys** | Provide any public SSH keys to access your Palette VMs. This option opens up your system's default text editor. Vi is the default text editor for most Linux distributions. To review basic vi commands, check out the [vi Commands](https://www.cs.colostate.edu/helpdocs/vi.html) reference. |
+ | **Parameter** | **Description** |
+ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | **Datacenter** | The installer retrieves the Datacenter automatically. |
+ | **Folder** | Select the folder that contains the VM instance. |
+ | **Image Template Folder** | Select the folder that contains the CAPI image templates. |
+ | **Cluster** | Select the cluster where you want to deploy Palette. |
+ | **Network** | Select the network where you want to deploy Palette. |
+ | **Resource Pool** | Select the resource pool where you want to deploy Palette. |
+ | **Datastore** | Select the datastore where you want to deploy Palette. |
+ | **Fault Domains** | Configure one or more fault domains by selecting values for these properties: Cluster, Network (with network connectivity), Resource Pool, and Storage Type (Datastore or VM Storage Policy). Note that when configuring the Network, if you are using a distributed switch, choose the network that contains the switch. |
+ | **NTP Servers** | You can provide a list of Network Time Protocol (NTP) servers. |
+ | **SSH Public Keys** | Provide any public SSH keys to access your Palette VMs. This option opens up your system's default text editor. Vi is the default text editor for most Linux distributions. To review basic vi commands, check out the [vi Commands](https://www.cs.colostate.edu/helpdocs/vi.html) reference. |
15. Specify the IP pool configuration. The placement type can be Static or Dynamic Host Configuration Protocol (DHCP).
Choosing static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DHCP assigns IP
diff --git a/docs/docs-content/enterprise-version/upgrade/upgrade-vmware/airgap.md b/docs/docs-content/enterprise-version/upgrade/upgrade-vmware/airgap.md
index b11913a241..b16d257b91 100644
--- a/docs/docs-content/enterprise-version/upgrade/upgrade-vmware/airgap.md
+++ b/docs/docs-content/enterprise-version/upgrade/upgrade-vmware/airgap.md
@@ -90,13 +90,13 @@ steps one through four. Otherwise, start at step five.
your private SSH key, your username, and the IP or domain of the airgap support VM. The default username is `ubuntu`.
```shell
- ssh -identity_file ubuntu@
+ ssh -i ubuntu@
```
Consider the following command example for reference.
```shell
- ssh -identity_file /docs/ssh-private-key.pem ubuntu@palette.example.com
+ ssh -i /docs/ssh-private-key.pem ubuntu@palette.example.com
```
6. Use the following command to switch to the `root` user account, which you need to proceed with the upgrade.
diff --git a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/checklist.md b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/checklist.md
index 9aec39d3fe..7709c90f86 100644
--- a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/checklist.md
+++ b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/checklist.md
@@ -12,7 +12,7 @@ keywords: ["self-hosted", "enterprise"]
---
Use the following checklist to ensure you have completed all the required steps before deploying the airgap Palette
-installation.
+installation. Review this checklist with your VerteX support team to ensure you have all the required assets.
- [ ] Create a vSphere VM and Template folder named `spectro-templates`.
@@ -34,6 +34,8 @@ installation.
- [ ] Review the list of [pack binaries](../../airgap/supplemental-packs.md) to download and upload to your OCI
registry.
+- [ ] Download the required third-party binary that contains the core packs and images required for the installation.
+
- [ ] If you have custom SSL certificates you want to include, copy the custom SSL certificates, in base64 PEM format,
to the support VM. The custom certificates must be placed in the **/opt/spectro/ssl** folder. Include the
following files:
diff --git a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/environment-setup/vmware-vsphere-airgap-instructions.md b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/environment-setup/vmware-vsphere-airgap-instructions.md
index 965a573ae8..bb350eefcb 100644
--- a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/environment-setup/vmware-vsphere-airgap-instructions.md
+++ b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/environment-setup/vmware-vsphere-airgap-instructions.md
@@ -34,6 +34,7 @@ VerteX.
- If you are using a generic OVA, ensure you download the airgap VerteX installation binary for the version of VerteX
you plan to install.
- An OVA with the operating system and Kubernetes distribution required for the VerteX nodes.
+ - The third-party binary that contains the core packs and images required for the installation.
For sensitive environments, you can download the OVAs to a system with internet access and then transfer them to your
airgap environment.
@@ -81,71 +82,24 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
1. Log in to your vCenter environment.
-2. Create a vSphere VM and Template folder named `spectro-templates`. Ensure you can access this folder with the user
- account you plan to use when deploying the VerteX installation.
-
-3. Right-click on your cluster or resource group and select **Deploy OVF Template**.
-
-4. In the **Deploy OVF Template** wizard, enter the following URL to import the Operating System (OS) and Kubernetes
- distribution OVA required for the installation. Contact your support representative to learn if the version of
- VerteX you are installing requires a new OS and Kubernetes OVA.
-
- Consider the following example for reference.
-
-
-
-
-
- ```url
- https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-1294-0.ova
- ```
-
-
-
-
- ```url
- https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-1294-fips.ova
- ```
-
-
-
-
- Place the OVA in the **spectro-templates** folder. Append the `r_` prefix, and remove the `.ova` suffix when
- assigning its name and target location. For example, the final output should look like `r_u-2204-0-k-1294-0`. This
- naming convention is required for the installation process to identify the OVA. Refer to the
- [Supplement Packs](../../../airgap/supplemental-packs.md) page for a list of additional OS OVAs.
-
- You can terminate the deployment after the OVA is available in the `spectro-templates` folder. Refer to the
- [Deploy an OVF or OVA Template](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vm-administration/GUID-AFEDC48B-C96F-4088-9C1F-4F0A30E965DE.html)
- guide for more information about deploying an OVA in vCenter.
-
- :::warning
-
- You may encounter an error message during the OVA deployment stating unable to retrieve manifest or certificate.
- This is a known issue that was fixed in the
- [VMware vCenter Server 7.0 Update 3q](https://docs.vmware.com/en/VMware-vSphere/7.0/rn/vsphere-vcenter-server-70u3q-release-notes/index.html).
- Reach out to [Broadcom Support](https://support.broadcom.com) if you need further guidance.
-
- :::
-
-5. Next, deploy the airgap installation OVA by using the **Deploy OVF Template** wizard again in vSphere. Insert the
- VerteX install OVA URL in the **URL** field. The URL is provided to you by your Palette support representative.
- Click on **Next** to continue.
+2. Deploy the airgap installation OVA by using the **Deploy OVF Template** wizard again in vSphere. Insert the VerteX
+ install OVA URL in the **URL** field. The URL is provided to you by your Palette support representative. Click on
+ **Next** to continue.
![View of the OVF deploy wizard](/vertex_airgap_vmware-vsphere-airgap-instructions_ovf-wizard.webp)
-6. Assign a name to the virtual machine and select a target location. Click on **Next** to continue.
+3. Assign a name to the virtual machine and select a target location. Click on **Next** to continue.
-7. Select a compute resource and click on **Next** to continue.
+4. Select a compute resource and click on **Next** to continue.
-8. Review the details and click on **Ignore All** to dismiss any warning messages. The OVA contains a self-signed
+5. Review the details and click on **Ignore All** to dismiss any warning messages. The OVA contains a self-signed
certificate, which causes vSphere to issue a warning. Click on **Next** to continue.
-9. Select the storage location and click on **Next** to continue.
+6. Select the storage location and click on **Next** to continue.
-10. Select the network and click on **Next** to continue.
+7. Select the network and click on **Next** to continue.
-11. The last step is to customize the template. Review the table below to learn more about each field. Click on **Next**
+8. The last step is to customize the template. Review the table below to learn more about each field. Click on **Next**
after you have completed the customization to continue.
| Parameter | Description | Required |
@@ -157,22 +111,22 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
| **Hostname** | Enter a fully qualified hostname for the airgap support VM. For example, `vertex.example.com`. The default value is `ubuntuguest`. | Yes |
| **Url to seed instance data from** | You can specify a URL to seed instance data from. You can leave this value empty. | No |
-12. Review the details and click on **Finish** to deploy the airgap support VM.
+9. Review the details and click on **Finish** to deploy the airgap support VM.
-13. It takes a while for the airgap support VM to deploy, approximately 45 min or more depending on your internet
+10. It takes a while for the airgap support VM to deploy, approximately 45 min or more depending on your internet
connection. The download of the OVA takes up majority of the time. The image is over 30 GB and contains all the
dependencies required to deploy a VerteX. Once the deployment is complete, the airgap support VM is displayed in the
vSphere inventory. The VM will be powered off. Power on the VM to continue.
-14. SSH into the airgap support VM. Use the following command to SSH into the VM. Replace the IP address below with the
+11. SSH into the airgap support VM. Use the following command to SSH into the VM. Replace the IP address below with the
IP address or hostname of the airgap support VM. The default user account is `ubuntu`. Replace the path to the
private SSH key and the IP address with the IP address or domain name of the airgap support VM.
```shell
- ssh -identity_file /path/to/private/key ubuntu@vertex.example.com
+ ssh -i /path/to/private/key ubuntu@vertex.example.com
```
-15. Change the password for the `ubuntu` user account. You will be prompted to change the password the first time you
+12. Change the password for the `ubuntu` user account. You will be prompted to change the password the first time you
log in through SSH. The new password must meet the following requirements:
- At least 14 characters long
@@ -182,7 +136,7 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
- At least 1 number
- At least 1 special character
-16. Once you change the password, the SSH session will be terminated. SSH back into the airgap support VM with the new
+13. Once you change the password, the SSH session will be terminated. SSH back into the airgap support VM with the new
password.
:::info
@@ -197,7 +151,7 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
Connection to vertex.example.com closed.
```
-17. If you want to assign a static IP address to the airgap support VM, you can do so now. Click on the box below to
+14. If you want to assign a static IP address to the airgap support VM, you can do so now. Click on the box below to
expand the instructions. Otherwise, proceed to the next step.
@@ -255,13 +209,13 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
-18. Switch to the `root` user account. You will need to use the `root` user account to complete the remaining steps.
+15. Switch to the `root` user account. You will need to use the `root` user account to complete the remaining steps.
```shell
sudo --login
```
-19. If you have custom SSL certificates you want to apply to the image and pack registry, and the Spectro Cloud
+16. If you have custom SSL certificates you want to apply to the image and pack registry, and the Spectro Cloud
Repository, copy the custom SSL certificates, in base64 PEM format, to the airgap support VM.
If you do not provide a custom SSL certificate, the airgap setup process will generate a self-signed certificate for
@@ -290,7 +244,7 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
- **server.crt**
- **server.key**
-20. Start the airgap initialization process by issuing the following command. The script requires the hostname or IP
+17. Start the airgap initialization process by issuing the following command. The script requires the hostname or IP
address of the airgap support VM. Choose the preferred method for your environment. Be aware that the script will
generate a self-signed certificate for the value you provide.
@@ -371,26 +325,26 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
-21. The output of the script contains credentials and values you will need when completing the installation with the
+18. The output of the script contains credentials and values you will need when completing the installation with the
Palette CLI. If you need to review this information in the future, invoke the script again.
-22. If you have used a release-specific installation OVA, skip this step. Otherwise, if you have used a generic
- installation OVA, use the following command to execute the Palette VerteX airgap installation binary.
+19. Next, download the third party binary. Your support representative will provide you with credentials to access the
+ third-party binary. Use the following command to download the third-party binary. Replace the `XXXXX` and `YYYYY`
+ placeholders with the credentials provided to you. Replace the `X.X` placeholder with the version of the third-party
+ binary you are downloading. Ask your support representative for the version of the third-party binary you need.
```shell
- chmod +x airgap-vertex-.bin && ./airgap-vertex-.bin
+ curl --user XXXXX:YYYYY https://software-private.spectrocloud.com/airgap/thirdparty/airgap-thirdparty-X.X.X.bin \
+ --output airgap-upload.bin
```
- Consider the following example for reference.
+20. Use the following command to start the third-party binary. The third-party binary uploads the release-specific packs
+ and images to the registry configured in step **17** of this guide. This process may take some time to complete.
```shell
- chmod +x airgap-vertex-v4.4.14.bin && ./airgap-vertex-v4.4.14.bin
+ chmod +x airgap-upload.bin && ./airgap-upload.bin
```
- After the Palette VerteX airgap installation binary is verified and uncompressed, it uploads the release-specific
- packs and images to the registry configured in step **20** of this guide. This process may take some time to
- complete.
-
```text hideClipboard
Verifying archive integrity... 100% MD5 checksums are OK. All good.
Uncompressing Airgap Setup - Version 4.4.14 100%
@@ -402,11 +356,63 @@ The default container runtime for OVAs is [Podman](https://podman.io/), not Dock
Setup Completed
```
+ Once the airgap binary completes its tasks, you will receive a **Setup Completed** success message.
+
Once the Palette VerteX airgap binary completes its tasks, you will receive a **Setup Completed** success message.
-23. Review the [Additional Packs](../../../airgap/supplemental-packs.md) page and identify any additional packs you want
+21. Review the [Additional Packs](../../../airgap/supplemental-packs.md) page and identify any additional packs you want
to add to your OCI registry. You can also add additional packs after the installation is complete.
+22. Navigate back to the vSphere console and create a vSphere VM and Template folder named `spectro-templates`. Ensure
+ you can access this folder with the user account you plan to use when deploying the VerteX installation. You can
+ choose a different name for the folder if you prefer, but ensure you use the same name when the Palette CLI prompts
+ you for the folder name.
+
+23. Next, right-click on your cluster or resource group and select **Deploy OVF Template**.
+
+24. In the **Deploy OVF Template** wizard, enter the following URL to import the Operating System (OS) and Kubernetes
+ distribution OVA required for the installation. Contact your support representative to learn if the version of
+ VerteX you are installing requires a new OS and Kubernetes OVA.
+
+ Consider the following example for reference.
+
+
+
+
+
+ ```url
+ https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-1294-0.ova
+ ```
+
+
+
+
+ ```url
+ https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-1294-fips.ova
+ ```
+
+
+
+
+ Place the OVA in the **spectro-templates** folder or in the folder you created in step **21**. Append the `r_`
+ prefix, and remove the `.ova` suffix when assigning its name and target location. For example, the final output
+ should look like `r_u-2204-0-k-1294-0`. This naming convention is required for the installation process to identify
+ the OVA. Refer to the [Supplement Packs](../../../airgap/supplemental-packs.md) page for a list of additional OS
+ OVAs.
+
+ You can terminate the deployment after the OVA is available in the `spectro-templates` folder. Refer to the
+ [Deploy an OVF or OVA Template](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vm-administration/GUID-AFEDC48B-C96F-4088-9C1F-4F0A30E965DE.html)
+ guide for more information about deploying an OVA in vCenter.
+
+ :::warning
+
+ You may encounter an error message during the OVA deployment stating unable to retrieve manifest or certificate.
+ This is a known issue that was fixed in the
+ [VMware vCenter Server 7.0 Update 3q](https://docs.vmware.com/en/VMware-vSphere/7.0/rn/vsphere-vcenter-server-70u3q-release-notes/index.html).
+ Reach out to [Broadcom Support](https://support.broadcom.com) if you need further guidance.
+
+ :::
+
You have now completed the preparation steps for an airgap installation. Check out the [Validate](#validate) section to
ensure the airgap setup process is completed successfully. After you validate the airgap setup process completion,
review the [Next Steps](#next-steps).
diff --git a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md
index bf208248b5..59e4985513 100644
--- a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md
+++ b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md
@@ -257,6 +257,7 @@ Use the following steps to install Palette VerteX.
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Datacenter** | The installer retrieves the Datacenter automatically. |
| **Folder** | Select the folder that contains the VM instance. |
+ | **Image Template Folder** | Select the folder that contains the CAPI image templates. |
| **Cluster** | Select the cluster where you want to deploy Palette. |
| **Network** | Select the network where you want to deploy Palette. |
| **Resource Pool** | Select the resource pool where you want to deploy Palette. |
diff --git a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md
index 3a6307ac58..efa2f4f12c 100644
--- a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md
+++ b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md
@@ -228,6 +228,7 @@ Use the following steps to install Palette VerteX.
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Datacenter** | The installer retrieves the Datacenter automatically. |
| **Folder** | Select the folder that contains the VM instance. |
+ | **Image Template Folder** | Select the folder that contains the CAPI image templates. |
| **Cluster** | Select the cluster where you want to deploy Palette. |
| **Network** | Select the network where you want to deploy Palette. |
| **Resource Pool** | Select the resource pool where you want to deploy Palette. |
diff --git a/docs/docs-content/vertex/upgrade/upgrade-vmware/airgap.md b/docs/docs-content/vertex/upgrade/upgrade-vmware/airgap.md
index 98b61d261a..70d0f41b78 100644
--- a/docs/docs-content/vertex/upgrade/upgrade-vmware/airgap.md
+++ b/docs/docs-content/vertex/upgrade/upgrade-vmware/airgap.md
@@ -92,13 +92,13 @@ one through four. Otherwise, start at step five.
`ubuntu`.
```shell
- ssh -identity_file ubuntu@
+ ssh -i ubuntu@
```
Consider the following command example for reference.
```shell
- ssh -identity_file /docs/ssh-private-key.pem ubuntu@palette.example.com
+ ssh -i /docs/ssh-private-key.pem ubuntu@palette.example.com
```
6. Use the following command to switch to the `root` user account, which you need to proceed with the upgrade.
diff --git a/docs/docs-content/vm-management/install-vmo-in-airgap.md b/docs/docs-content/vm-management/install-vmo-in-airgap.md
index 6b6a5fe68a..2334a3f233 100644
--- a/docs/docs-content/vm-management/install-vmo-in-airgap.md
+++ b/docs/docs-content/vm-management/install-vmo-in-airgap.md
@@ -39,13 +39,13 @@ instance of Palette and Palette VerteX.
your private SSH key, username, and the IP or domain of the airgap support VM. The default username is `ubuntu`.
```shell
- ssh -identity_file @
+ ssh -i @
```
Consider the following command example for reference.
```shell
- ssh -identity_file /docs/ssh-private-key.pem ubuntu@palette.example.com
+ ssh -i /docs/ssh-private-key.pem ubuntu@palette.example.com
```
2. Execute the following command to switch to the `root` user account.
diff --git a/static/assets/docs/images/vertex_airgap_vmware-vsphere-airgap-instructions_order-operations.webp b/static/assets/docs/images/vertex_airgap_vmware-vsphere-airgap-instructions_order-operations.webp
index 4ce705efadbe3ae160464e7f582cf00cf5780948..ef490276fbc9a879c08c9fe3dffa65fd8aecb7c6 100644
GIT binary patch
literal 40846
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