2 回答
TA贡献1840条经验 获得超5个赞
所以基本上感谢 Mateo 的指点,我能够使用这个脚本更新项目元数据:
function alex_test_function() {
// get existing oauth token
var theAccessTkn = ScriptApp.getOAuthToken();
// get existing project metadata
var response =
UrlFetchApp.fetch('https://compute.googleapis.com/compute/v1/projects/myProject', {
headers: {
Authorization: 'Bearer ' + theAccessTkn
}
});
var data = JSON.parse(response.getContentText());
var metadata = data.commonInstanceMetadata
fingerprint = metadata.fingerprint;
new_metadata_items = metadata.items;
// update metadata
var timestamp = new Date().getTime()
setMetaKey(new_metadata_items, Session.getActiveUser().getEmail().split("@")[0], timestamp)
var formData = {
'fingerprint': fingerprint,
'items': new_metadata_items
};
var postresponse = UrlFetchApp.fetch("https://compute.googleapis.com/compute/v1/projects/myProject/setCommonInstanceMetadata", {
'method' : 'post',
'contentType': 'application/json',
'payload' : JSON.stringify(formData),
'headers': {
Authorization: 'Bearer ' + theAccessTkn
}
});
}
function setMetaKey(metadata, key, value){
// Function to add metadata or update if exists
for (var i = 0; i < metadata.length; i++) {
if (metadata[i].key === key) {
metadata[i].value = value;
return;
}
}
metadata.push({key:key, value:value});
}
一些陷阱,我们需要将 OAuth 范围设置为 AppScript 清单
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/compute",
"https://www.googleapis.com/auth/script.external_request"]
}
并且运行脚本的用户需要具有编辑 GCP 项目中的项目元数据的权限。
我没有对范围进行很多实验,可以用更窄的范围而不是https://www.googleapis.com/auth/compute来执行脚本
TA贡献1851条经验 获得超5个赞
不幸的是,在回答这个问题时,Apps 脚本中没有方法或类来更改 Google Cloud 项目的元数据。但是,您可以使用Properties Service类获取和修改文档、脚本或用户元数据。
但是,如果您想以编程方式编辑 GCP 项目属性,则需要使用Google Cloud API,因为它允许您从gcloud
、其 API 或整个控制台修改这些属性。
添加回答
举报