Как мне получить свойство a ресурса Pulumi с помощью python?

#python #google-cloud-platform #pulumi

#python #google-cloud-platform #pulumi

Вопрос:

Я создаю хранилище GCP и агрегированный приемник журналов, используя Pulumi и Python. Для создания приемника мне нужно значение идентификатора корзины из Pulumi.

 bucket = storage.Bucket(resource_name=bucket_name, 
                        location="us-central1", 
                        storage_class="REGIONAL",
                        uniform_bucket_level_access=True)

# destination value is needed to create the logging sink.
destination = Output.all(bucket.id).apply(lambda l: f"storage.googleapis.com/{l[0]}")

print(destination)
  

Я ожидал бы получить вывод на печать переменной назначения, аналогичной "storage.googleapis.com/bucket_id" . Вместо этого я получаю
<pulumi.output.Output object at 0x10c39ae80> . Я также пытался использовать метод Pulumi concat, как описано в документах Pulumi.

 destination = Output.concat("storage.googleapis.com/", bucket.id)

print(destination)
  

<pulumi.output.Output object at 0x10c39ae80> Вместо ожидаемой строки возвращается то же самое.

Любые предложения будут оценены.

Ответ №1:

Вы не можете распечатать Output , потому что вывод является контейнером для отложенного значения, которое еще не доступно при print вызове. Вместо этого попробуйте экспортировать значение в виде вывода стека

 pulumi.export("destination", destination)
  

Если вы действительно хотите распечатать его, попробуйте сделать это из apply :

 destination.apply(lambda v: print(v))
  

Кстати, ваш первый фрагмент можно упростить до

 destination = bucket.id.apply(lambda id: f"storage.googleapis.com/{id}")
  

но concat на самом деле все еще проще.

Комментарии:

1. Спасибо, это имеет смысл. Чего я не могу определить, так это как создать это целевое строковое значение в качестве входных данных для ресурса приемника организации. Целевым значением является строка storage.googleapis.com / вдоль проволочного ведра я бы.

2. Например, после создания корзины, которую я использую sink = logging.OrganizationSink("resource-ops-sink", destination=f"storage.googleapis.com/{bucket.id}", filter=filter, org_id=org) , я получаю сообщение об ошибке в переменной назначения « gcp: logging:OrganizationSink (resource-ops-sink): ошибка: произошла ошибка 1: * googleapi: ошибка 404: корзина Выходной объект по адресу 0x10bcc16a0> не существует, не найден «

3. Используйте destintion=Output.concat("storage.googleapis.com/", bucket.id) вместо прямого форматирования строки