как обеспечить запуск puppet exec при каждом инициированном событии?

Я хочу, чтобы puppet exec запускался при первом развертывании файла и при каждом последующем изменении файла. Для этого я создал приведенный ниже код в puppet.

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

define dev_tools::javacert(
  $keystore="/etc/alternatives/java_sdk/jre/lib/security/cacerts",
  $storepass='xxx',
  $alias = $name,
  $filecertpath = "/var/lib/certs/${name}.crt",

){
  file{
    $filecertpath:
      source => "puppet:///modules/${module_name}/sonarqube/${::env}/${::server_location}/${filecertpath}",
      mode   => '0644',
      notify => Exec["deploy_javacert_${name}"];
  }
  exec {
    "deploy_javacert_${name}":
       path => "/usr/bin",
       command => "keytool -importcert -keystore ${keystore} -alias $alias -file $filecertpath -storepass ${storepass} -noprompt  2>/dev/null",
       provider => shell,
       refreshonly => true;
  }

}

person devops    schedule 04.04.2019    source источник
comment
Как упоминает @AlexHarvey в своем ответе, ваш код не соответствует описанному вами поведению и должен работать так, как хотелось бы. Не могли бы вы предоставить журналы и выходные данные, доказывающие обратное?   -  person Matt Schuchard    schedule 04.04.2019
comment
Если Exec не запущен и об ошибке не сообщается, то наиболее вероятные сценарии заключаются в том, что (1) ресурс dev_tools::javacert вообще не применяется или (2) управляемый файл уже существует с режимом и содержимым, указанными для Это.   -  person John Bollinger    schedule 05.04.2019


Ответы (1)


Использование refreshonly выглядит правильным. Я не могу воспроизвести это. Используя эту упрощенную версию вашего кода:

Попытаться создать MCVE:

# test.pp

file { 'foo': 
  path   => '/tmp/foo',
  source => '/tmp/source',
  notify => Exec['bar'],
}
exec { 'bar':
  path        => '/bin',
  command     => 'echo "baz qux"',
  refreshonly => true,
  logoutput   => true,
}

Настройка:

▶ touch /tmp/source 

Первоначальный запуск:

▶ puppet apply test.pp
...
Notice: /Stage[main]/Main/File[foo]/content: content changed '{md5}0a227d644d5435d49addae1da06e909c' to '{md5}d41d8cd98f00b204e9800998ecf8427e'
Notice: /Stage[main]/Main/Exec[bar]/returns: baz qux
Notice: /Stage[main]/Main/Exec[bar]: Triggered 'refresh' from 1 event

Последующий запуск:

▶ puppet apply test.pp
...
Notice: Compiled catalog for 192-168-1-2.tpgi.com.au in environment production in 0.08 seconds
Notice: Applied catalog in 0.03 seconds

Новый контент:

▶ echo foobar > /tmp/source
▶ puppet apply test.pp
...
Notice: /Stage[main]/Main/File[foo]/content: content changed '{md5}d41d8cd98f00b204e9800998ecf8427e' to '{md5}14758f1afd44c09b7992073ccf00b43d'
Notice: /Stage[main]/Main/Exec[bar]/returns: baz qux
person Alex Harvey    schedule 04.04.2019
comment
Да, теперь это сработало. Не знаю, почему раньше не работало. - person devops; 05.04.2019
comment
@devops рад, что с этим все в порядке - person Alex Harvey; 05.04.2019