Skip to content

Instantly share code, notes, and snippets.

@metral
Forked from timmyers/pulumiWaitFor.ts
Created June 18, 2020 17:42
Show Gist options
  • Save metral/48a576680208d1c9961c37c5b1f0025e to your computer and use it in GitHub Desktop.
Save metral/48a576680208d1c9961c37c5b1f0025e to your computer and use it in GitHub Desktop.
Wait for a resource in pulumi
// Make sure x is a true output so pulumi doesn't try to run this function during preview.
const ingressIP = pulumi.all([x]).apply(async ([x]) => {
const kc = new k8sClient.KubeConfig();
const provider = (this.getProvider('kubernetes::') as any)
const kubeConfig = provider.kubeconfig as pulumi.Output<string>;
const ip = kubeConfig.apply(async (config) => {
kc.loadFromString(config);
const k8sApi = kc.makeApiClient(k8sClient.CoreV1Api);
while (true) {
try {
pulumi.log.info('Waiting for load balancer IP...', this);
const res = await k8sApi.readNamespacedService('istio-ingressgateway', namespace)
return res.body.status.loadBalancer.ingress[0].ip;
} catch (err) {
await new Promise(r => setTimeout(r, 2000));
}
}
});
return ip;
});
@omidraha
Copy link

The apply method note: 'func' is not allowed to make resources.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment