首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问facter GCE元数据

如何访问facter GCE元数据
EN

Server Fault用户
提问于 2016-07-27 08:43:31
回答 2查看 985关注 0票数 0

Facter包含GCE ()元数据详细信息:

代码语言:javascript
复制
$ facter | grep gce
gce => {"instance"=>{"attributes"=>{}, "description"=>"", "disks"=>[{"deviceName"=>"srvpup01", "index"=>0, "mode"=>"READ_WRITE", "type"=>"PERSISTENT"}, {"deviceName"=>"srvpup01-storage01", "index"=>1, "mode"=>"READ_WRITE", "type"=>"PERSISTENT"}], "hostname"=>"srvpup01.c.example.internal", "id"=>12345, "image"=>nil, "licenses"=>[{"id"=>"1000010"}], "machineType"=>"n1-standard-1", "maintenanceEvent"=>"NONE", "networkInterfaces"=>[{"accessConfigs"=>[{"externalIp"=>"", "type"=>"ONE_TO_ONE_NAT"}], "forwardedIps"=>[], "ip"=>"123.456.789.123", "ipAliases"=>[], "mac"=>"00:11:22:33:44:55", "network"=>"example"}], "scheduling"=>{"automaticRestart"=>"TRUE", "onHostMaintenance"=>"MIGRATE", "preemptible"=>"FALSE"}, "serviceAccounts"=>{"12345-compute@developer.gserviceaccount.com"=>{"aliases"=>["default"], "email"=>"12345-compute@developer.gserviceaccount.com", "scopes"=>["xxx"]}, "default"=>{"aliases"=>["default"], "email"=>"12345-compute@developer.gserviceaccount.com", "scopes"=>["xxx"]}}, "tags"=>["no-public-ip"], "zone"=>"europe-west1-d"}, "project"=>{"attributes"=>{"google-compute-default-region"=>"europe-west1", "google-compute-default-zone"=>"europe-west1-d", "sshKeys"=>["...

是否有任何简单的方法从木偶模块中访问"zone“属性,或者我必须自己解析该字符串?

像散列一样访问它会失败:

代码语言:javascript
复制
gce is not a hash or array
EN

回答 2

Server Fault用户

回答已采纳

发布于 2016-07-27 13:39:03

错误gce is not a hash or array表示您使用的是Puppe3.x(而不是4.x),它将所有事实视为字符串,因此要访问哈希中的值,需要关闭stringify_facts设置

可以在puppet.conf中对所有代理执行以下操作:

代码语言:javascript
复制
stringify_facts = false

然后,您应该能够使用以下方法访问该值:

代码语言:javascript
复制
$gce["zone"]
票数 1
EN

Server Fault用户

发布于 2016-07-27 09:39:41

我认为facter命令行不能输出嵌套事实(如gce.zone )的值,因此您可能需要解析它。

请注意以下几点:

  1. 您可以在命令行上传递顶级事实的名称,因此它只打印出来:facter gce将只打印没有"gce =>“前缀的散列,或者需要输出grep。
  2. 您可以以JSON或YAML格式输出事实,以便于解析。

使用jgrep,您可以:

代码语言:javascript
复制
facter --json gce | jgrep -s gce.zone

或者使用YAML和Ruby可以:

代码语言:javascript
复制
facter --yaml gce | ruby -ryaml -e 'p YAML.load(STDIN)["gce"]["zone"]'

或者使用YAML和awk:

代码语言:javascript
复制
facter --yaml gce | awk '/zone:/ { print $2 }'
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/792191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档