This shows you the differences between two versions of the page.
saisp:labs:10:contents:05 [2013/11/11 00:46] 127.0.0.1 external edit |
saisp:labs:10:contents:05 [2017/05/22 17:28] (current) alexandru.carp |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 05. Lorem ipsum ==== | + | ==== 05. [20p] Variabile si selectori ==== |
+ | === Variabile === | ||
+ | |||
+ | Pentru a defini variabile in Puppet, folosim sintaxa ''$variabila'', atat pentru atribuire, cat si pentru referentiere. | ||
+ | |||
+ | Rescriem manifestul pentru fisierul **my_file**, definind continutul fisierului intr-o variabila: | ||
+ | |||
+ | <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> | ||