vSphere Component VspherePublisher clones one VM per publisher name from an existing template and passes registration data through guestinfo cloud-init.
Inputs Required:
datacenter
datastore
networkName
templateName
either cluster or host
tenantUrl and apiToken, unless registrations is provided
Optional inputs include folder, numCpus, memory, tags,namePrefix, names, replicas, and wizardPath.
Prepare the template from the official Netskope OVA:
1 https://s3-us-west-2.amazonaws.com/publisher.netskope.com/latest/NetskopePrivateAccessPublisher.ova
The template must have VMware guestinfo cloud-init support enabled.
Outputs
publisherNames
secret publishers
Pulumi CLI 1 2 3 4 5 6 7 8 9 10 11 12 pulumi new typescript pulumi config set vsphere:user administrator@vsphere.local pulumi config set vsphere:password --secret pulumi config set vsphere:vsphereServer vcsa.lab.local pulumi config set netskope:tenantUrl https://tenant.goskope.com pulumi config set netskope:apiToken --secret pulumi config set datacenter Lab pulumi config set datastore datastore1 pulumi config set networkName VM Network pulumi config set templateName npa-publisher-template pulumi config set cluster Cluster pulumi up
TypeScript 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import * as pulumi from "@pulumi/pulumi" ;import { VspherePublisher } from "@johninnl/pulumi-netskope-publisher" ;const netskope = new pulumi.Config ("netskope" );const config = new pulumi.Config ();const publisher = new VspherePublisher ("publisher" , { namePrefix : "pub-vsphere" , replicas : 2 , tenantUrl : netskope.require ("tenantUrl" ), apiToken : netskope.requireSecret ("apiToken" ), datacenter : config.require ("datacenter" ), datastore : config.require ("datastore" ), networkName : config.require ("networkName" ), templateName : config.require ("templateName" ), cluster : config.require ("cluster" ), folder : config.get ("folder" ), numCpus : 2 , memory : 4096 , }); export const publisherNames = publisher.publisherNames ;export const publishers = pulumi.secret (publisher.publishers );
Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import pulumifrom pulumi_netskope_publisher import VspherePublishernetskope = pulumi.Config("netskope" ) config = pulumi.Config() publisher = VspherePublisher( "publisher" , name_prefix="pub-vsphere" , replicas=2 , tenant_url=netskope.require("tenantUrl" ), api_token=netskope.require_secret("apiToken" ), datacenter=config.require("datacenter" ), datastore=config.require("datastore" ), network_name=config.require("networkName" ), template_name=config.require("templateName" ), cluster=config.require("cluster" ), folder=config.get("folder" ), num_cpus=2 , memory=4096 , ) pulumi.export("publisherNames" , publisher.publisher_names) pulumi.export("publishers" , pulumi.Output.secret(publisher.publishers))
C# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var publisher = new VspherePublisher("publisher" , new VspherePublisherArgs{ NamePrefix = "pub-vsphere" , Replicas = 2 , TenantUrl = netskope.Require("tenantUrl" ), ApiToken = netskope.RequireSecret("apiToken" ), Datacenter = config.Require("datacenter" ), Datastore = config.Require("datastore" ), NetworkName = config.Require("networkName" ), TemplateName = config.Require("templateName" ), Cluster = config.Require("cluster" ), Folder = config.Get("folder" ), NumCpus = 2 , Memory = 4096 , });
Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 publisher, err := netskopepublisher.NewVspherePublisher(ctx, "publisher" , &netskopepublisher.VspherePublisherArgs{ NamePrefix: pulumi.String("pub-vsphere" ), Replicas: pulumi.Int(2 ), TenantUrl: pulumi.String(netskope.Require("tenantUrl" )), ApiToken: netskope.RequireSecret("apiToken" ), Datacenter: pulumi.String(cfg.Require("datacenter" )), Datastore: pulumi.String(cfg.Require("datastore" )), NetworkName: pulumi.String(cfg.Require("networkName" )), TemplateName: pulumi.String(cfg.Require("templateName" )), Cluster: pulumi.String(cfg.Require("cluster" )), Folder: pulumi.StringPtr(cfg.Get("folder" )), NumCpus: pulumi.Int(2 ), Memory: pulumi.Int(4096 ), }) if err != nil { return err } ctx.Export("publisherNames" , publisher.PublisherNames) ctx.Export("publishers" , pulumi.ToSecret(publisher.Publishers))
Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 var publisher = new VspherePublisher ("publisher" , VspherePublisherArgs.builder() .namePrefix("pub-vsphere" ) .replicas(2 ) .tenantUrl(netskope.require("tenantUrl" )) .apiToken(netskope.requireSecret("apiToken" )) .datacenter(config.require("datacenter" )) .datastore(config.require("datastore" )) .networkName(config.require("networkName" )) .templateName(config.require("templateName" )) .cluster(config.require("cluster" )) .folder(config.get("folder" ).orElse(null )) .numCpus(2 ) .memory(4096 ) .build()); ctx.export("publisherNames" , publisher.publisherNames()); ctx.export("publishers" , Output.secret(publisher.publishers()));
Rust 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 let publisher = netskope::vsphere_publisher::create ( ctx, "publisher" , netskope::vsphere_publisher::VspherePublisherArgs::builder () .name_prefix ("pub-vsphere" ) .replicas (2 ) .tenant_url ("https://tenant.goskope.com" ) .api_token ("secret-token" ) .datacenter ("Lab" ) .datastore ("datastore1" ) .network_name ("VM Network" ) .template_name ("npa-publisher-template" ) .cluster ("Cluster" ) .num_cpus (2 ) .memory (4096 ) .build_struct (), ); add_export ("publisherNames" , &publisher.publisher_names);add_export ("publishers" , &publisher.publishers);