Skip to content

Instantly share code, notes, and snippets.

@timmyers
Created May 29, 2020 21:05
Show Gist options
  • Save timmyers/4d2fed53a358d4c98557a5886ae2afbb to your computer and use it in GitHub Desktop.
Save timmyers/4d2fed53a358d4c98557a5886ae2afbb 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;
});
@blampe
Copy link

blampe commented Sep 30, 2024

v4.18 added support for CRDs and custom await logic -- see the release notes.

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