我的组织中有大量项目要转移结算帐户。 Ruby API有Google::Apis::CloudbillingV1::ProjectBillingInfo,其中包含一个update!方法,可以让我这样做。
我错过了一步。我的代码如下所示:
require 'googleauth'
require 'google/apis/cloudbilling_v1'
service = Google::Apis::CloudbillingV1::CloudbillingService.new
service.authorization = Google::Auth.get_application_default(['https://www.googleapis.com/auth/cloud-platform'])
FROM_BA = 'billingAccounts/123456'
TO_BA = 'billingAccounts/789012'
puts "Changing billing account on projects:"
service.list_billing_account_projects(FROM_BA).project_billing_info.each do |p|
puts "\t#{p.name} (#{p.project_id}): #{p.billing_account_name} --> #{TO_BA}"
p.update!(billing_account_name: TO_BA)
end
循环确实会查找并列出FROM_BA
结算帐户中的所有项目。我知道update!
正在被召唤。但是这些变化并没有持久存在于帐户中的项目中。我怀疑我在这里错过了一步。提交电话?我似乎无法找到任何示例,文档在这里没有用。
任何人都知道如何将update!
更改保持在帐户的实际项目上游?
答案 0 :(得分:0)
您使用CloudBillingService
实例上的update_project_billing_info method将更改提交到ProjectBillingInfo
对象。
完整的代码片段现在看起来像这样:
require 'googleauth'
require 'google/apis/cloudbilling_v1'
service = Google::Apis::CloudbillingV1::CloudbillingService.new
service.authorization = Google::Auth.get_application_default(['https://www.googleapis.com/auth/cloud-platform'])
FROM_BA = 'billingAccounts/123456'
TO_BA = 'billingAccounts/789012'
puts "Changing billing account on projects:"
service.list_billing_account_projects(FROM_BA).project_billing_info.each do |p|
project = p.name.split('/')[0..1].join('/')
puts "\t#{project} (#{p.project_id}): #{p.billing_account_name} --> #{TO_BA}"
p.update!(billing_account_name: TO_BA)
service.update_project_billing_info(project, p)
end
我现在看到结算信息更改传播到了网络用户界面。