החלפת הפעולה setIamPolicy בסוג משאב נתמך

התכונה Actions היא תכונת אלפא שמרחיבה את מגוון ה-methods של API שאפשר להפעיל ב-Deployment Manager. התכונה הזו לא נתמכת, ולכן מומלץ להעביר את השימוש הקיים בפעולות לחלופות נתמכות. הפעולה הנפוצה storage.buckets.setIamPolicy תואמת לסוג משאב קיים ב-Deployment Manager, ‏ virtual.buckets.iamMemberBinding, שאפשר להשתמש בו במקומה.

העברת הפריסה מ-storage.buckets.setIamPolicy אל virtual.buckets.iamMemberBinding

המשאב virtual.buckets.iamMemberBinding הוא משאב וירטואלי שמייצג קשירת מדיניות של ניהול זהויות והרשאות גישה (IAM). הסוג המלא שלו הוא gcp-types/storage-v1:virtual.buckets.iamMemberBinding.

ל-virtual.buckets.iamMemberBinding יש הטמעה בהתאמה אישית של הפעולות ליצירה, קריאה, עדכון ומחיקה (CRUD) מהקצה העורפי של Deployment Manager. היא מפעילה שיטה דומה לשיטה שמופעלת על ידי הפעולה storage.buckets.setIamPolicy, אבל היא מוגדרת כמשאב רגיל ולא כפעולה, והיא פועלת לפי אותו מחזור חיים כמו סוג משאב רגיל.

כדי להעביר את הפריסה, מחליפים את השימוש בפעולה storage.buckets.setIamPolicy במשאב virtual.buckets.iamMemberBinding בכל קובצי התצורה של הפריסה. אם יש לכם כמה קשרים, יכול להיות שתצטרכו כמה משאבים כדי להטמיע את אותה לוגיקה בכל אחד מהם. הסוג הווירטואלי לא מחליף קשרים קיימים למשאב, אלא מוסיף את הקשרים החדשים.

דוגמאות לשימוש בהעברה ידנית

כדי להשלים את ההעברה באופן ידני, אפשר להיעזר בדוגמאות השימוש הבאות. במקרים מסוימים, כמו החלה של כמה קשרים בין משתמשים להרשאות ב-IAM, יכול להיות שתצטרכו להוסיף metadata.dependsOn או הפניות למשאבים אחרים למשאב iamMemberBinding כדי להימנע ממצבים כמו מרוץ תהליכים.

YAML + Jinja

בדוגמה הבאה אפשר לראות איך משתמשים בפעולה setIamPolicy בקובץ תצורה מסוג YAML. הגישה הזו לא נתמכת, וצריך להחליף אותה בשימוש במשאב הווירטואלי 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:

בדוגמה הבאה מוצג השימוש המומלץ במשאב הווירטואלי iamMemberBinding בתבנית YAML ובתבנית 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

בדוגמה הבאה אפשר לראות איך משתמשים בפעולה setIamPolicy בתבנית Python. הגישה הזו לא נתמכת, וצריך להחליף אותה בשימוש במשאב הווירטואלי 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
                    ]
                }]
            }
        }
    })

בדוגמה הבאה מוצג השימוש המומלץ במשאב הווירטואלי iamMemberBinding בתבנית 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,
         }
}

דוגמאות נוספות שקשורות לתבנית gcs-bucket.py זמינות במאגר cloud-foundation-toolkit ב-GitHub. כדי לראות הדגמה מפורטת של תהליך ההמרה של התבנית gcs-bucket.py משימוש בפעולה setIamPolicy לשימוש במשאב וירטואלי iamMemberBinding, אפשר לעיין בדוגמה להמרה. אפשר גם למצוא דוגמאות לשימוש בתבנית שהומרה.