首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脉冲DigitalOcean:使用输出

脉冲DigitalOcean:使用输出
EN

Stack Overflow用户
提问于 2022-04-15 20:08:00
回答 1查看 312关注 0票数 0

我想使用Pulumi在DigitalOcean上创建一些服务器。我有以下代码:

代码语言:javascript
复制
for i in range(0, amount):
    name = f"droplet-{i+1}"

    droplet = digitalocean.Droplet(
        name,
        image=_image,
        region=_region,
        size=_size,
    )
    pulumi.export(f"droplet-ip-{i+1}", droplet.ipv4_address)

这将正确地输出控制台上服务器的IP地址。

但是,我想在Python脚本的其他地方使用IP地址。为此,我将液滴列入清单如下:

代码语言:javascript
复制
droplets = []

for i in range(0, amount):
    name = f"droplet-{i+1}"

    droplet = digitalocean.Droplet(
        name,
        image=_image,
        region=_region,
        size=_size,
    )
    pulumi.export(f"droplet-ip-{i+1}", droplet.ipv4_address)
    droplets.append(droplet)

然后按以下方式在液滴上循环:

代码语言:javascript
复制
for droplet in droplets:
    print(droplet.ipv4_address)

在Pulumi的输出中,我看到了以下几点:

代码语言:javascript
复制
Diagnostics:
  pulumi:pulumi:Stack (Pulumi_DigitalOcean-dev):
    <pulumi.output.Output object at 0x105086b50>
    <pulumi.output.Output object at 0x1050a5ac0>

我意识到,当液滴还在创建时,IP地址是未知的,但是在创建之后,我会将液滴添加到列表中。

有没有办法知道IP地址,以便在Python脚本的其他地方使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-15 22:45:43

简单的回答是,由于这些值是Output的,如果需要字符串,则需要使用.apply

https://www.pulumi.com/docs/intro/concepts/inputs-outputs/#apply

若要访问输出的原始值并将该值转换为新值,请使用

。此方法接受一个回调,一旦该值可用,该回调将与原始值一起调用。

您可以通过迭代列表并对print输出值调用apply方法来实现这些IP:

代码语言:javascript
复制
...
pulumi.export(f"droplet-ip-{i+1}", droplet.ipv4_address)
droplets.append(droplet)
...

for droplet in droplets:
    droplet.ipv4_address.apply(lambda addr: print(addr))
代码语言:javascript
复制
$ pulumi up
...

Diagnostics:
  pulumi:pulumi:Stack (so-71888481-dev):
    143.110.157.64
    137.184.92.205
 
Outputs:
    droplet-ip-1: "137.184.92.205"
    droplet-ip-2: "143.110.157.64"

根据您计划在程序中使用这些字符串的方式,这种特殊情况可能并不完美,但通常,如果您希望使用pulumi.Output的未包装值,则需要使用.apply()

如果您想在使用pulumi.Output.all()之前等待几个输出值的解析,那么它们也会派上用场:

https://www.pulumi.com/docs/intro/concepts/inputs-outputs/#all

如果您有多个输出并且需要加入它们,那么all函数的作用就像在许多资源上应用一样。该函数连接整个输出列表。它等待它们全部可用,然后将它们提供给所提供的回调。

希望这能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71888481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档