Факты о куколках для извлечения instanceProfileArn - PullRequest
0 голосов
/ 12 февраля 2020

Я работаю над сценарием, который потребовал бы передачи профиля Innance arn. Я использую куколку, чтобы получить некоторую информацию, используя ее возможности. Ниже приведен (сниппет) пример вывода фактера, найденного в сети, полный вывод можно найти здесь (https://gist.github.com/cliff-wakefield/b232ef51799908a0264eb7e95af09092). То, что я хотел бы получить, это "InstanceProfileArn"

ec2_metadata => {
  ami-id => "ami-34281c57",
  ami-launch-index => "0",
  ami-manifest-path => "(unknown)",
  block-device-mapping => {
    ami => "/dev/sda1",
    root => "/dev/sda1"
  },
  hostname => "ip-10-180-0-40.ap-southeast-2.compute.internal",
  iam => {
    info => "{
  "Code" : "Success",
  "LastUpdated" : "2016-08-28T23:12:36Z",
  "InstanceProfileArn" : "arn:aws:iam::750105279227:instance-profile/AnexPrereqs-AnexIAMInstanceProfile-11O8QJAS4XO7S",
  "InstanceProfileId" : "AIPAI6YKKPRVVX2XD6LCK"
}"

Запустив facter ec2_metadata.iam.info, я получаю:

{
      "Code" : "Success",
      "LastUpdated" : "2016-08-28T23:12:36Z",
      "InstanceProfileArn" : "arn:aws:iam::750105279227:instance-profile/AnexPrereqs-AnexIAMInstanceProfile-11O8QJAS4XO7S",
      "InstanceProfileId" : "AIPAI6YKKPRVVX2XD6LCK"
    }

Однако я изо всех сил пытаюсь получить "InstanceProfileArn" напечатано на консоли.

Итак, две вещи, которые я хочу достичь:

  • Запустив facter ec2_metadata.iam.info.<InstanceProfileArn> из своего экземпляра, я хочу иметь возможность видеть экземпляр профиль arn напечатан в консоли.
  • Во-вторых, я понимаю, что способ передачи вышеприведенной команды в puppet будет немного другим и будет выглядеть примерно так: $facts[ec2_metadata][iam][info][InstanceProfileArn]. Какой будет правильный синтаксис для передачи в манифест марионетки?

1 Ответ

1 голос
/ 13 февраля 2020

В модуле Puppet Forge stdlib есть функция , называемая parsejson. Его можно использовать для анализа строки, содержащей JSON, в Puppet ha sh. Пример использования ваших данных:

$ cat Puppetfile
forge "https://forgeapi.puppetlabs.com"
  mod "puppetlabs-stdlib", "4.25.1"
$ r10k puppetfile install
$ cat foo.pp
include stdlib

# should be $info_json = $facts[ec2_metadata][iam][info], but for this example
# we'll use a literal...
$info_json = @(INFO)
{
      "Code" : "Success",
      "LastUpdated" : "2016-08-28T23:12:36Z",
      "InstanceProfileArn" : "arn:aws:iam::750105279227:instance-profile/AnexPrereqs-AnexIAMInstanceProfile-11O8QJAS4XO7S",
      "InstanceProfileId" : "AIPAI6YKKPRVVX2XD6LCK"
}
INFO
$info = parsejson($info_json)
$instance_profile_arn = $info['InstanceProfileArn']
notice($instance_profile_arn)
$ puppet apply --modulepath=modules foo.pp
Notice: Scope(Class[main]): arn:aws:iam::750105279227:instance-profile/AnexPrereqs-AnexIAMInstanceProfile-11O8QJAS4XO7S
[...]
...