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",
}