This shows you the differences between two versions of the page.
saisp:labs:10:contents:02 [2014/01/21 22:12] alexandru.carp |
saisp:labs:10:contents:02 [2014/05/12 16:55] (current) alexandru.carp |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 02. Manifeste Puppet ==== | + | ==== 02. [20p] Manifeste Puppet ==== |
Cu toate ca putem crea, modifica sau sterge resurse folosind comenzi de tip ''puppet resource'', aceasta nu este o solutie potrivita pentru situatii complexe. | Cu toate ca putem crea, modifica sau sterge resurse folosind comenzi de tip ''puppet resource'', aceasta nu este o solutie potrivita pentru situatii complexe. | ||
Line 9: | Line 9: | ||
Fisierele ce contin declarari de resurse Puppet se numesc **manifeste** si au, de obicei, extensia **.pp**. | Fisierele ce contin declarari de resurse Puppet se numesc **manifeste** si au, de obicei, extensia **.pp**. | ||
- | ===== Crearea unui manifest ===== | + | === Crearea unui manifest === |
Vom scrie un manifest care sa descrie o resursa de tip fisier. Fisierul va avea urmatoarele proprietati: | Vom scrie un manifest care sa descrie o resursa de tip fisier. Fisierul va avea urmatoarele proprietati: | ||
Line 16: | Line 16: | ||
* continut: "File created using Puppet"; | * continut: "File created using Puppet"; | ||
- | Declararea resursei va arata astfel: | + | Declararea resursei va arata astfel:<code> |
- | <code> | + | |
file {'my_file': | file {'my_file': | ||
path => '/tmp/my_file', | path => '/tmp/my_file', | ||
Line 29: | Line 28: | ||
- | ===== Aplicarea unui manifest ===== | + | === Aplicarea unui manifest === |
- | Aplicarea unui manifest se executa folosind comanda ''puppet apply'': | + | Aplicarea unui manifest se executa folosind comanda ''puppet apply'':<code> |
- | + | ||
- | <code> | + | |
[root@learn ~]# puppet apply my_file_manif.pp | [root@learn ~]# puppet apply my_file_manif.pp | ||
Notice: Compiled catalog for learn.localdomain in environment production in 0.18 seconds | Notice: Compiled catalog for learn.localdomain in environment production in 0.18 seconds | ||
Line 42: | Line 39: | ||
Verificati ca fisierul a fost creat, iar continutul si drepturile de acces sunt corecte. | Verificati ca fisierul a fost creat, iar continutul si drepturile de acces sunt corecte. | ||
- | Incercati sa aplicati din nou manifestul: | + | Incercati sa aplicati din nou manifestul:<code> |
- | + | ||
- | <code> | + | |
[root@learn ~]# puppet apply my_file_manif.pp | [root@learn ~]# puppet apply my_file_manif.pp | ||
Notice: Compiled catalog for learn.localdomain in environment production in 0.16 seconds | Notice: Compiled catalog for learn.localdomain in environment production in 0.16 seconds | ||
Line 52: | Line 47: | ||
Observati ca daca resursa este deja in starea descrisa de manifest, Puppet nu mai executa nici o actiune. | Observati ca daca resursa este deja in starea descrisa de manifest, Puppet nu mai executa nici o actiune. | ||
- | Modificati drepturile de acces ale fisierului la **755**, apoi aplicati din nou manifestul. | + | Modificati drepturile de acces ale fisierului la **755**, apoi aplicati din nou manifestul:<code> |
- | + | ||
- | <code> | + | |
[root@learn ~]# chmod 755 /tmp/my_file | [root@learn ~]# chmod 755 /tmp/my_file | ||
[root@learn ~]# puppet apply my_file_manif.pp | [root@learn ~]# puppet apply my_file_manif.pp | ||
Line 62: | Line 55: | ||
</code> | </code> | ||
- | Modificati continutul fisierului, apoi aplicati din nou manifestul. | + | Modificati continutul fisierului, apoi aplicati din nou manifestul:<code> |
- | + | ||
- | <code> | + | |
[root@learn ~]# echo "This is not my file" > /tmp/my_file | [root@learn ~]# echo "This is not my file" > /tmp/my_file | ||
[root@learn ~]# puppet apply my_file_manif.pp | [root@learn ~]# puppet apply my_file_manif.pp | ||
Line 74: | Line 65: | ||
Observati ca daca atributele resursei difera de cele descrise in manifest, aplicarea manifestului readuce resursa in starea dorita. | Observati ca daca atributele resursei difera de cele descrise in manifest, aplicarea manifestului readuce resursa in starea dorita. | ||
- | ===== Stari (ensure) ===== | + | === Stari (ensure) === |
+ | |||
+ | Atributul **ensure** specifica de cele mai multe ori daca resursa: | ||
+ | * trebuie sa existe (ensure => present); | ||
+ | * trebuie sa NU existe (ensure => absent). | ||
+ | |||
+ | Unele tipuri de resurse definesc stari aditionale pentru acest atribut. Resursele de tip **file** pot avea, in plus, urmatoarele valori pentru **ensure**: | ||
+ | * directory | ||
+ | * link | ||
+ | * file | ||
+ | |||
+ | Definiti un manifest care sa creeze un link simbolic la fisierul **/tmp/my_file**. | ||
+ | |||
+ | <note important> | ||
+ | Resursa trebuie sa aiba si atributul **target**. | ||
+ | </note> | ||
+ | |||
+ | <note> | ||
+ | Folositi documentatia Puppet pentru tipul de resursa **file**: [[http://docs.puppetlabs.com/references/stable/type.html#file]] | ||
+ | </note> | ||
+ | |||
+ | <solution -hidden> | ||
+ | <code> | ||
+ | file {'my_link': | ||
+ | target => '/tmp/my_file', | ||
+ | ensure => link, | ||
+ | } | ||
+ | </code> | ||
+ | </solution> | ||
+ | |||
+ | === Cheie autorizata SSH === | ||
+ | |||
+ | Intr-un manifest, definiti o resursa de tip "cheie autorizata SSH". | ||
+ | |||
+ | Resursa trebuie sa permita autentificarea utilizatorului ''student'' de pe masina fizica, in contul utilizatorului ''root'' de pe masina virtuala, fara parola. | ||
+ | |||
+ | <note important> | ||
+ | Daca nu exista, perechea de chei pentru utilizatorul **student** trebuie generata in prealabil. | ||
+ | |||
+ | Apoi, rulati comanda ''ssh-add ~/.ssh.id_rsa'' pe masina fizica, din contul ''student''. | ||
+ | </note> | ||
+ | |||
+ | <note> | ||
+ | Folositi documentatia Puppet pentru tipul de resursa **sshauthorizedkey**: [[http://docs.puppetlabs.com/references/stable/type.html#sshauthorizedkey]] | ||
+ | </note> | ||
+ | |||
+ | <solution -hidden> | ||
+ | <code> | ||
+ | ssh_authorized_key { 'my_ssh_key': | ||
+ | ensure => present, | ||
+ | key => "AAAAB3NzaC1yc2EAAAADAQABAAABAQDa8Op62ZBUpLHRFsLW9rbQMzDBUe8VLomIfV4ELqzN7B6Nu+8A9wd+PPKoAy3CM7PNWZ+T8LlPt+1iQB5iyUzN0t15auP2kRQJej6FQnyh96p2VFB+xG+jSepWcgDs5Lg+z+p4N20gHcpQwQX1+RtJ4W5n5ywWLJ4RETBCouw0H7CS01/27HcS8zt5xRSAeD0XW1KWEluC6xhXqeYyCEHaXVnWFONDAzvX5ydKMzbmaO0GNmHDyDLjLQJJtor8kI7qq9OeQuXQZcON2oFD51fUzM/5agwqTZlP19kjBTroNC7vNbALyP+2b/alJLke1qLGI20U+zwd5YId5sg/+KUt", | ||
+ | type => "ssh-rsa", | ||
+ | user => "root", | ||
+ | } | ||
+ | </code> | ||
+ | </solution> |