This shows you the differences between two versions of the page.
saisp:labs:10:contents:02 [2014/01/21 21:44] alexandru.carp [Crearea unui manifest] |
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'':<code> | ||
+ | [root@learn ~]# puppet apply my_file_manif.pp | ||
+ | Notice: Compiled catalog for learn.localdomain in environment production in 0.18 seconds | ||
+ | Notice: /Stage[main]//File[my_file]/ensure: created | ||
+ | Notice: Finished catalog run in 0.38 seconds | ||
+ | </code> | ||
+ | |||
+ | Verificati ca fisierul a fost creat, iar continutul si drepturile de acces sunt corecte. | ||
+ | |||
+ | Incercati sa aplicati din nou manifestul:<code> | ||
+ | [root@learn ~]# puppet apply my_file_manif.pp | ||
+ | Notice: Compiled catalog for learn.localdomain in environment production in 0.16 seconds | ||
+ | Notice: Finished catalog run in 0.38 seconds | ||
+ | </code> | ||
+ | |||
+ | 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:<code> | ||
+ | [root@learn ~]# chmod 755 /tmp/my_file | ||
+ | [root@learn ~]# puppet apply my_file_manif.pp | ||
+ | Notice: Compiled catalog for learn.localdomain in environment production in 0.18 seconds | ||
+ | Notice: /Stage[main]//File[my_file]/mode: mode changed '0755' to '0640' | ||
+ | Notice: Finished catalog run in 0.38 seconds | ||
+ | </code> | ||
+ | |||
+ | Modificati continutul fisierului, apoi aplicati din nou manifestul:<code> | ||
+ | [root@learn ~]# echo "This is not my file" > /tmp/my_file | ||
+ | [root@learn ~]# puppet apply my_file_manif.pp | ||
+ | Notice: Compiled catalog for learn.localdomain in environment production in 0.18 seconds | ||
+ | Notice: /Stage[main]//File[my_file]/content: content changed '{md5}7225302b0d15d4a2562c2ab55e45d4cc' to '{md5}b4fdf30d694de5a5d7fe7a50cda27851' | ||
+ | Notice: Finished catalog run in 0.41 seconds | ||
+ | </code> | ||
+ | |||
+ | Observati ca daca atributele resursei difera de cele descrise in manifest, aplicarea manifestului readuce resursa in starea dorita. | ||
+ | |||
+ | === 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> |