Deployment 如何创建文件夹&;部署管理器(谷歌云平台)下的项目

Deployment 如何创建文件夹&;部署管理器(谷歌云平台)下的项目,deployment,google-cloud-platform,google-deployment-manager,Deployment,Google Cloud Platform,Google Deployment Manager,在单个部署管理器模板中,如何在其下创建新的文件夹和新的项目?问题是对文件夹的引用在文件夹/123456格式中包含一个名称,但项目需要在格式中包含一个父项字段。使用$(ref.new-folder.name)对于新项目的父记录中的ID字段无效 感觉我需要对$(ref.new-folder.name)执行如下字符串操作: #不起作用 #但如果是这样,我可以从“folders/123456”中提取数字id 父项_id='$(ref.new-folder.name)'.replace('folders/

在单个部署管理器模板中,如何在其下创建新的文件夹和新的项目?问题是对文件夹的引用
文件夹/123456
格式中包含一个
名称
,但项目需要在
格式中包含一个
父项
字段
。使用
$(ref.new-folder.name)
对于新项目的
父记录中的ID字段无效

感觉我需要对
$(ref.new-folder.name)
执行如下字符串操作:

#不起作用
#但如果是这样,我可以从“folders/123456”中提取数字id
父项_id='$(ref.new-folder.name)'.replace('folders/','')
当然,这是行不通的

以下是我的(非工作)尝试:

#新文件夹和新项目的模板
文件夹\u资源={
“名称”:“新文件夹”,
“类型”:“gcp类型/cloudresourcemanager-v2:文件夹”,
“属性”:{
“父项”:“组织/99999”,
“displayName”:“新建文件夹”
}
}
项目资源={
“名称”:“新项目”,
“type”:“clouresourcemanager.v1.project”,
'metadata':{'dependsOn':['new-folder']},
“属性”:{
“名称”:“新项目”,
“家长”:{
'类型':'文件夹',
#这就是问题所在!
'id':'$(ref.new-folder.name)'
}
}
}
返回{'resources':[folder\u resource,project\u resource]}
因此,重申一下,我正在从文件夹的
名称的引用中提取数字文件夹id
name
的格式为
folders/123456
,但我只需要
123456
部分在新项目的
父项
字段中使用


此问题特定于文件夹和项目创建,但更普遍的问题是:是否有方法对引用的值进行字符串操作?

