calm-quill-21760
02/25/2020, 10:23 PMimport * as aws from "@pulumi/aws";
import * as pulumi from "@pulumi/pulumi";
export function generateMachinesYaml(
masters: aws.ec2.Instance[],
workers: aws.ec2.Instance[]
) {
let results: any[] = [];
for (let i = 0; i < masters.length; i++) {
const m = masters[i];
pulumi
.all([m.id, m.publicIp, m.privateIp])
.apply(([id, publicIp, privateIp]) =>
results.push({
id,
publicIp,
privateIp,
label: "master"
})
);
}
let listItems: string[] = [];
for (let i = 0; i < workers.length; i++) {
const m = workers[i];
pulumi
.all([m.id, m.publicIp, m.privateIp])
.apply(([id, publicIp, privateIp]) =>
listItems.push(
`- apiVersion: <http://cluster.k8s.io/v1alpha1|cluster.k8s.io/v1alpha1>
kind: Machine
metadata:
name: $id}
namespace: weavek8sops
labels:
set: "worker"
spec:
versions:
kubelet: 1.14.1
controlPlane: 1.14.1
providerSpec:
value:
apiVersion: baremetalproviderspec/v1alpha1
kind: BareMetalMachineProviderSpec
public:
address: ${publicIp}
port: 22
private:
address: ${privateIp}
port: 22`
))
.apply(() => {
// listItems = listItems.join("\n");
const yaml =
`apiVersion: v1
kind: List
items: ${listItems}`;
return yaml;
});
}
}
white-balloon-205
export function generateMachinesYaml(masters: aws.ec2.Instance[], workers: aws.ec2.Instance[]): pulumi.Output<string> {
const results = [];
for(const instance of masters) {
results.push({ label: "master", instance: instance });
}
for(const instance of workers) {
results.push({ label: "worker", instance: instance });
}
const listItems = results.map(({ instance, label}) => pulumi.interpolate`- apiVersion: <http://cluster.k8s.io/v1alpha1|cluster.k8s.io/v1alpha1>
kind: Machine
metadata:
name: ${instance.id}
namespace: weavek8sops
labels:
set: ${label}
spec:
versions:
kubelet: 1.14.1
controlPlane: 1.14.1
providerSpec:
value:
apiVersion: baremetalproviderspec/v1alpha1
kind: BareMetalMachineProviderSpec
public:
address: ${instance.publicIp}
port: 22
private:
address: ${instance.privateIp}
port: 22`
).join("\n");
const yaml = pulumi.interpolate`apiVersion: v1
kind: List
items:
${listItems}
`;
return yaml;
}
ripe-lighter-13633
02/25/2020, 10:24 PMwhite-balloon-205
apply
there. But there is a pulmi.interpolate
to build a the strings using Output
s.ripe-lighter-13633
02/25/2020, 10:27 PMCalling [toString] on an [Output<T>] is not supported.
white-balloon-205
export function generateMachinesYaml(masters: aws.ec2.Instance[], workers: aws.ec2.Instance[]): pulumi.Output<string> {
const results = [];
for(const instance of masters) {
results.push({ label: "master", instance: instance });
}
for(const instance of workers) {
results.push({ label: "worker", instance: instance });
}
const listItems = results.map(({ instance, label}) => pulumi.interpolate`- apiVersion: <http://cluster.k8s.io/v1alpha1|cluster.k8s.io/v1alpha1>
kind: Machine
metadata:
name: ${instance.id}
namespace: weavek8sops
labels:
set: ${label}
spec:
versions:
kubelet: 1.14.1
controlPlane: 1.14.1
providerSpec:
value:
apiVersion: baremetalproviderspec/v1alpha1
kind: BareMetalMachineProviderSpec
public:
address: ${instance.publicIp}
port: 22
private:
address: ${instance.privateIp}
port: 22`
);
const listString = pulumi.all(listItems).apply(parts => parts.join("\n"))
const yaml = pulumi.interpolate`apiVersion: v1
kind: List
items:
${listString}
`;
return yaml;
}
And does use one .all().apply()
.ripe-lighter-13633
02/25/2020, 10:31 PMwhite-balloon-205
ripe-lighter-13633
02/25/2020, 10:32 PMinterpolate()
and 1 all().apply()
is very tricky in my opinionwhite-balloon-205
.all().apply()
and no interpolate
.ripe-lighter-13633
02/25/2020, 10:35 PMwhite-balloon-205
export function generateMachinesYaml(masters: aws.ec2.Instance[], workers: aws.ec2.Instance[]): pulumi.Output<string> {
const results = [];
for(const instance of masters) {
results.push({ label: "master", id: instance.id, publicIp: instance.publicIp, privateIp: instance.privateIp });
}
for(const instance of workers) {
results.push({ label: "worker", id: instance.id, publicIp: instance.publicIp, privateIp: instance.privateIp });
}
return pulumi.all(results).apply(instances => {
const listItems = instances.map(({ label, id, publicIp, privateIp }) => `- apiVersion: <http://cluster.k8s.io/v1alpha1|cluster.k8s.io/v1alpha1>
kind: Machine
metadata:
name: ${id}
namespace: weavek8sops
labels:
set: ${label}
spec:
versions:
kubelet: 1.14.1
controlPlane: 1.14.1
providerSpec:
value:
apiVersion: baremetalproviderspec/v1alpha1
kind: BareMetalMachineProviderSpec
public:
address: ${publicIp}
port: 22
private:
address: ${privateIp}
port: 22`).join("\n");
return `apiVersion: v1
kind: List
items:
${listItems}
`;
});
}
ripe-lighter-13633
02/25/2020, 10:37 PM