Итерировать сборщик марионеточных ресурсов - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь разработать класс марионеток с определенным ресурсом, который создает конфигурацию для веб-сайта.

Одна из вещей, которую должен сделать определенный ресурс, - назначить IP-адрес веб-сайтафиктивный интерфейс. Из-за ограничений проекта это делается с помощью NetworkManager.

Так что мне нужно сгенерировать файл типа

[connection]
id=dummydsr
uuid=50819d31-8967-4321-aa34-383f4a658789
type=dummy
interface-name=dummydsr
permissions=

[ipv4]
method=manual
#IP Addresses come here
ipaddress1=1.2.3.4/32
ipaddress2=5.6.7.8/32
ipaddress3=8.7.6.5/32

[ipv6]
method=ignore

Для каждого экземпляра должна быть строка ipaddressX = ... определенный ресурс.

Моя проблема заключается в том, как отследить, сколько раз был создан конкретный ресурс, чтобы я мог каким-то образом увеличить счетчик и сгенерировать строки ipaddress.

Или для каждого экземпляраопределенный ресурс, добавьте IP-адрес в массив, который я позже смогу использовать для создания файла

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Это не идеально, так как я бы предпочел иметь его внутри определенного ресурса, но, поскольку я создаю экземпляр определенного ресурса с данными из хэша, я использую указанный хэш для итерации этой части.

class xxx_corp_webserver (
  Hash $websites ={}
  ){
  create_resources('xxx_corp_webserver::website', $websites)

  # This would be nicer inside the defined class, but I did not find any other way 
  # Build and array with the IP addresses which are for DSR
  $ipaddresses = $websites.map | $r | {
    if $r[1]['enabledsr'] {
      $r[1]['ipaddress']
      }
    }

  # For each DSR address add the line
  $ipaddresses.each | Integer $index , String $ipaddress | {
    $num = $index+1
    file_line{"dummydsr-ipaddress${num}":
      ensure  => present,
      path    => '/etc/NetworkManager/system-connections/dummydsr',
      line    => "address${num} = ${ipaddress}/32",
      match   => "^address.* = ${ipaddress}/32",
      after   => '# IP Addresses come here',
      notify  => Service['NetworkManager'],
      require => File['/etc/NetworkManager/system-connections/dummydsr'],
      }

    }

}
0 голосов
/ 30 октября 2019

Если я вас понимаю, и я не уверен в этом, но я думаю, что вы захотите сделать что-то вроде этого:

define mytype(
  Integer $count,
  ...
  ) {
  file { 'some_network_manager_file':
    content => template(...)
  }
}

И тогда у вас будет цикл:

$mystuff.each |$count, $data| {
  mytype { ...:
    count  => $count,
    ...
  }
}

Ключевым моментом здесь может быть то, что в каждой функции есть какое-то волшебство, которое позволяет вам получить индекс, если вам это нужно, см. Также этот ответ.

ТеперьЯ думаю вот как это будет работать, и я не буду тратить время на изучение NetworkManager. Если вы предоставите больше своего кода, я могу обновить его, чтобы сделать его более полезным.

...