对于创建和管理文件夹文档[a]可能会有所帮助,文件夹名称必须满足以下要求:

  • 名称可以包含字母、数字、空格、连字符和下划线
  • 文件夹的显示名称必须以字母或数字开头和结尾
  • 名称必须不超过30个字符
  • 该名称必须与共享其父文件夹的所有其他文件夹不同
  • 要创建文件夹,请执行以下操作:

    可以使用API请求创建文件夹

    请求JSON:

    request_json= '{
    display_name: "[DISPLAY_NAME]"
    }'
    
    创建文件夹卷曲请求:

    curl -X POST -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${bearer_token}" \
    -d "$request_json" \
    https://cloudresourcemanager.googleapis.com/v2/folders?parent=[ORGANIZATION_NAME]
    
    curl -H "Authorization: Bearer ${bearer_token}" \
    https://cloudresourcemanager.googleapis.com/v1/operations/fc.123456789
    
    curl -X POST -H "Content-Type: application/json" \
       -H "Authorization: Bearer ${bearer_token}" \
       -d "$request_json" \
       https://cloudresourcemanager.googleapis.com/v2/[FOLDER_NAME]:setIamPolicy
    
    curl -X POST -H "Content-Type: application/json" \
       -H "Authorization: Bearer ${bearer_token}" \
       -d "$request_json" \
       https://cloudresourcemanager.googleapis.com/v1/projects
    
    其中:

    -[DISPLAY_NAME]是新文件夹的显示名称,例如“My Awesome folder”

    -[ORGANIZATION_NAME]是您在其下创建项目的组织的名称 文件夹,例如organizations/123

    创建文件夹响应:

    {
      "name": "operations/fc.123456789",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.resourcemanager.v2.FolderOperation",
        "displayName": "[DISPLAY_NAME]",
        "operationType": "CREATE"
      }
    }
    
    获取操作请求:

    curl -X POST -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${bearer_token}" \
    -d "$request_json" \
    https://cloudresourcemanager.googleapis.com/v2/folders?parent=[ORGANIZATION_NAME]
    
    curl -H "Authorization: Bearer ${bearer_token}" \
    https://cloudresourcemanager.googleapis.com/v1/operations/fc.123456789
    
    curl -X POST -H "Content-Type: application/json" \
       -H "Authorization: Bearer ${bearer_token}" \
       -d "$request_json" \
       https://cloudresourcemanager.googleapis.com/v2/[FOLDER_NAME]:setIamPolicy
    
    curl -X POST -H "Content-Type: application/json" \
       -H "Authorization: Bearer ${bearer_token}" \
       -d "$request_json" \
       https://cloudresourcemanager.googleapis.com/v1/projects
    
    获取操作响应:

    {
          "name": "operations/fc.123456789",
          "metadata": {
            "@type": "type.googleapis.com/google.cloud.resourcemanager.v2.FolderOperation",
            "displayName": "[DISPLAY_NAME]",
            "operationType": "CREATE"
          },
          "done": true,
          "response": {
            "@type": "type.googleapis.com/google.cloud.resourcemanager.v2.Folder",
            "name": "folders/12345",
            "parent": "organizations/123",
            "displayName": "[DISPLAY_NAME]",
            "lifecycleState": "ACTIVE",
            "createTime": "2017-07-19T23:29:26.018Z",
            "updateTime": "2017-07-19T23:29:26.046Z"
          }
        }
    
    配置文件夹访问权限

    SetsIamPolicy设置文件夹的访问控制策略,替换任何现有策略。资源字段应为文件夹的资源名称,例如folders/1234

    request_json= '{
       policy: {
         version: "1",
         bindings: [
           {
             role: "roles/resourcemanager.folderEditor",
             members: [
               "user:email1@example.com",
               "user:email2@example.com",
             ]
           }
         ]
       }
     }'
    
    curl请求:

    curl -X POST -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${bearer_token}" \
    -d "$request_json" \
    https://cloudresourcemanager.googleapis.com/v2/folders?parent=[ORGANIZATION_NAME]
    
    curl -H "Authorization: Bearer ${bearer_token}" \
    https://cloudresourcemanager.googleapis.com/v1/operations/fc.123456789
    
    curl -X POST -H "Content-Type: application/json" \
       -H "Authorization: Bearer ${bearer_token}" \
       -d "$request_json" \
       https://cloudresourcemanager.googleapis.com/v2/[FOLDER_NAME]:setIamPolicy
    
    curl -X POST -H "Content-Type: application/json" \
       -H "Authorization: Bearer ${bearer_token}" \
       -d "$request_json" \
       https://cloudresourcemanager.googleapis.com/v1/projects
    
    其中:

    -[FOLDER_NAME]是正在设置IAM策略的文件夹的名称,例如folders/123

    在文件夹中创建项目

     request_json= ‘{
          name: “[DISPLAY_NAME]”, projectId: “[PROJECT_ID]”, parent: {id: [PARENT_ID], type: [PARENT_TYPE] }
       }’
    
    curl请求:

    curl -X POST -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${bearer_token}" \
    -d "$request_json" \
    https://cloudresourcemanager.googleapis.com/v2/folders?parent=[ORGANIZATION_NAME]
    
    curl -H "Authorization: Bearer ${bearer_token}" \
    https://cloudresourcemanager.googleapis.com/v1/operations/fc.123456789
    
    curl -X POST -H "Content-Type: application/json" \
       -H "Authorization: Bearer ${bearer_token}" \
       -d "$request_json" \
       https://cloudresourcemanager.googleapis.com/v2/[FOLDER_NAME]:setIamPolicy
    
    curl -X POST -H "Content-Type: application/json" \
       -H "Authorization: Bearer ${bearer_token}" \
       -d "$request_json" \
       https://cloudresourcemanager.googleapis.com/v1/projects
    
    其中:

    -[PROJECT_ID]是正在创建的项目的ID,例如my-awesome-proj-123

    -[DISPLAY_NAME]是正在创建的项目的显示名称

    -[PARENT_ID]是在下创建的父项的ID,例如123

    -[PARENT_TYPE]是父级的类型,如“文件夹”或“组织”

    当我们创建对资源的引用时,我们还创建了资源之间的依赖关系,文档[b]对此可能会有所帮助

    [a]-
    [b] -

    你好。。。我感觉Deployment Manager中的模板将为您提供所需的“脚本”。这可以是在Jinja或Python中。。。正常情况下,他们会这样做!问题是我不能对$(ref.resource.value)进行操作——在运行时扩展该变量会阻止对其执行字符串操作。正如您所提到的,这里没有明确的引用。由于python函数在应用DM模板之前完成,因此不能使用python函数获取要传递给python函数的文件夹名称。这似乎是一个糟糕的设计选择。我建议打开一个功能请求,以更新项目API(用于
    resourceID
    字段)或文件夹API,以便它们能够更符合我们对automationsame问题的预期,打开一个问题,谢谢!然而,我正在尝试专门为部署管理器解决这个问题,而不使用gcloud脚本。我正在寻找使用部署管理器的解决方法,但不幸的是,没有找到任何解决方法。似乎最好使用以下方法创建功能请求: