LINUX.ORG.RU
ФорумAdmin

Puppet получить вывод exec`а

 


0

4

Хочется в манифесте выполнить команду и поместить результат работы этой команды в переменную для дальнейшей обработки.

К примеру я сгенерировал сертификаты для ovpn и хочу поместить их в конфиг для клиента.

Я писал функцию на ruby для выдёргивания ключа из сертификата, но Ruby функции выполняются на puppet мастере,

В exec вывод команды не попадает или я не знаю как это сделать.
Есть какие-либо идеи, кроме exec {'sed маска > /tmp/file'} для каждого ключа и склеить всё это exec {'cat file1 file2 > целевой файл'}

★★

манифесты интерпретируются на сервере, (на выходе статичный код), а экзек на агенте. Не получится так.

Bers666 ★★★★★
()
Ответ на: комментарий от Bers666

а если отойти от структуры манифеста и использовать например факт,
который будет смотреть в /usr/share/easy-rsa/keys и если там есть сертификаты, возвращать хэш по типу
{file.name: {ca: crt, crt: crt, key: key}}

Flotsky ★★
() автор топика

Не уверен, но возможно тебе нужны exported resources

Хотя я бы забил сертификат в манифест вручную, после генерации

router ★★★★★
()

сделал через файлики в /tmp и дальнейшую их обработку sed`ом

define openvpnconfig::inline (
  String $name2,
  Hash $config,
  String $destination,
) {

  file { "/tmp/${name2}.ovpn":
    ensure  => file,
    content => template("openvpnconfig/config.conf.erb"),
    owner   => 'root',
    group   => 'root',
  } ->
  exec { "make ${destination}/${name2}/${name2}.ovpn":
    command => "cat /tmp/${name2}.ovpn > ${destination}/${name2}/${name2}.ovpn",
    creates => "${destination}/${name2}/${name2}.ovpn",
    path => '/bin',
#    notify => openvpnconfig::inlineaddkeys["${name2}"],
  } ~>
  openvpnconfig::inlineaddkeys {"${name2}":
    name2 => $name2,
    config => $config,
    destination => $destination,
    subscribe => Exec["make ${destination}/${name2}/${name2}.ovpn"],
  }
}

define openvpnconfig::inlineaddkeys (
  String $name2,
  Hash $config,
  String $destination,
) {

  $config['keys'].each |$type, $path| {
    case $type {
      'cert': {
        exec { "get ${type}${name2}":
          command => "echo '<cert>' >> ${destination}/${name2}/${name2}.ovpn && sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' ${path} >> ${destination}/${name2}/${name2}.ovpn && echo '</cert>' >> ${destination}/${name2}/${name2}.ovpn && echo '' >> ${destination}/${name2}/${name2}.ovpn",
          path => '/bin',
        }
      }
      'ca': {
        exec { "get ${type}${name2}":
          command => "echo '<ca>' >> ${destination}/${name2}/${name2}.ovpn && cat ${path} >> ${destination}/${name2}/${name2}.ovpn && echo '</ca>' >> ${destination}/${name2}/${name2}.ovpn && echo '' >> ${destination}/${name2}/${name2}.ovpn",
          path => '/bin',
        }
      }
      'key': {
        exec { "get ${type}${name2}":
          command => "echo '<key>' >> ${destination}/${name2}/${name2}.ovpn && cat ${path} >> ${destination}/${name2}/${name2}.ovpn && echo '</key>' >> ${destination}/${name2}/${name2}.ovpn && echo '' >> ${destination}/${name2}/${name2}.ovpn",
          path => '/bin',
        }
      }
      'dh': {
        exec { "get ${type}${name2}":
          command => "echo '<dh>' >> ${destination}/${name2}/${name2}.ovpn && cat ${path} >> ${destination}/${name2}/${name2}.ovpn && echo '</dh>' >> ${destination}/${name2}/${name2}.ovpn && echo '' >> ${destination}/${name2}/${name2}.ovpn",
          path => '/bin',
        }
      }
    }
  }
}

Про exported resources не понял.
Они позволяют выполнить что-то на стороне агента и потом экспортировать на мастера, в puppetdb? а можно пример, и нужен ли puppetdb?

Flotsky ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.