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脚本。我正在寻找使用部署管理器的解决方法,但不幸的是,没有找到任何解决方法。似乎最好使用以下方法创建功能请求: