TL;DR - A powershell script that automates the install of VMware Tanzu Platform, a private PaaS which includes GenAI capabilities, on VMware vSphere with minimal resource requirements.
The installer takes minimum set of parameters, validates them, and then performs the install of the platform which includes VMware Tanzu Operations Manager, BOSH Director, Cloud Foundry runtime, VMware Postgres, and GenAI service with models that have embedding, chat, and tools capabilities. Optionally, Tanzu Healthwatch (observability) and Tanzu Hub (global control plane) can be installed.
Note:
- The script uses what is known as the Small Footprint Tanzu Platform for Cloud Foundry which is a repackaging of Tanzu Platform for Cloud Foundry into a smaller deployment with fewer VMs which is perfect for POC and sandbox work.
- There are some limitations with small footprint which can be found here.
For a much more comprehensive automated install of Tanzu Platform, which uses Concourse, check out the Platform Automation Toolkit for Tanzu
VMware vSphere
- ESXi host/cluster (ESXi v7.x or v8.x) with the following spare capacity...
- Compute: ~51 vCPU, although only uses approx 5 GHz
- Memory: ~85 GB
- Storage: ~380 GB
- User / service account with at least the following privileges
Networking
-
IP addresses
- A subnet with at least 13 free IP addresses including two static IP addresses
- 1x Tanzu Operations Manger
- 1x GoRouter
- A subnet with at least 13 free IP addresses including two static IP addresses
-
DNS
- 3 records created
- 1x VMware Tanzu Operations Manager eg opsman.tanzu.lab
- 1x Tanzu Platform system wildcard eg *.sys.tp.tanzu.lab which will resolve to the GoRouter IP
- 1x Tanzu Platfrom apps wildcard eg *.apps.tp.tanzu.lab which will resolve to the GoRouter IP
- 3 records created
-
NTP service
-
Firewall
- Ability to reach ollama.com so Tanzu Platform can download AI models (Note: Airgapped is supported but not covered in this guide & script at present. Please see here for offline model support)
-
Certificates (optional)
- By default, the installer creates a self-signed cert for TLS termination at the GoRouter. A user can provide their own cert if wished. See here for cert requirements.
Entitlement
- If don't already have entitlement to Tanzu Platform, you can request a 90 day trial here
Workstation/jump-host
- Powershell 7 or later installed
- VMware PowerCLI installed eg
Install-Module VMware.PowerCLI - OM CLI installed
- Following files downloaded...
- This repo cloned eg
git clone https://github.com/KeithRichardLee/Tanzu-GenAI-Platform-installer.git
Update each instance of "FILL-ME-IN" in the script. See below for a worked example...
Update the path to the VMware Tanzu Operations Manager (OpsMan) OVA, Tanzu Platform for Cloud Foundry (TPCF) tile, VMware Postgres tile, VMware Tanzu GenAI tile, and OM CLI
### Full Path to Tanzu Operations Manager OVA, TPCF tile, Postgres tile, GenAI tile, and OM CLI
$OpsManOVA = "/Users/Tanzu/Downloads/ops-manager-vsphere-3.1.1.ova"
$TPCFTile = "/Users/Tanzu/Downloads/srt-10.2.1-build.2.pivotal"
$PostgresTile = "/Users/Tanzu/Downloads/postgres-10.1.1-build.1.pivotal"
$GenAITile = "/Users/Tanzu/Downloads/genai-10.2.0.pivotal"
$OMCLI = "/usr/local/bin/om"Update infra config fields
### Infra config
$VIServer = "vcenter.tanzu.lab"
$VIUsername = "administrator@tanzu.lab"
$VIPassword = 'my-super-safe-password!'
$VMDatacenter = "Tanzu-DC"
$VMCluster = "Tanzu-Cluster"
$VMResourcePool = "Tanzu-Platform-RP"
$VMDatastore = "vsanDatastore"
$VirtualSwitchType = "VSS"
$VMNetwork = "tp-network-70"
$VMNetworkCIDR = "10.0.70.0/24"
$VMNetmask = "255.255.255.0"
$VMGateway = "10.0.70.1"
$VMDNS = "10.0.70.1"
$VMNTP = "10.0.70.1"Update Tanzu Platform config fields
### Tanzu Platform config
$OpsManagerAdminPassword = 'my-super-safe-password!'
$OpsManagerIPAddress = "10.0.70.10"
$OpsManagerFQDN = "opsman.tanzu.lab"
$BOSHNetworkReservedRange = "10.0.70.0-10.0.70.2,10.0.70.10,10.0.70.30-10.0.70.254" #add IPs, either individual and/or ranges you _don't_ want BOSH to use in the subnet eg Ops Man, gateway, DNS, NTP, jumpbox
$TPCFGoRouter = "10.0.70.20" #IP which the Tanzu Platform system and apps domain resolves to. Choose an IP towards the end of available IPs
$TPCFDomain = "tp.tanzu.lab" #Tanzu Platform system and apps subdomains will be added to this. Resolves to the GoRouter IP
$TPCFLicenseKey = "" #License key required for 10.2 and laterUpdate Healthwatch fields
- Note; installing Healthwatch (observability) is optional. Installing Healthwatch requires an additional 11 IP addresses, 1 GHz CPU, 16 GB mem, and 100 GB storage.
### Install Healthwatch (observability)?
$InstallHealthwatch = $true
$HealthwatchTile = "/Users/Tanzu/Downloads/healthwatch-2.3.3-build.21.pivotal" #Download from https://support.broadcom.com/group/ecx/productdownloads?subfamily=Healthwatch
$HealthwatchExporterTile = "/Users/Tanzu/Downloads/healthwatch-pas-exporter-2.3.3-build.21.pivotal" #Download from https://support.broadcom.com/group/ecx/productdownloads?subfamily=HealthwatchUpdate Tanzu Hub fields
- Note; installing Tanzu Hub (global control plane) is optional. Installing Tanzu Hub requires an additional 13 IP addresses, 10 GHz CPU, 100 GB mem, and 400 GB storage.
### Install Tanzu Hub (global control plane)?
$InstallHub = $true
$HubTile = "/Users/Tanzu/Downloads/tanzu-hub-10.2.0.pivotal" #Download from https://support.broadcom.com/group/ecx/productdownloads?subfamily=Tanzu%20Hub
$HubFQDN = "hub.tanzu.lab"There are several advanced parameters which can be changed if wished, for example...
Number of compute instances
$TPCFComputeInstances = "1" # default is 1. Increase if planning to run many large appsUser provided cert for GoRouter. With $userProvidedCert set to false (default) the installer creates a self-signed cert
# User provided cert (full chain) and private key for the apps and system wildcard domains
# see https://techdocs.broadcom.com/us/en/vmware-tanzu/platform/tanzu-platform-for-cloud-foundry/10-0/tpcf/security_config.html for details on creating this cert and key
$userProvidedCert = $false
$CertPath = "/Users/Tanzu/certs/fullchain.pem"
$KeyPath = "/Users/Tanzu/certs/privkey.pem"AI models
# Tanzu AI Solutions config
$OllamaEmbedModel = "nomic-embed-text"
$OllamaChatModel = "gemma2:2b"
# Deploy a model with chat and tools capabilities instead of just chat? note; a vm will be created with 16 vCPU and 32 GB mem to run the model
$ToolsModel = $true
$OllamaChatToolsModel = "mistral-nemo:12b-instruct-2407-q4_K_M"-
Open a powershell console eg
pwsh -
Execute the script eg
tanzu-genai-platform-installer.ps1 -
Installation can take up to 3 hours. Install time depends on the performance of your underlying infrastructure.
-
Note; if this is your first time using Powershell with the VMware PowerCLI module, you may be prompted to participate in the VMware CEIP. You can accept/deny so not prompted again by running
Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $true or $false
Below we will deploy a Spring chatbot application which can consume AI services by the platform
-
Retrieve UAA admin credentials
- The script on completion will print out the admin credentials for Tanzu Apps Manager and CF CLI, alternatively, you can retrieve them via Tanzu Operations Manager > Small Footprint Tanzu Platform for Cloud Foundry > Credentials > UAA > Admin Credentials
-
Download CF CLI and login to the platform
- The above script on completion will print out how to download cf cli and how to run
cf login, alternatively, see the install docs and login docs
- The above script on completion will print out how to download cf cli and how to run
-
Create an Org and a Space
- Create an Org
cf create-org tanzu-demos-org
- Create a Space
cf create-space tanzu-demos-space -o tanzu-demos-org
- Target an Org and Space
cf target -o tanzu-demos-org -s tanzu-demos-space
-
Download JDKs & SDKs
- Note; sdkman is a great tool for installing and managing many versions of various JDKs and SDKs
- Java 21 or later
- Install Java 21 if not already installed
sdk install java 21.0.7-oracle
- If already installed, make Java 21 the current candiate version, or which ever candidate version you have installed
sdk use java 21.0.7-oracle
- Maven 3.8 or later
- Install Maven if not already installed
sdk install maven
- If you have Maven already installed, make Maven 3.8 or later the current candiate version, or which ever candidate version you have installed
sdk use maven 3.9.10
-
Download / clone git repos
gh release download v1.4.3 --repo cpage-pivotal/cf-mcp-client -D cf-mcp-client gh repo clone kirtiapte/bitcoin-mcp-server
cd cf-mcp-client
cf push- Retrieve the URL to the app
cf apps- Open the app in a browser and ask it a question!
- View services available
cf marketplace- View genai services available
cf marketplace -e genai- Create a service instance that provides chat LLM capabilities
cf create-service genai chat-and-tools-model chat-llm- Bind the service to the app
cf bind-service ai-tool-chat chat-llm- Restart the app to apply the binding
cf restart ai-tool-chatNow the chatbot will use the LLM to respond to chat requests
Ask it for the current price of bitcoin!
- View genai services available
cf marketplace -e genai- Create a service instance that provides embedding LLM capabilities
cf create-service genai embedding-model embedding-llm- View postgres services available
cf marketplace -e postgres- Create a Postgres service instance to use as a vector database
cf create-service postgres on-demand-postgres-db vector-db- Bind the services to the app
cf bind-service ai-tool-chat embedding-llm
cf bind-service ai-tool-chat vector-dbNote; if it fails to bind the vector-db, it may be that the Postgres DB is still being created from the previous command. You can confirm by running "cf services" and checking the "last operation" field.
- Restart the app to apply the binding
cf restart ai-tool-chat- Click on the document tool on the right-side of the screen, and upload a .PDF File
Now your chatbot will respond to queries about the uploaded document
Model Context Protocol (MCP) servers are lightweight programs that expose specific capabilities to AI models through a standardized interface. These servers act as bridges between LLMs and external tools, data sources, or services, allowing your AI application to perform actions like searching databases, accessing files, or calling external APIs without complex custom integrations.
- Build the app
cd ../bitcoin-mcp-server
mvn clean package- Push the app to the platform
cf push- Retrieve the URL to the bitcoin app
cf apps- Create a user-provided service that provides the URL for the bitcoin MCP server
cf cups bitcoin-mcp-server -p '{"mcpServiceURL":"http://bitcoin-mcp-server.apps.tp.tanzu.lab"}'- Bind the MCP service to your chatbot app
cf bind-service ai-tool-chat bitcoin-mcp-server- Restart your chatbot app
cf restart ai-tool-chatYour chatbot will now register with the MCP server, and the LLM will be able to invoke the agent's capabilities when responding to chat requests
Ask it for the current price of bitcoin
Congratulations, you have come to the end of this quick start guide. We have barely scratched the surface of the GenAI capabilities of the platform, or the vast capabilities of the platform as a whole. To learn more, please see official documentation and resources below.
- VMware Tanzu AI Solutions website
- VMware Tanzu AI Solutions blogs, webinars, videos
- VMware Tanzu Platform Marketplace Services
- How to install MinIO object storage server to host Ollama and vLLM models offline
- VMware Tanzu Operations Manager
- Small Footprint Tanzu Platform for Cloud Foundry
- VMware Tanzu Postgres
- VMware Tanzu GenAI
- VMware Tanzu Healthwatch
- VMware Tanzu Hub
-
An install log can be found where you run the script from with a file name of tanzu-genai-platform-installer.log. It contains verbose logging.
-
If you wish to just install upto a certain component, or skip a step, you can by changing the Installer Overrides flags in the Advanced Parameters section in the script
# Installer Overrides
$confirmDeployment = 1
$preCheck = 1
$deployOpsManager = 1
$setupOpsManager = 1
$setupBOSHDirector = 1
$setupTPCF = 1
$setupPostgres = $InstallTanzuAI
$setupGenAI = $InstallTanzuAI
$setupHealthwatch = $InstallHealthwatch
$setupHub = $InstallHub
$ignoreWarnings = $false- If the install of a component fails due to a permissions/privileges warning (verify in the installer log), you can override the warning by setting the ignoreWarnings flag to $true in the Advanced Parameters section of the script
# Installer Overrides
$ignoreWarnings = $trueIf you find a bug or need help, please open an issue
PR's most welcome too!
Below are the pre-checks the script performs...
-
Files
- VMware Tanzu Operations Manager OVA exists
- VMware Tanzu Platform for Cloud Foundry tile exists
- VMware Tanzu Postgres tile exists
- VMware Tanzu GenAI tile exists
- VMware Tanzu Healthwatch tile exists
- VMware Tanzu Healthwatch Exporter tile exists
- VMware Tanzu Hub tile exists
-
Network
- Network gateway can be reached
- vCenter can be reached
- DNS server can be reached
- NTP server can be reached
- NTP server responds to a NTP query
- Reserved range in valid format
- Enough free IP addresses available
- IP addresses are available
- Tanzu Operations Manager IP is in reserved range
- GoRouter is not in the reserved range
- Tanzu Operations Manager IP is available
- GoRouter IP is available
- Tanzu Operations Manager DNS entry is valid
- Apps domain wildcard DNS entry is valid
- System domain wildcard DNS entry is valid
- Apps domain resolves to GoRouter IP
- System domain resolves to GoRouter IP
- Connectivity to Ollama.com
- User provided cert and key exists
- User provided cert is valid
-
vSphere
- vCenter credentials are valid
- vCenter user / service account has required vSphere API permissions
- Datacenter object is valid
- Resource pool object is valid
- Datastore object is valid
- Portgroup object is valid
- Enough CPU resources available
- Enough memory resources available
- Enough storage available
-
Platform
- VMware Tanzu Operations Manager is not already installed
- BOSH Director is not already installed
- VMware Tanzu Platform for Cloud Foundry is not already installed
- VMware Tanzu Postgres is not already installed
- VMware Tanzu GenAI is not already installed
- VMware Tanzu Healthwatch is not already installed
- VMware Tanzu Healthwatch Exporter is not already installed
- VMware Tanzu Platform license key is in valid format
-
Other
- OM CLI is installed
- PowerCLI module is installed
- ssh-keygen is installed
The script was validated against the following versions...
- Tanzu Operations Manager: ops-manager-vsphere-3.1.1.ova
- Tanzu Platform for Cloud Foundry small footprint: srt-10.2.1-build.2.pivotal
- VMware Postgres: postgres-10.1.1-build.1.pivotal
- Tanzu GenAI: genai-10.2.1.pivotal
- Healthwatch: healthwatch-2.3.3-build.21.pivotal
- Healthwatch Exporter: healthwatch-pas-exporter-2.3.3-build.21.pivotal
- Tanzu Hub: tanzu-hub-10.2.0.pivotal
- OM CLI: 7.16
- Powershell: 7.5.1
- PowerCLI: 13.3.0
- vCenter: 8U3
- CF CLI: 10.2
- cf-mcp-client: 1.4.3
Shoutout to William Lam as used his Nested PKS script from 2018 as inspiration for this script.


