sparse-intern-71089
02/25/2020, 10:23 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", 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;
}
white-balloon-205
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 PMripe-lighter-13633
02/25/2020, 10:31 PMripe-lighter-13633
02/25/2020, 10:31 PMripe-lighter-13633
02/25/2020, 10:32 PMinterpolate()
and 1 all().apply()
is very tricky in my opinionwhite-balloon-205
ripe-lighter-13633
02/25/2020, 10:32 PMwhite-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 PMripe-lighter-13633
02/25/2020, 10:37 PM