bagaimana cara memastikan eksekutif boneka berjalan di setiap peristiwa yang dipicu?

Saya ingin boneka eksekutif dijalankan pada penerapan pertama suatu file dan pada setiap perubahan lebih lanjut pada file tersebut. Untuk itu saya telah membuat kode di bawah ini dalam boneka.

Exec tidak berjalan pada penerapan file pertama. Saya berasumsi itu karena penyegaran saja. Adakah yang tahu apa yang perlu diubah dalam kode?

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 sumber
comment
Seperti yang disebutkan @AlexHarvey dalam jawabannya, kode Anda tidak cocok dengan perilaku yang Anda gambarkan dan seharusnya berfungsi sesuai keinginan. Bisakah Anda memberikan log dan keluaran yang membuktikan sebaliknya?   -  person Matt Schuchard    schedule 04.04.2019
comment
Jika Exec tidak berjalan dan tidak ada kesalahan yang dilaporkan maka skenario yang paling mungkin adalah (1) tidak ada sumber daya dev_tools::javacert yang diterapkan, atau (2) file yang dikelola sudah ada, dengan mode dan konten yang ditentukan untuk dia.   -  person John Bollinger    schedule 05.04.2019


Jawaban (1)


Penggunaan refreshonly terlihat benar. Saya tidak dapat mereproduksi ini. Menggunakan versi kode Anda yang disederhanakan ini:

Mencoba membuat 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,
}

Penyiapan:

▶ touch /tmp/source 

Pengoperasian awal:

▶ 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

Pengoperasian selanjutnya:

▶ 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

Konten baru:

▶ 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
Ya itu berhasil sekarang. Saya tidak tahu mengapa itu tidak berfungsi sebelumnya. - person devops; 05.04.2019
comment
@devops senang sudah beres - person Alex Harvey; 05.04.2019