为了账号安全,请及时绑定邮箱和手机立即绑定

通过应用程序脚本更新 GCP 元数据

通过应用程序脚本更新 GCP 元数据

GCT1015 2023-03-03 17:15:30
基本上我想在电子表格中创建一个按钮,该按钮将运行等效于以下命令gcloud compute project-info add-metadata --project ${project} --metadata "test_label=test_value"是否可以?我对谷歌 javascript 库不是很熟悉。
查看完整描述

2 回答

?
慕斯709654

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来执行脚本


查看完整回答
反对 回复 2023-03-03
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

不幸的是,在回答这个问题时,Apps 脚本中没有方法或类来更改 Google Cloud 项目的元数据。但是,您可以使用Properties Service类获取和修改文档、脚本或用户元数据。

但是,如果您想以编程方式编辑 GCP 项目属性,则需要使用Google Cloud API,因为它允许您从gcloud、其 API 或整个控制台修改这些属性。



查看完整回答
反对 回复 2023-03-03
  • 2 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信