This shows you the differences between two versions of the page.
|
saisp:labs:10:contents:05 [2014/01/24 16:46] alexandru.carp |
saisp:labs:10:contents:05 [2017/05/22 17:28] (current) alexandru.carp |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ==== 05. Variabile si selectori ==== | + | ==== 05. [20p] Variabile si selectori ==== |
| - | === (Tutorial) Variabile === | + | === Variabile === |
| - | === (Tutorial) Facts === | + | Pentru a defini variabile in Puppet, folosim sintaxa ''$variabila'', atat pentru atribuire, cat si pentru referentiere. |
| - | === (Tutorial) If === | + | Rescriem manifestul pentru fisierul **my_file**, definind continutul fisierului intr-o variabila: |
| - | === (Exercitiu) Instalare NTP === | + | <code> |
| + | $my_content = "File created using Puppet." | ||
| + | file {'my_file': | ||
| + | path => '/tmp/my_file', | ||
| + | ensure => present, | ||
| + | mode => 0640, | ||
| + | content => $my_content, | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | === Facts === | ||
| + | |||
| + | In afara de variabilele definite de utilizator, Puppet defineste si anumite variabile de sistem. Acestea se numesc **facts**. | ||
| + | |||
| + | Pentru a vizualiza toate aceste variabile, folosim comanda ''facter'': | ||
| + | |||
| + | <code> | ||
| + | [root@learn ~]# facter | ||
| + | architecture => i386 | ||
| + | augeasversion => 1.1.0 | ||
| + | bios_release_date => 12/01/2006 | ||
| + | bios_vendor => innotek GmbH | ||
| + | bios_version => VirtualBox | ||
| + | blockdevice_sda_model => VBOX HARDDISK | ||
| + | blockdevice_sda_size => 8589934592 | ||
| + | blockdevice_sda_vendor => ATA | ||
| + | blockdevices => sda | ||
| + | ... | ||
| + | </code> | ||
| + | |||
| + | === If === | ||
| + | |||
| + | Un exemplu de folosire a variabilelor de sistem este luarea anumitor decizii in functie de valoarea acestora. | ||
| + | |||
| + | Urmatorul manifest se asigura ca serviciul NTP: | ||
| + | * este pornit daca masina este fizica; | ||
| + | * este oprit daca masina este virtuala. | ||
| + | |||
| + | Decizia se ia in functie de valoarea variabile de sistem ''$is_virtual''. | ||
| + | |||
| + | <code> | ||
| + | if str2bool("$is_virtual") { | ||
| + | service {'ntpd': | ||
| + | ensure => stopped, | ||
| + | enable => false, | ||
| + | } | ||
| + | } | ||
| + | else { | ||
| + | service { 'ntpd': | ||
| + | name => 'ntpd', | ||
| + | ensure => running, | ||
| + | enable => true, | ||
| + | hasrestart => true, | ||
| + | require => Package['ntp'], | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Aplicati manifestul si observati starea serviciului NTP. | ||
| + | |||
| + | === Manifest pentru instalare NTP === | ||
| + | |||
| + | Mai intai, dezinstalati serverul de NTP din masina virtuala. | ||
| + | |||
| + | Apoi, scrieti un manifest care: | ||
| + | * sa instaleze pachetul pentru serverul NTP; | ||
| + | * sa se asigure ca serviciul NTP este pornit (numele serviciului difera, in functie de distributia de Linux); | ||
| + | * sa se asigure ca fisierul de configurare este cel corect (in functie de distributie). | ||
| + | Folositi structura conditionala **case**. | ||
| + | |||
| + | <note> | ||
| + | Consultati documentatia pentru **case**: https://docs.puppet.com/puppet/3.5/lang_conditional.html#case-statements | ||
| + | </note> | ||
| + | |||
| + | <note> | ||
| + | * Pentru Ubuntu sau Debian serviciul se numeste **ntp** iau pentru Redhat si Fedora se numeste **ntpd**. | ||
| + | * Descarcati fisierul de configurare pentru Debian / Ubuntu (https://github.com/ihcsim/puppet-tutorial/blob/master/src/modules/ntp/files/ntp.conf.debian) sau RedHat / Fedora (https://github.com/ihcsim/puppet-tutorial/blob/master/src/modules/ntp/files/ntp.conf.el) | ||
| + | </note> | ||
| + | |||
| + | <solution -hidden> | ||
| + | <code> | ||
| + | case $operatingsystem { | ||
| + | centos, redhat: { | ||
| + | $service_name = 'ntpd' | ||
| + | $conf_file = 'ntp.conf.el' | ||
| + | } | ||
| + | debian, ubuntu: { | ||
| + | $service_name = 'ntp' | ||
| + | $conf_file = 'ntp.conf.debian' | ||
| + | } | ||
| + | } | ||
| + | |||
| + | package { 'ntp': | ||
| + | ensure => installed, | ||
| + | } | ||
| + | file { 'ntp.conf': | ||
| + | path => '/etc/ntp.conf', | ||
| + | ensure => file, | ||
| + | require => Package['ntp'], | ||
| + | source => "/root/${conf_file}" | ||
| + | } | ||
| + | service { 'ntp': | ||
| + | name => $service_name, | ||
| + | ensure => running, | ||
| + | enable => true, | ||
| + | subscribe => File['ntp.conf'], | ||
| + | } | ||
| + | </code> | ||
| + | </solution> | ||