sparse-intern-71089
03/07/2021, 8:35 PMbillowy-army-68599
clever-cartoon-41433
03/07/2021, 8:47 PMconst config = new loft.LoftKubeconfig("stack", {
spaceName: ns.metadata.name,
vclusterName: virKube.metadata.name,
}, {dependsOn: virKube})
return new k8s.Provider("loftK8s", {
kubeconfig: config.data,
cluster: config.clusterName,
context: config.ctx,
}, {dependsOn: config})
billowy-army-68599
config.data
is just a standard kubeconfig string?clever-cartoon-41433
03/07/2021, 8:50 PMclever-cartoon-41433
03/07/2021, 8:51 PMbillowy-army-68599
broad-dog-22463
03/07/2021, 8:53 PMbroad-dog-22463
03/07/2021, 8:53 PMclever-cartoon-41433
03/07/2021, 8:53 PMbroad-dog-22463
03/07/2021, 8:57 PMbroad-dog-22463
03/07/2021, 8:58 PMclever-cartoon-41433
03/07/2021, 8:58 PMclever-cartoon-41433
03/07/2021, 8:59 PMclever-cartoon-41433
03/07/2021, 9:00 PMimport * as pulumi from "@pulumi/pulumi";
import * as child_process from "child_process";
export interface LoftKubeconfigOptions {
spaceName: pulumi.Input<string> //Name of namespace where vcluster is located
vclusterName: pulumi.Input<string> //name of vcluster itself
}
interface LoftKubeconfigDynamicProviderInputs {
spaceName: string; //Name of namespace where vcluster is located
vclusterName: string //name of vcluster itself
}
class LoftKubeconfigResourceProvider implements pulumi.dynamic.ResourceProvider {
async create(inputs: LoftKubeconfigDynamicProviderInputs): Promise<pulumi.dynamic.CreateResult> {
return {
id: inputs.spaceName + "-" + inputs.vclusterName,
outs: {
data: child_process.execSync("loft use vcluster " + inputs.vclusterName + " --print --space " + inputs.spaceName + " --cluster loft-cluster --silent"),
...inputs
}
};
}
}
export class LoftKubeconfig extends pulumi.dynamic.Resource {
public readonly spaceName!: pulumi.Output<string> //Name of namespace where vcluster is located
public readonly vclusterName!: pulumi.Output<string> //name of vcluster itself
//Other outputs
public readonly data!: pulumi.Output<string> //kubeconfig yaml file
public readonly ctx!: pulumi.Output<string> //context in yaml file
public readonly clusterName!: pulumi.Output<string> //context in yaml file
constructor(name: string, args: LoftKubeconfigOptions, opts?: pulumi.CustomResourceOptions) {
super(new LoftKubeconfigResourceProvider(), `loft:vclusterKubeConfig:${name}`, args, pulumi.mergeOptions(opts || {}, {
additionalSecretOutputs: ["config"],
}));
}
}
clever-cartoon-41433
03/07/2021, 9:00 PMclever-cartoon-41433
03/07/2021, 11:18 PMclever-cartoon-41433
03/07/2021, 11:19 PMclever-cartoon-41433
03/07/2021, 11:20 PMclever-cartoon-41433
03/08/2021, 12:07 AMimport * as pulumi from "@pulumi/pulumi";
export interface LoftKubeconfigOptions {
vclusterName: pulumi.Input<string> //name of vcluster itself
}
interface LoftKubeconfigDynamicProviderInputs {
vclusterName: string //name of vcluster itself
}
interface LoftKubeconfigDynamicProviderOutputs extends LoftKubeconfigDynamicProviderInputs {
data: string
}
class LoftKubeconfigResourceProvider implements pulumi.dynamic.ResourceProvider {
async create(inputs: LoftKubeconfigDynamicProviderInputs): Promise<pulumi.dynamic.CreateResult> {
const data = await require('child_process').exec("loft use vcluster " + inputs.vclusterName + " --print --silent").toString('utf8')
const outs: LoftKubeconfigDynamicProviderOutputs = {
vclusterName: inputs.vclusterName,
data: data,
}
return {
id: inputs.vclusterName,
outs: outs
};
}
async read(id: string, props: LoftKubeconfigDynamicProviderOutputs): Promise<pulumi.dynamic.ReadResult> {
const data = await require('child_process').exec("loft use vcluster " + props.vclusterName + " --print --silent").toString('utf8')
props.data = data
return {
id: id,
props: props,
};
}
}
export class LoftKubeconfig extends pulumi.dynamic.Resource {
public readonly vclusterName!: pulumi.Output<string> //name of vcluster itself
public readonly data!: pulumi.Output<string> //kubeconfig yaml file
constructor(name: string, args: LoftKubeconfigOptions, opts?: pulumi.CustomResourceOptions) {
super(new LoftKubeconfigResourceProvider(), `loft:vclusterKubeConfig:${name}`, args, pulumi.mergeOptions(opts || {}, {
additionalSecretOutputs: ["data"],
}));
}
}
(index.ts):
...
const config12 = new loft.LoftKubeconfig("main12", {
vclusterName: virKube.metadata.name,
}, {dependsOn: virKube})
config12.data.apply(v => {
return v
}) //Crash happens here
...
clever-cartoon-41433
03/08/2021, 12:49 AMclever-cartoon-41433
03/08/2021, 1:38 AMclever-cartoon-41433
03/08/2021, 1:39 AMNo matter how you like to participate in developer communities, Pulumi wants to meet you there. If you want to meet other Pulumi users to share use-cases and best practices, contribute code or documentation, see us at an event, or just tell a story about something cool you did with Pulumi, you are part of our community.
Powered by