vSphere Component

Java examples use the published
com.pulumi:netskope-publisher
SDK. Rust examples use the published
pulumi-netskope-publisher
crate plus Pulumi Gestalt.

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 bearerToken, 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 YAML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
name: netskope-publisher-vsphere
runtime: yaml
config:
tenantUrl:
type: String
bearerToken:
type: String
secret: true
resources:
publisher:
type: netskope-publisher:index:VspherePublisher
properties:
namePrefix: pub-eu
replicas: 2
tenantUrl: ${tenantUrl}
bearerToken: ${bearerToken}
datacenter: Lab
datastore: datastore1
networkName: VM Network
templateName: npa-publisher-template
cluster: Cluster
outputs:
publisherNames: ${publisher.publisherNames}
publishers: ${publisher.publishers}

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"),
bearerToken: netskope.requireSecret("bearerToken"),
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 pulumi
from pulumi_netskope_publisher import VspherePublisher

netskope = pulumi.Config("netskope")
config = pulumi.Config()

publisher = VspherePublisher(
"publisher",
name_prefix="pub-vsphere",
replicas=2,
tenant_url=netskope.require("tenantUrl"),
bearer_token=netskope.require_secret("bearerToken"),
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"),
BearerToken = netskope.RequireSecret("bearerToken"),
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")),
BearerToken: netskope.RequireSecret("bearerToken"),
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"))
.bearerToken(netskope.requireSecret("bearerToken"))
.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")
.bearer_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);