Reemplazar la acción setIamPolicy por un tipo de recurso compatible

La función Actions es una función Alfa, que expande el rango de métodos de la API a los que Deployment Manager puede llamar. Debido a que esta función no es compatible, te recomendamos que migres tu uso existente de Actions a alternativas compatibles. La acción storage.buckets.setIamPolicy que se usa con frecuencia corresponde a un tipo de recurso existente de Deployment Manager, virtual.buckets.iamMemberBinding, que puedes usar para reemplazarla.

Migra tu implementación de storage.buckets.setIamPolicy a virtual.buckets.iamMemberBinding

El recurso virtual.buckets.iamMemberBinding es un recurso virtual que representa una vinculación de política de administración de identidades y accesos (IAM). Su tipo completo es gcp-types/storage-v1:virtual.buckets.iamMemberBinding.

virtual.buckets.iamMemberBinding tiene una implementación personalizada de las operaciones de creación, lectura, actualización y eliminación (CRUD) desde el backend de Deployment Manager. Llama a un método similar al método que llama la acción storage.buckets.setIamPolicy, pero se modela como un recurso normal, en lugar de una acción y sigue el mismo ciclo de vida que un tipo de recurso normal.

Para migrar tu implementación, reemplaza el uso de la acción storage.buckets.setIamPolicy por el recurso virtual.buckets.iamMemberBinding en todos los archivos de configuración de la implementación. Si tienes varias vinculaciones, es posible que necesites varios recursos para implementar la misma lógica en ellas. El tipo virtual no reemplaza ninguna vinculación existente en un recurso, pero aplica parches a las nuevas.

Ejemplos de uso para la migración manual

A fin de completar la migración de forma manual, consulta los siguientes ejemplos de uso. En ciertos casos, como la aplicación de varias vinculaciones de IAM, es posible que debas agregar metadata.dependsOn o referencias a otros recursos al recurso iamMemberBinding para evitar situaciones como condiciones de carrera.

YAML + Jinja

El siguiente es un ejemplo de cómo se usa la acción setIamPolicy en un archivo de configuración YAML. Este enfoque no es compatible y debe reemplazarse por el uso del recurso virtual iamMemberBinding:

- name: patch-iam-policy
  action: gcp-types/storage-v1:storage.buckets.setIamPolicy
  properties:
    bucket:
    policy: # existing policy, e.g. from a getIamPolicyAction
    gcpIamPolicyPatch:
      add:

En el siguiente ejemplo, se muestra el uso recomendado del recurso virtual iamMemberBinding en una plantilla YAML y Jinja:

{% set BUCKETNAME = "bucket-" + env["deployment"] %}

resources:
- type: gcp-types/storage-v1:buckets
  name: {{ BUCKETNAME }}
  properties:
  location: US
    storageClass: STANDARD
- type: gcp-types/storage-v1:virtual.buckets.iamMemberBinding
  name: test-bucket-iam
  properties:
    bucket: $(ref.{{ BUCKETNAME }}.name)
    member: projectEditor:{{ env["project"] }}
    role: roles/storage.admin

Python

A continuación, se muestra un ejemplo de cómo se usa la acción setIamPolicy en una plantilla de Python. Este enfoque no es compatible y debe reemplazarse por el uso del recurso virtual iamMemberBinding:

resources.append({
        'name': 'add-iam-policy',
        'action': 'gcp-types/storage-v1:storage.buckets.setIamPolicy',
        'properties': {
            'bucket': gcs_bucket,
            'userProject': project,
            'policy': '$(ref.get-iam-policy)',
            'gcpIamPolicyPatch': {
                'add': [{
                    'roles':
                        'roles/storage.objectViewer',
                    'members': [
                        'serviceAccount:$(ref.%s.serviceAccount)' % tpu_name
                    ]
                }]
            }
        }
    })

En el siguiente ejemplo, se muestra el uso recomendado del recurso virtual iamMemberBinding en una plantilla de Python:

iam_policy_resource = {
    'name': policy_name,
    'type': 'gcp-types/storage-v1:virtual.buckets.iamMemberBinding',
    'properties':
        {
           'bucket': '$(ref.{}.name)'.format(context.env['name']),
           'role': role['role'],
           'member': member,
         }
}

Puedes encontrar muestras adicionales relacionadas con la plantilla gcs-bucket.py en el repositorio cloud-foundation-toolkit en GitHub. Para obtener una demostración detallada del proceso de conversión de la plantilla gcs-bucket.py del uso de la acción setIamPolicy al uso del recurso virtual iamMemberBinding, consulta la conversión de ejemplo. También puedes encontrar ejemplos de uso de la plantilla convertida.