Un manifest Puppet poate contine declarari pentru mai multe resurse, insa ordinea in care sunt aplicate nu este bine definita.
Sunt cazuri in care trebuie sa ne asiguram ca o resursa este aplicata inaintea alteia (de exemplu, un pachet este instalat inaintea pornirii serviciului).
In aceste situatii, trebuie sa definim dependente intre resurse.
Modificam manifestul creat anterior astfel:
file {'my_file': path => '/tmp/my_file', ensure => present, mode => 0640, content => "File created using Puppet.", } notify {'my_notify': message => "File /tmp/my_file has been synced", require => File['my_file'], }
notify
defineste un mesaj ce va fi afisat in momentul cand declaratia sa este evaluata;require
. In cazul de fata, resursa my_file este evaluata inaintea resursei my_notify.Modificati fisierul /tmp/my_file, apoi aplicati manifestul de mai sus. Observati ordinea in care resursele sunt evaluate.
O sintaxa echivalenta ar fi folosirea parametrului before
in resursa my_file:
file {'my_file': path => '/tmp/my_file', ensure => present, mode => 0640, content => "File created using Puppet.", before => Notify['my_notify'], } notify {'my_notify': message => "File /tmp/my_file has been synced", }
Pentru unele resurse are sens actiunea de “refresh” (de exemplu, un serviciu care trebuie repornit).
Daca dorim ca, in plus fata de dependenta intre resurse, sa facem “refresh” pentru a doua resursa, cand prima resursa este modificata, trebuie:
Un exemplu ar fi repornirea serviciului SSH atunci cand fisierul sau de configurare este modificat:
file { '/etc/ssh/sshd_config': ensure => file, mode => 600, source => '/root/examples/sshd_config', } service { 'sshd': ensure => running, enable => true, subscribe => File['/etc/ssh/sshd_config'], }
Creati un manifest cu codul de mai sus, apoi modificati fisierul /etc/ssh/sshd_config si aplicati manifestul.
In locul atributelor before / require sau notify / subscribe putem folosi operatorul →
, respectiv ~>
.
Exemplu:
file {'my_file': path => '/tmp/my_file', ensure => present, mode => 0640, content => "File created using Puppet.", } -> notify {'my_notify': message => "File /tmp/my_file has been synced", }