Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
//
// Note that the VPC has been tagged appropriately.
const defaultVpc = new aws.ec2.Vpc("default", {
cidrBlock: "10.0.0.0/16", // Just one CIDR block
enableDnsHostnames: true, // Definitely want DNS hostnames.
// The tag collection for this VPC.
tags: {
// Ensure that we tag this VPC with a Name.
Name: "test",
},
});
// Use some data sources.
const defaultSubnetIds = defaultVpc.id.apply(id => aws.ec2.getSubnetIds({
vpcId: id,
}, { async: true }));
const defaultAvailabilityZones = pulumi.output(aws.getAvailabilityZones({ async: true }));
const defaultAvailabilityZone: pulumi.Output[] = [];
for (let i = 0; i < defaultAvailabilityZones.apply(defaultAvailabilityZones => defaultAvailabilityZones.ids.length); i++) {
defaultAvailabilityZone.push(defaultAvailabilityZones.apply(defaultAvailabilityZones => aws.getAvailabilityZone({
zoneId: defaultAvailabilityZones.zoneIds[i],
}, { async: true })));
}
// The VPC details
const vpc = [{
// The ID
id: defaultVpc.id,
}];
// The region, again
const region = awsRegion; // why not
// Create a security group.
//
// This group should allow SSH and HTTP access.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import * as pulumi from "@pulumi/pulumi";
import * as k8s from "@pulumi/kubernetes";
const config = new pulumi.Config();
const pw = config.requireSecret("message");
const rawPW = config.require("message");
const cmData = new k8s.core.v1.ConfigMap("cmdata", {
data: {
password: pw,
}
});
const cmBinaryData = new k8s.core.v1.ConfigMap("cmbinarydata", {
binaryData: {
password: pw.apply(d => Buffer.from(d).toString("base64")),
}
});
// Copyright 2016-2018, Pulumi Corporation. All rights reserved.
import * as pulumi from "@pulumi/pulumi";
class Resource extends pulumi.ComponentResource {
constructor(name: string, opts?: pulumi.ComponentResourceOptions) {
super("my:module:Resource", name, {}, opts);
}
}
// Scenario #4 - change the type of a component
class ComponentFour extends pulumi.ComponentResource {
resource: Resource;
constructor(name: string, opts?: pulumi.ComponentResourceOptions) {
// Add an alias that references the old type of this resource...
const aliases = [{ type: "my:module:ComponentFour" }, ...((opts && opts.aliases) || [])];
// ..and then make the super call with the new type of this resource and the added alias.
super("my:differentmodule:ComponentFourWithADifferentTypeName", name, {}, { ...opts, aliases });
// The child resource will also pick up an implicit alias due to the new type of the component it is parented
// to.
this.resource = new Resource("otherchild", { parent: this });
}
}
const comp4 = new ComponentFour("comp4");
// Copyright 2016-2018, Pulumi Corporation. All rights reserved.
import * as pulumi from "@pulumi/pulumi";
class Resource extends pulumi.ComponentResource {
constructor(name: string, opts?: pulumi.ComponentResourceOptions) {
super("my:module:Resource", name, {}, opts);
}
}
// Scenario #3 - rename a component (and all it's children)
class ComponentThree extends pulumi.ComponentResource {
resource1: Resource;
resource2: Resource;
constructor(name: string, opts?: pulumi.ComponentResourceOptions) {
super("my:module:ComponentThree", name, {}, opts);
// Note that both un-prefixed and parent-name-prefixed child names are supported. For the later, the implicit
// alias inherited from the parent alias will include replacing the name prefix to match the parent alias name.
this.resource1 = new Resource(`${name}-child`, {parent: this});
this.resource2 = new Resource("otherchild", {parent: this});
}
}
const comp3 = new ComponentThree("comp3");
// Copyright 2016-2018, Pulumi Corporation. All rights reserved.
import * as pulumi from "@pulumi/pulumi";
const stackName = pulumi.getStack();
const projectName = pulumi.getProject();
class Resource extends pulumi.ComponentResource {
constructor(name: string, opts?: pulumi.ComponentResourceOptions) {
super("my:module:Resource", name, {}, opts);
}
}
// Scenario #1 - rename a resource
// This resource was previously named `one`, we'll alias to the old name.
const res1 = new Resource("newres1", {
aliases: [`urn:pulumi:${stackName}::${projectName}::my:module:Resource::res1`],
});
// Scenario #2 - adopt a resource into a component The component author is the same as the component user, and changes
// the component to be able to adopt the resource that was previously defined separately...
// Copyright 2016-2018, Pulumi Corporation. All rights reserved.
import * as pulumi from "@pulumi/pulumi";
const stackName = pulumi.getStack();
if (!stackName) {
// We can't check for a specific stack name, since it is autogenerated by the test framework. But
// we *can* verify that it isn't blank.
throw new Error("Empty pulumi.getStack() at runtime");
}
const expName = "stack_project_name";
const projName = pulumi.getProject();
if (projName !== expName) {
throw new Error(`Unexpected pulumi.getProject(); wanted '${expName}', got '${projName}'`);
}
import * as pulumi from "@pulumi/pulumi";
export const normal = pulumi.output("normal");
export const secret = pulumi.secret("secret");
// Kinda strange, but we are getting a stack reference to ourselves, and refercing the result of the /previous/
// deployment.
const org = new pulumi.Config().require("org");
const project = pulumi.getProject();
const stack = pulumi.getStack();
const sr = new pulumi.StackReference(`${org}/${project}/${stack}`);
export const refNormal = sr.getOutput("normal");
export const refSecret = sr.getOutput("secret");
this.create = async (inputs: any) => {
return {
id: (currentID++).toString(),
outs: undefined,
};
};
}
}
class Component extends pulumi.ComponentResource {
constructor(name: string, parent?: pulumi.ComponentResource) {
super("component", name, {}, { parent: parent });
}
}
class Resource extends pulumi.dynamic.Resource {
constructor(name: string, parent?: pulumi.ComponentResource) {
super(Provider.instance, name, {}, { parent: parent });
}
}
// Just allocate a few resources and make sure their URNs are correct with respect to parents, etc. This
// should form a tree of roughly the following structure:
//
// A F
// / \ \
// B C G
// / \
// D E
//
// with the caveat, of course, that A and F will share a common parent, the implicit stack.
let a = new Component("a");
export class Provider implements pulumi.dynamic.ResourceProvider {
public static readonly instance = new Provider();
public readonly create: (inputs: any) => Promise;
constructor() {
this.create = async (inputs: any) => {
return {
id: (currentID++).toString(),
outs: undefined,
};
};
}
}
export class Resource extends pulumi.dynamic.Resource {
public readonly state?: any;
constructor(name: string, props: ResourceProps, opts?: pulumi.ResourceOptions) {
super(Provider.instance, name, props, opts);
this.state = props.state;
}
}
export interface ResourceProps {
state?: any; // arbitrary state bag that can be updated without replacing.
}
export class Provider implements pulumi.dynamic.ResourceProvider {
public static readonly instance = new Provider();
public readonly create: (inputs: any) => Promise;
constructor() {
this.create = async (inputs: any) => {
return {
id: (currentID++).toString(),
outs: undefined,
};
};
}
}
export class Resource extends pulumi.dynamic.Resource {
constructor(name: string, props: ResourceProps, opts?: pulumi.ResourceOptions) {
super(Provider.instance, name, props, opts);
}
}
export interface ResourceProps {
state?: any; // arbitrary state bag that can be updated without replacing.
}