Intshayelelo kuPopi

IPuppet yinkqubo yolawulo loqwalaselo. Isetyenziselwa ukuzisa iindwendwe kwindawo efunwayo kwaye igcine le meko.

Ndisebenze noPuppet iminyaka engaphezu kwemihlanu ngoku. Lo mbhalo ngokuyimfuneko uguqulelwe kwaye ulungelelaniswe ngokutsha kwamanqaku aphambili avela kumaxwebhu asemthethweni, okuya kuvumela abaqalayo ukuba baqonde ngokukhawuleza undoqo wePuppet.

Intshayelelo kuPopi

Ulwazi olusisiseko

Inkqubo yokusebenza yePuppet yi-server-server, nangona ikwaxhasa ukusebenza komncedisi kunye nokusebenza okulinganiselweyo.

Imodeli yokutsala yokusebenza isetyenziswa: ngokungagqibekanga, kanye ngesiqingatha seyure nganye, abathengi banxibelelana nomncedisi woqwalaselo kwaye bawusebenzise. Ukuba usebenze kunye ne-Ansible, ngoko basebenzisa imodeli yokutyhala eyahlukileyo: umlawuli uqalisa inkqubo yokufaka uqwalaselo, abaxhasi ngokwabo abayi kusebenzisa nantoni na.

Ngexesha lonxibelelwano lwenethiwekhi, uguqulelo lwe-TLS oluneendlela ezimbini lusetyenziswa: umncedisi kunye nomxhasi banezitshixo zabo zangasese kunye neziqinisekiso ezihambelanayo. Ngokuqhelekileyo umncedisi ukhupha izatifikethi kubaxhasi, kodwa ngokomgaqo kunokwenzeka ukusebenzisa i-CA yangaphandle.

Intshayelelo kwiimanifestos

Kwisigama soonopopi kumncedisi woonopopi qhagamshela iindawo zokuhlala (iindawo zokuhlala). Uqwalaselo lweendawo zokuhlala lubhaliwe kwiimanifesto ngolwimi lwenkqubo ekhethekileyo - IPuppet DSL.

I-DSL yoonopopi lulwimi olubhengezayo. Ichaza imeko efunwayo ye-node ngendlela yezibhengezo zezibonelelo zomntu ngamnye, umzekelo:

  • Ifayile ikhona kwaye inomxholo othile.
  • Iphakheji ifakiwe.
  • Inkonzo iqalile.

Izibonelelo zinokudityaniswa:

  • Kukho ukuxhomekeka, kuchaphazela indlela yokusetyenziswa kwezibonelelo.
    Umzekelo, "qala ufake ipakethe, emva koko uhlele ifayile yoqwalaselo, emva koko uqalise inkonzo."
  • Kukho izaziso - ukuba isibonelelo sitshintshile, sithumela izaziso kwizibonelelo ezibhaliselwe kuyo.
    Umzekelo, ukuba ifayile yoqwalaselo iyatshintsha, unokuphinda uyiqalise ngokuzenzekelayo inkonzo.

Ukongezelela, i-DSL yePuppet inemisebenzi kunye nezinto eziguquguqukayo, kunye neengxelo ezinemiqathango kunye nabakhethi. Iindlela ezahlukeneyo zokubonisa nazo ziyaxhaswa - i-EPP kunye ne-ERB.

Ipopathi ibhalwe kwiRuby, ngoko ke uninzi lwezakhiwo kunye nemigaqo ithathwa apho. I-Ruby ikuvumela ukuba ukwandise i-Puppet-yongeza i-logic enzima, iintlobo ezintsha zezixhobo, imisebenzi.

Ngelixa iPuppet isebenza, ibonakalisa indawo nganye ethile kumncedisi idityaniswe kulawulo. ulawulo luhlu lwezibonelelo kunye nobudlelwane babo emva kokubala ixabiso lemisebenzi, iinguqu kunye nokwandiswa kweengxelo ezinemiqathango.

Isintaksi kunye nesimbo sekhowudi

Nanga amacandelo amaxwebhu asemthethweni aya kukunceda uqonde isintaksi ukuba imizekelo enikiweyo ayonelanga:

Nanku umzekelo wendlela i-manifest ekhangeleka ngayo:

# Комментарии пишутся, как и много где, после решётки.
#
# Описание конфигурации ноды начинается с ключевого слова node,
# за которым следует селектор ноды — хостнейм (с доменом или без)
# или регулярное выражение для хостнеймов, или ключевое слово default.
#
# После этого в фигурных скобках описывается собственно конфигурация ноды.
#
# Одна и та же нода может попасть под несколько селекторов. Про приоритет
# селекторов написано в статье про синтаксис описания нод.
node 'hostname', 'f.q.d.n', /regexp/ {
  # Конфигурация по сути является перечислением ресурсов и их параметров.
  #
  # У каждого ресурса есть тип и название.
  #
  # Внимание: не может быть двух ресурсов одного типа с одинаковыми названиями!
  #
  # Описание ресурса начинается с его типа. Тип пишется в нижнем регистре.
  # Про разные типы ресурсов написано ниже.
  #
  # После типа в фигурных скобках пишется название ресурса, потом двоеточие,
  # дальше идёт опциональное перечисление параметров ресурса и их значений.
  # Значения параметров указываются через т.н. hash rocket (=>).
  resource { 'title':
    param1 => value1,
    param2 => value2,
    param3 => value3,
  }
}

Ukufakwa ngaphakathi kunye nokwaphulwa komgca akuyonxalenye efunekayo ye-manifest, kodwa kukho isincomo isitayile sesikhokelo. Isishwankathelo:

  • Ii-indenti zesithuba ezibini, iithebhu azisetyenziswanga.
  • Iibrayisi ezigobileyo zihlulwe sisithuba;
  • Iikoma emva kweparamitha nganye, kuquka neyokugqibela. Ipharamitha nganye ikumgca owahlukileyo. Ukhetho lwenziwe kwimeko ngaphandle kweeparamitha kunye neparamitha enye: ungabhala kumgca omnye kwaye ngaphandle kwesiphumlisi (i.e. resource { 'title': } и resource { 'title': param => value }).
  • Iintolo kwiiparameters kufuneka zibe kwinqanaba elifanayo.
  • Iintolo zobudlelwane bobutyebi zibhalwe phambi kwabo.

Indawo yeefayile kwi pappetserver

Ngengcaciso eyongezelelekileyo, ndiza kwazisa ingqikelelo ye "root directory". Ulawulo lweengcambu lulawulo oluqulathe uqwalaselo lwePuppet yendawo ethile.

Ulawulo lweengcambu luyahluka ngokuxhomekeke kuguqulelo lwePuppet kunye nemekobume esetyenzisiweyo. Imeko-bume ziiseti ezizimeleyo zoqwalaselo ezigcinwa kubalawuli abahlukeneyo. Idla ngokusetyenziswa ngokudityaniswa ne-git, apho iimeko zendalo zenziwe kumasebe e-git. Ngokufanelekileyo, i-node nganye ibekwe kwindawo enye okanye kwenye indawo. Oku kunokuqwalaselwa kwi-node ngokwayo, okanye kwi-ENC, endiya kuthetha ngayo kwinqaku elilandelayo.

  • Kuhlelo lwesithathu ("iPuppet endala") isiseko solawulo sasi /etc/puppet. Ukusetyenziswa kweemeko-bume kuyakhethwa-umzekelo, asizisebenzisi kunye nePuppet endala. Ukuba iindawo ezisingqongileyo zisetyenziswa, zihlala zigcinwa kuyo /etc/puppet/environments, uvimba weefayili wengcambu uya kuba lulawulo lwemekobume. Ukuba iimeko-bume azisetyenziswanga, ulawulo lweengcambu luya kuba lulawulo olusisiseko.
  • Ukuqala kuguqulelo lwesine (“iPuppet entsha”), ukusetyenziswa kwemeko-bume kwaba sisinyanzelo, kwaye uvimba weefayili wesiseko wasiwa kuwo. /etc/puppetlabs/code. Ngokufanelekileyo, iindawo ezisingqongileyo zigcinwa kuyo /etc/puppetlabs/code/environments, ulawulo lweengcambu lulawulo lokusingqongileyo.

Kufuneka kubekho uvimba weefayili onganeno kulawulo lweengcambu manifests, equlathe enye okanye ngaphezulu ibonakalisa iinodi. Ukongeza, kufuneka kubekho i-subdirectory modules, equlathe iimodyuli. Ndiza kukuxelela ukuba zeziphi iimodyuli kamva. Ukongeza, iPuppet endala inokuba nayo i-subdirectory files, equlathe iifayile ezahlukeneyo esizikhuphela kwiindawo zokuhlala. KwiPuppet entsha, zonke iifayile zibekwe kwiimodyuli.

Iifayile zeManifest zinolwandiso .pp.

Isibini semizekelo yokulwa

Inkcazo ye-node kunye nesixhobo kuyo

Kwi-node server1.testdomain ifayile kufuneka yenziwe /etc/issue ngomxholo Debian GNU/Linux n l. Ifayile kufuneka ibe yeyomsebenzisi kunye neqela root, amalungelo okufikelela kufuneka abe 644.

Sibhala i-manifesto:

node 'server1.testdomain' {   # блок конфигурации, относящийся к ноде server1.testdomain
    file { '/etc/issue':   # описываем файл /etc/issue
        ensure  => present,   # этот файл должен существовать
        content => 'Debian GNU/Linux n l',   # у него должно быть такое содержимое
        owner   => root,   # пользователь-владелец
        group   => root,   # группа-владелец
        mode    => '0644',   # права на файл. Они заданы в виде строки (в кавычках), потому что иначе число с 0 в начале будет воспринято как записанное в восьмеричной системе, и всё пойдёт не так, как задумано
    }
}

Ubudlelwane phakathi kwezibonelelo kwi-node

Kwi-node server2.testdomain nginx kufuneka isebenze, isebenza ngoqwalaselo olulungiselelwe ngaphambili.

Masiyibolise ingxaki:

  • Iphakheji kufuneka ifakwe nginx.
  • Kuyimfuneko ukuba iifayile zoqwalaselo zikotshwe kumncedisi.
  • Inkonzo kufuneka iqhutywe nginx.
  • Ukuba ulungelelwaniso luhlaziywa, inkonzo kufuneka iqalwe kwakhona.

Sibhala i-manifesto:

node 'server2.testdomain' {   # блок конфигурации, относящийся к ноде server2.testdomain
    package { 'nginx':   # описываем пакет nginx
        ensure => installed,   # он должен быть установлен
    }
  # Прямая стрелка (->) говорит о том, что ресурс ниже должен
  # создаваться после ресурса, описанного выше.
  # Такие зависимости транзитивны.
    -> file { '/etc/nginx':   # описываем файл /etc/nginx
        ensure  => directory,   # это должна быть директория
        source  => 'puppet:///modules/example/nginx-conf',   # её содержимое нужно брать с паппет-сервера по указанному адресу
        recurse => true,   # копировать файлы рекурсивно
        purge   => true,   # нужно удалять лишние файлы (те, которых нет в источнике)
        force   => true,   # удалять лишние директории
    }
  # Волнистая стрелка (~>) говорит о том, что ресурс ниже должен
  # подписаться на изменения ресурса, описанного выше.
  # Волнистая стрелка включает в себя прямую (->).
    ~> service { 'nginx':   # описываем сервис nginx
        ensure => running,   # он должен быть запущен
        enable => true,   # его нужно запускать автоматически при старте системы
    }
  # Когда ресурс типа service получает уведомление,
  # соответствующий сервис перезапускается.
}

Ukuze oku kusebenze, udinga malunga nale ndawo ilandelayo yefayile kwi-puppet server:

/etc/puppetlabs/code/environments/production/ # (это для нового Паппета, для старого корневой директорией будет /etc/puppet)
├── manifests/
│   └── site.pp
└── modules/
    └── example/
        └── files/
            └── nginx-conf/
                ├── nginx.conf
                ├── mime.types
                └── conf.d/
                    └── some.conf

Iintlobo zoovimba

Uluhlu olupheleleyo lweentlobo zemithombo exhaswayo lunokufumaneka apha kumaxwebhu, apha ndiya kuchaza iindidi ezintlanu ezisisiseko, apho kwindlela yam eyaneleyo yokusombulula iingxaki ezininzi.

ifayili

Ulawula iifayile, abalawuli, ii-symlinks, imixholo yazo, kunye namalungelo okufikelela.

Iiparameters:

  • igama lovimba — indlela eya kwifayile (ukhetho)
  • indlela — indlela eya kwifayile (ukuba ayichazwanga kwigama)
  • qinisekisa - uhlobo lwefayile:
    • absent - cima ifayile
    • present — kufuneka kubekho ifayile yalo naluphi na uhlobo (ukuba akukho fayile, ifayile eqhelekileyo iya kwenziwa)
    • file - ifayile eqhelekileyo
    • directory -uvimba weefayili
    • link - i-symlink
  • umxholo — imixholo yefayile (efanele kuphela iifayile eziqhelekileyo, ayinakusetyenziswa kunye umthombo okanye joliswe kuyo)
  • umthombo — ikhonkco kumendo ofuna ukukopa kuwo imixholo yefayile (ayinakusetyenziswa kunye umxholo okanye joliswe kuyo). Ingachazwa njenge URI enenkqubo puppet: (kwaye iifayile ezisuka kumncedisi woonopopi ziya kusetyenziswa), kunye neskimu http: (Ndiyathemba ukuba kucacile ukuba kuya kwenzeka ntoni kule meko), kunye nomzobo file: okanye njengendlela epheleleyo ngaphandle kwe-schema (ngoko ifayile esuka kwi-FS yendawo kwindawo iya kusetyenziswa)
  • joliswe kuyo — apho i-symlink kufuneka ikhombe khona (ayinakusetyenziselwa kunye umxholo okanye umthombo)
  • umnini — Umsebenzisi ofanele ukuba ngumnikazi wefayile
  • iqela — iqela ekufuneka ifayile ibe yeyolo
  • imo - iimvume zefayile (njengomtya)
  • ukuziqalekisa - yenza kube lula ukuqhubekekiswa koluhlu
  • kucoca - yenza ukucima iifayile ezingachazwanga kwiPuppet
  • amandla - yenza ukucima abalawuli abangachazwanga kwiPuppet

Ipakethe

Ifakela kwaye isuse iipakethe. Iyakwazi ukuphatha izaziso - iphinda ifake iphakheji ukuba iparameter ichaziwe reinstall_on_refresh.

Iiparameters:

  • igama lovimba - igama lepakethe (ukhetho)
  • igama — igama lepakethe (ukuba alichazwanga kwigama)
  • Umniki -umphathi wepakethe oza kusetyenziswa
  • qinisekisa -imeko efunwayo yepakethe:
    • present, installed - nayiphi na inguqulelo efakiweyo
    • latest - inguqulelo yamva nje efakiweyo
    • absent -cinyiwe (apt-get remove)
    • purged — icinywe kunye neefayile zoqwalaselo (apt-get purge)
    • held - Uguqulelo lwepakethi lutshixiwe (apt-mark hold)
    • любая другая строка — inguqulelo echaziweyo ifakiwe
  • reinstall_on_refresh -Ukuba a true, emva kokufumana isaziso iphakheji iya kufakwa kwakhona. Isebenziseka kunikezelo olusekwe kumthombo, apho ukwakhiwa kwakhona kweepakethe kunokuba yimfuneko xa utshintsha iiparamitha zokwakha. Ukuhlala kukho false.

inkonzo

Ulawula iinkonzo. Iyakwazi ukucubungula izaziso - iphinda iqalise inkonzo.

Iiparameters:

  • igama lovimba — inkonzo ilawulwe (ukhetho)
  • igama — inkonzo ekufuneka ilawulwe (ukuba ayichazwanga egameni)
  • qinisekisa -imeko efunwayo yenkonzo:
    • running - yasungulwa
    • stopped - wayeka
  • kunceda — ilawula ukukwazi ukuqalisa inkonzo:
    • true I-autorun yenziwe (systemctl enable)
    • mask -zifihlile (systemctl mask)
    • false - i-autorun ivaliwe (systemctl disable)
  • phinda Uqalele - umyalelo wokuqalisa kwakhona inkonzo
  • isimo — umyalelo wokukhangela ubume benkonzo
  • iqale phantsi — bonisa ukuba i-initscript yenkonzo iyakuxhasa ukuqalisa kwakhona. Ukuba false kwaye iparameter ichaziwe phinda Uqalele — ixabiso lale parameter lisetyenziswa. Ukuba false kunye nepharamitha phinda Uqalele ayichazwanga - inkonzo imisiwe kwaye iqalwe ngokutsha (kodwa i-systemd isebenzisa umyalelo systemctl restart).
  • imeko — bonisa ukuba i-initscript yenkonzo iyawuxhasa na umyalelo status. ukuba false, ngoko ixabiso leparameter liyasetyenziswa isimo. Ukuhlala kukho true.

exec

Usebenzisa imiyalelo yangaphandle. Ukuba awukhankanyi iiparamitha kudala, ukuba kuphela u, ngaphandle okanye ngokuhlaziya, umyalelo uzakuqhutywa ngalo lonke ixesha iPuppet iqhutywa. Iyakwazi ukuqhubekekisa izaziso- iqhuba umyalelo.

Iiparameters:

  • igama lovimba -umyalelo kufuneka wenziwe (ukhetho)
  • umyalelo — umyalelo oza kuphunyezwa (ukuba awuchazwanga egameni)
  • indlela — iindlela zokukhangela ifayile ephunyeziweyo
  • ukuba kuphela u - ukuba umyalelo ochazwe kule parameter ugqitywe ngekhowudi yokubuyisela i-zero, umyalelo oyintloko uya kuphunyezwa
  • ngaphandle — ukuba umyalelo okhankanyiweyo kule parameter ugqitywe ngekhowudi yokubuyiswa engeyiyo-zero, umyalelo oyintloko uya kuphunyezwa.
  • kudala Ukuba ifayile echazwe kule parameter ayikho, umyalelo oyintloko uya kuphunyezwa
  • ngokuhlaziya -Ukuba a true, ngoko umyalelo uya kwenziwa kuphela xa le exec ifumana isaziso kwabanye oovimba
  • cwd — uvimba weefayili oza kuqhuba kuwo umyalelo
  • umsebenzisi — umsebenzisi oza kusebenzisa kuye umyalelo
  • Umniki -usebenza njani umyalelo:
    • iposix - inkqubo yomntwana yenziwe ngokulula, qiniseka ukuba uyayichaza indlela
    • iqokobhe - umyalelo uqaliswe kwiqokobhe /bin/sh, ayinakuchazwa indlela, ungasebenzisa iglobhi, imibhobho kunye nezinye iimpawu zeqokobhe. Ngesiqhelo ichongwa ngokuzenzekelayo ukuba kukho nabaphi na abalinganiswa abakhethekileyo (|, ;, &&, || kwaye nangokunjalo).

Cron

Ilawula iicronjobs.

Iiparameters:

  • igama lovimba - uhlobo oluthile lwesazisi
  • qinisekisa -Imeko yomsebenzi wesithsaba:
    • present - dala ukuba akukho
    • absent - cima ukuba ikhona
  • umyalelo - ngowuphi umyalelo wokuqhuba
  • indawo - apho ungenza khona umyalelo (uluhlu lwezinto eziguquguqukayo zemekobume kunye namaxabiso azo nge =)
  • umsebenzisi — kumsebenzisi oza kuqhuba umyalelo
  • mzuzu, yure, usuku lweveki, ngenyanga, inyanga - ukubaleka nini icron. Ukuba nayiphi na yezi mpawu ayichazwanga, ixabiso layo kwi-crontab liya kuba *.

KwiPhepha 6.0 Cron ngokungathi isusiwe ebhokisini kwi-puppetserver, ngoko akukho maxwebhu kwindawo ngokubanzi. Kodwa yena isebhokisini kwi-puppet-arhente, ngoko akukho mfuneko yokuyifaka ngokwahlukileyo. Ungawabona amaxwebhu ayo kuxwebhu loguqulelo lwesihlanu lwePuppet, okanye kwiGitHub.

Malunga nezibonelelo ngokubanzi

Iimfuno zezinto ezizodwa

Eyona mpazamo ixhaphakileyo sidibana nayo Phinda kabini isibhengezo. Le mpazamo yenzeka xa izibonelelo ezimbini okanye ngaphezulu zodidi olufanayo ezinegama elifanayo zivela kulawulo.

Ngoko ke, ndiya kubhala kwakhona: ibonisa indawo enye akufuneki iqulathe izixhobo zodidi olufanayo ezinesihloko esifanayo!

Ngamanye amaxesha kukho imfuneko yokufaka iipakethe ezinegama elifanayo, kodwa kunye nabaphathi beephakheji ezahlukeneyo. Kule meko, kufuneka usebenzise iparameter nameukunqanda impazamo:

package { 'ruby-mysql':
  ensure   => installed,
  name     => 'mysql',
  provider => 'gem',
}
package { 'python-mysql':
  ensure   => installed,
  name     => 'mysql',
  provider => 'pip',
}

Ezinye iindidi zoovimba zinokhetho olufanayo ukunceda ukuthintela uphindaphindo − name у inkonzo, command у exec, kwaye nangokunjalo.

Iimetaparameters

Uhlobo ngalunye lomthombo luneeparamitha ezikhethekileyo, kungakhathaliseki ukuba lunjani na.

Uluhlu olupheleleyo lweeparamitha zemeta kuxwebhu lwePuppet.

Uluhlu olufutshane:

  • zifuna — le parameter ibonisa ukuba lo vimba uxhomekeke kweziphi na izibonelelo.
  • phambi kokuba - Le parameter ixela ukuba zeziphi izibonelelo ezixhomekeke kwesi sixhobo.
  • rhuma — le parameter ixela ukuba lo vimba ufumana izaziso.
  • yazisa — Le parameter ixela ukuba zeziphi izixhobo ezifumana izaziso kwesi sixhobo.

Zonke iimetaparameters ezidwelisiweyo zamkela ikhonkco lesixhobo esinye okanye uluhlu lwamakhonkco kwizibiyeli ezisikwere.

Amakhonkco kwizibonelelo

Ikhonkco lomthombo kukukhankanywa nje kobutyebi. Zisetyenziswa ikakhulu ukubonisa ukuxhomekeka. Ukubhekisa kwisixhobo esingekhoyo kuya kubangela impazamo yoqulunqo.

Isivakalisi sekhonkco simi ngolu hlobo lulandelayo: uhlobo lovimba olunobumba omkhulu (ukuba igama lodidi liqulathe iikholoni ezimbini, ngoko ke indawo nganye yegama phakathi kweekholoni ibhalwe ngoonobumba abakhulu), ngoko ke igama lovimba kwizibiyeli ezisikwere (imeko yegama). ayitshintshi!). Kufuneka kungabikho zithuba; izibiyeli ezisikwere zibhalwa ngoko nangoko emva kohlobo lwegama.

Umzekelo:

file { '/file1': ensure => present }
file { '/file2':
  ensure => directory,
  before => File['/file1'],
}
file { '/file3': ensure => absent }
File['/file1'] -> File['/file3']

Ukuxhomekeka kunye nezaziso

Amaxwebhu apha.

Njengoko bekutshiwo ngaphambili, ukuxhomekeka okulula phakathi kwezibonelelo kuyatshintsha. Ngendlela, qaphela xa udibanisa ukuxhomekeka - unokwenza ukuxhomekeka kwe-cyclic, okuya kubangela impazamo yokuhlanganiswa.

Ngokungafaniyo nabaxhomekeke, izaziso azidluli. Le migaqo ilandelayo iyasebenza kwizaziso:

  • Ukuba isibonelelo sifumana isaziso, siyahlaziywa. Iintshukumo zohlaziyo zixhomekeke kudidi lwesixhobo - exec uqhuba umyalelo, inkonzo iqala kwakhona inkonzo, Ipakethe ifaka kwakhona ipakethe. Ukuba isibonelelo asinalo isenzo sohlaziyo esichazwe, ngoko akukho nto eyenzekayo.
  • Ngexesha elinye lePuppet, isibonelelo sihlaziywa ngaphezulu kwesihlandlo esinye. Oku kunokwenzeka ngenxa yokuba izaziso zibandakanya ukuxhomekeka kunye negrafu yokuxhomekeka ayinayo imijikelo.
  • Ukuba iPuppet itshintsha imeko yesixhobo, isibonelelo sithumela izaziso kuzo zonke izixhobo ezibhaliswe kuyo.
  • Ukuba isibonelelo sihlaziywa, sithumela izaziso kuzo zonke izixhobo ezibhalisiweyo.

Ukuphatha iiparameters ezingachazwanga

Njengomthetho, ukuba iparameter yomthombo ayinaxabiso elingagqibekanga kwaye le parameter ayichazwanga kwi-manifest, ngoko iPuppet ayisayi kutshintsha le mpahla kwisixhobo esihambelanayo kwindawo. Umzekelo, ukuba umthombo wohlobo ifayili iparameter ayichazwanga owner, ngoko iPuppet ayizukutshintsha umnini wefayile ehambelanayo.

Intshayelelo kwiiklasi, iinguqu kunye neenkcazo

Masithi sineendawo ezininzi ezinendawo efanayo yoqwalaselo, kodwa kukwakho iyantlukwano - kungenjalo sinokuyichaza yonke kwibhloko enye. node {}. Ewe, unokukhuphela ngokulula iinxalenye ezifanayo zoqwalaselo, kodwa ngokubanzi esi sisisombululo esibi - uqwalaselo luyakhula, kwaye ukuba utshintsha inxalenye eqhelekileyo yoqwalaselo, kuya kufuneka uhlele into enye kwiindawo ezininzi. Ngelo xesha, kulula ukwenza impazamo, kwaye ngokubanzi, umgaqo we-DRY (ungaphindi) wasungulwa ngenxa yesizathu.

Ukusombulula le ngxaki kukho uyilo olunje класс.

Iiklasi

I klasi yibhloko enegama lekhowudi yepoppet. Iiklasi ziyafuneka ukuze kuphinde kusetyenziswe ikhowudi.

Okokuqala iklasi kufuneka ichazwe. Inkcazo ngokwayo ayongezi nayiphi na izibonelelo naphi na. Iklasi ichazwe kwi-manifest:

# Описание класса начинается с ключевого слова class и его названия.
# Дальше идёт тело класса в фигурных скобках.
class example_class {
    ...
}

Emva koko iklasi ingasetyenziswa:

# первый вариант использования — в стиле ресурса с типом class
class { 'example_class': }
# второй вариант использования — с помощью функции include
include example_class
# про отличие этих двух вариантов будет рассказано дальше

Umzekelo osuka kumsebenzi wangaphambili- masihambise ufakelo kunye noqwalaselo lwe nginx kwiklasi:

class nginx_example {
    package { 'nginx':
        ensure => installed,
    }
    -> file { '/etc/nginx':
        ensure => directory,
        source => 'puppet:///modules/example/nginx-conf',
        recure => true,
        purge  => true,
        force  => true,
    }
    ~> service { 'nginx':
        ensure => running,
        enable => true,
    }
}

node 'server2.testdomain' {
    include nginx_example
}

Izinto eziguquguqukayo

Iklasi esuka kumzekelo wangaphambili ayiguquguquki kwaphela kuba ihlala izisa uqwalaselo olufanayo lwe nginx. Masenze umendo woqwalaselo oluguquguqukayo, emva koko le klasi ingasetyenziselwa ukufaka i-nginx ngalo naluphi na uqwalaselo.

Inokwenziwa usebenzisa izinto eziguquguqukayo.

Ingqalelo: izinto eziguquguqukayo kwiPuppet aziguquki!

Ukongeza, ukuguquguquka kunokufumaneka kuphela emva kokuba kubhengezwe, ngaphandle koko ixabiso lenguqu liya kuba undef.

Umzekelo wokusebenza ngezinto eziguquguqukayo:

# создание переменных
$variable = 'value'
$var2 = 1
$var3 = true
$var4 = undef
# использование переменных
$var5 = $var6
file { '/tmp/text': content => $variable }
# интерполяция переменных — раскрытие значения переменных в строках. Работает только в двойных кавычках!
$var6 = "Variable with name variable has value ${variable}"

Unopopi unalo izithuba zamagama, kunye nezinto eziguquguqukayo, ngokufanelekileyo, zine indawo yokubonakala: Inguqu enegama elifanayo inokuchazwa kwizithuba zamagama ezahlukeneyo. Xa uxazulula ixabiso le-variable, i-variable ikhangelwe kwi-namespace yangoku, emva koko kwi-namespace evaliweyo, njalo njalo.

Imizekelo yesithuba samagama:

  • i-global - variables ngaphandle kweklasi okanye inkcazo ye-node iya apho;
  • indawo yegama lendawo kwinkcazo yendawo;
  • indawo yamagama yeklasi kwinkcazo yeklasi.

Ukunqanda ukungacaci xa ufikelela kuguquko, ungakhankanya indawo yegama kwigama eliguquguqukayo:

# переменная без пространства имён
$var
# переменная в глобальном пространстве имён
$::var
# переменная в пространстве имён класса
$classname::var
$::classname::var

Masivume ukuba indlela eya kuqwalaselo lwe nginx ilele kuguquguqukayo $nginx_conf_source. Emva koko iklasi iya kujongeka ngolu hlobo:

class nginx_example {
    package { 'nginx':
        ensure => installed,
    }
    -> file { '/etc/nginx':
        ensure => directory,
        source => $nginx_conf_source,   # здесь используем переменную вместо фиксированной строки
        recure => true,
        purge  => true,
        force  => true,
    }
    ~> service { 'nginx':
        ensure => running,
        enable => true,
    }
}

node 'server2.testdomain' {
    $nginx_conf_source = 'puppet:///modules/example/nginx-conf'
    include nginx_example
}

Nangona kunjalo, umzekelo onikiweyo umbi kuba kukho "ulwazi oluyimfihlo" ukuba kwindawo ethile ngaphakathi kweklasi kusetyenziswe igama elinjalo nelinjalo. Kuchaneke ngakumbi ukwenza olu lwazi ngokubanzi - iiklasi zinokuba neeparamitha.

Iiparamitha zeklasi zizinto eziguquguqukayo kwisithuba samagama eklasi, zicaciswe kwisihloko seklasi kwaye zingasetyenziswa njengeziguquguquko eziqhelekileyo kumzimba weklasi. Amaxabiso eParameter acacisiwe xa usebenzisa iklasi kumboniso.

Iparameter inokumiselwa kwixabiso elingagqibekanga. Ukuba iparameter ayinalo ixabiso elingagqibekanga kwaye ixabiso alimiselwanga xa lisetyenziswa, liya kubangela impazamo yoqulunqo.

Masenze parameterize iklasi kumzekelo ongasentla kwaye songeze iiparameters ezimbini: eyokuqala, efunekayo, yindlela eya kuqwalaselo, kwaye eyesibini, ekhethiweyo, ligama lephakheji nge nginx (kwiDebian, umzekelo, kukho iipakethe). nginx, nginx-light, nginx-full).

# переменные описываются сразу после имени класса в круглых скобках
class nginx_example (
  $conf_source,
  $package_name = 'nginx-light', # параметр со значением по умолчанию
) {
  package { $package_name:
    ensure => installed,
  }
  -> file { '/etc/nginx':
    ensure  => directory,
    source  => $conf_source,
    recurse => true,
    purge   => true,
    force   => true,
  }
  ~> service { 'nginx':
    ensure => running,
    enable => true,
  }
}

node 'server2.testdomain' {
  # если мы хотим задать параметры класса, функция include не подойдёт* — нужно использовать resource-style declaration
  # *на самом деле подойдёт, но про это расскажу в следующей серии. Ключевое слово "Hiera".
  class { 'nginx_example':
    conf_source => 'puppet:///modules/example/nginx-conf',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

KwiPuppet, iinguqu zichwetheziwe. Yitya iintlobo ezininzi zedatha. Iintlobo zedatha ziqhele ukusetyenziswa ukuqinisekisa amaxabiso eparameter agqithiselwe kwiiklasi kunye neenkcazo. Ukuba iparameter egqithisiweyo ayihambelani nohlobo oluchaziweyo, impazamo yoqulunqo iyakwenzeka.

Uhlobo lubhalwe kwangoko phambi kwegama lepharamitha:

class example (
  String $param1,
  Integer $param2,
  Array $param3,
  Hash $param4,
  Hash[String, String] $param5,
) {
  ...
}

Iiklasi: zibandakanya igama leklasi vs iklasi{'classname':}

Iklasi nganye ngumthombo wohlobo eklasini. Njengalo naluphi na olunye uhlobo lobutyebi, akunakubakho iimeko ezimbini zodidi olufanayo kwindawo enye.

Ukuba uzama ukongeza iklasi kwindawo enye kabini usebenzisa class { 'classname':} (akukho mahluko, ngeeparamitha ezahlukeneyo okanye ezifanayo), kuya kubakho impazamo yoqulunqo. Kodwa ukuba usebenzisa iklasi kwisimbo somthombo, ungacwangcisa ngokukhawuleza zonke iiparameters zayo kwimanifest.

Nangona kunjalo, ukuba usebenzisa include, ngoko iklasi inokongezwa ngokuphindaphindiweyo njengoko ifunwa. Inyaniso kukuba include ngumsebenzi ongenamandla ojonga ukuba udidi longezwe kulawulo. Ukuba iklasi ayikho kuluhlu, iyongeza, kwaye ukuba sele ikhona, ayenzi nto. Kodwa xa usebenzisa include Awukwazi ukuseta iiparamitha zeklasi ngexesha lokubhengezwa kweklasi - zonke iiparamitha ezifunekayo kufuneka zisetwe kumthombo wedatha wangaphandle - i-Hiera okanye i-ENC. Siza kuthetha ngazo kwinqaku elilandelayo.

Iyachaza

Njengoko bekutshiwo kwibhloko yangaphambili, iklasi efanayo ayikwazi ukuba khona kwi-node ngaphezu kweyodwa. Nangona kunjalo, kwezinye iimeko kufuneka ukwazi ukusebenzisa ibhloko efanayo yekhowudi kunye neeparamitha ezahlukeneyo kwindawo enye. Ngamanye amazwi, kukho imfuneko yohlobo lobutyebi obalo.

Umzekelo, ukuze ufake imodyuli ye-PHP, senza oku kulandelayo kwi-Avito:

  1. Faka ipakethe ngale modyuli.
  2. Masenze ifayile yoqwalaselo yale modyuli.
  3. Senza i-symlink kuqwalaselo lwephp-fpm.
  4. Senza i-symlink kwi-config ye-php cli.

Kwiimeko ezinjalo, uyilo olunje chaza (chaza, uhlobo oluchaziweyo, uhlobo lomthombo oluchaziweyo). A I-Define iyafana nodidi, kodwa kukho iiyantlukwano: okokuqala, nganye i-Define luhlobo lovimba, hayi uvimba; okwesibini, inkcazo nganye ineparamitha efihlakeleyo $title, apho igama lovimba liya khona xa libhengezwa. Kanye njengokuba kwimeko yeeklasi, inkcazo kufuneka iqale ichazwe, emva koko ingasetyenziswa.

Umzekelo owenziwe lula onemodyuli ye-PHP:

define php74::module (
  $php_module_name = $title,
  $php_package_name = "php7.4-${title}",
  $version = 'installed',
  $priority = '20',
  $data = "extension=${title}.son",
  $php_module_path = '/etc/php/7.4/mods-available',
) {
  package { $php_package_name:
    ensure          => $version,
    install_options => ['-o', 'DPkg::NoTriggers=true'],  # триггеры дебиановских php-пакетов сами создают симлинки и перезапускают сервис php-fpm - нам это не нужно, так как и симлинками, и сервисом мы управляем с помощью Puppet
  }
  -> file { "${php_module_path}/${php_module_name}.ini":
    ensure  => $ensure,
    content => $data,
  }
  file { "/etc/php/7.4/cli/conf.d/${priority}-${php_module_name}.ini":
    ensure  => link,
    target  => "${php_module_path}/${php_module_name}.ini",
  }
  file { "/etc/php/7.4/fpm/conf.d/${priority}-${php_module_name}.ini":
    ensure  => link,
    target  => "${php_module_path}/${php_module_name}.ini",
  }
}

node server3.testdomain {
  php74::module { 'sqlite3': }
  php74::module { 'amqp': php_package_name => 'php-amqp' }
  php74::module { 'msgpack': priority => '10' }
}

Eyona ndlela ilula yokubamba impazamo yesibhengezo esiPhindwayo iku-Define. Oku kwenzeka ukuba inkcazo inomthombo onegama elihlala njalo, kwaye kukho imizekelo emibini okanye ngaphezulu yale nkcazo kwenye indawo.

Kulula ukuzikhusela kule nto: zonke izixhobo ezingaphakathi kwinkcazo kufuneka zibe negama elixhomekeke kuyo $title. Enye indlela yokudibanisa idempotent yezibonelelo kwimeko elula, kwanele ukuhambisa izibonelelo eziqhelekileyo kuzo zonke iimeko zenkcazo kwiklasi eyahlukileyo kwaye ibandakanye le klasi kwinkcazo - umsebenzi; include ukungabi namandla.

Kukho ezinye iindlela zokufikelela kwi-idempotency xa ukongeza izibonelelo, oko kukuthi ukusebenzisa imisebenzi defined и ensure_resources, kodwa ndiza kukuxelela ngayo kwisiqendu esilandelayo.

Ukuxhomekeka kunye nezaziso zeeklasi kunye neenkcazo

Iiklasi kunye neenkcazo zongeza le migaqo ilandelayo ekuphatheni ukuxhomekeka kunye nezaziso:

  • ukuxhomekeka kwiklasi/kuchaza yongeza ukuxhomekeka kuzo zonke izixhobo zodidi/zichaza;
  • iklasi/define ukuxhomekeka wongeza ukuxhomekeka kulo lonke iklasi/chaza izibonelelo;
  • iklasi/define isaziso sazisa bonke oovimba beklasi/define;
  • iklasi / chaza umrhumo urhuma kuzo zonke izixhobo zeklasi / chaza.

Iingxelo ezinemiqathango kunye nabakhethi

Amaxwebhu apha.

if

Ilula apha:

if ВЫРАЖЕНИЕ1 {
  ...
} elsif ВЫРАЖЕНИЕ2 {
  ...
} else {
  ...
}

ngaphandle

Ngaphandle kokuba i i-if in umva: ibhloko yekhowudi iyakwenziwa ukuba intetho ayiyonyani.

unless ВЫРАЖЕНИЕ {
  ...
}

icala

Akhonto inzima nalapha. Ungasebenzisa amaxabiso aqhelekileyo (imitya, amanani, njl.njl.), intetho eqhelekileyo, kunye neentlobo zedatha njengamaxabiso.

case ВЫРАЖЕНИЕ {
  ЗНАЧЕНИЕ1: { ... }
  ЗНАЧЕНИЕ2, ЗНАЧЕНИЕ3: { ... }
  default: { ... }
}

Abakhethi

Umkhethi lulwakhiwo lolwimi olufana ne case, kodwa endaweni yokwenza ibhloko yekhowudi, ibuyisela ixabiso.

$var = $othervar ? { 'val1' => 1, 'val2' => 2, default => 3 }

I modyuli

Xa uqwalaselo luncinci, lunokugcinwa ngokulula kwimanifest enye. Kodwa okukhona sichaza uqwalaselo, kokukhona kukho iiklasi ezininzi kunye neendawo zokuhlala kwi-manifest, iyakhula, kwaye kuba nzima ukusebenza nayo.

Ukongeza, kukho ingxaki yokusetyenziswa kwakhona kwekhowudi - xa yonke ikhowudi ikwi-manifest enye, kunzima ukwabelana nabanye ngale khowudi. Ukusombulula ezi ngxaki zimbini, uPuppet unequmrhu elibizwa ngokuba ziimodyuli.

I modyuli - ezi ziiseti zeeklasi, iinkcazo kunye namanye amaqumrhu ePuppet abekwe kulawulo olwahlukileyo. Ngamanye amazwi, imodyuli liqhekeza elizimeleyo lePuppet logic. Ngokomzekelo, kunokubakho imodyuli yokusebenza nge-nginx, kwaye iya kuqulatha oko kwaye kuphela into efunekayo ukuze usebenze nge-nginx, okanye kunokubakho imodyuli yokusebenza nge-PHP, njalo njalo.

Iimodyuli ziguqulelwe, kwaye ukuxhomekeka kweemodyuli kwenye kwenye nazo ziyaxhaswa. Kukho indawo yokugcina evulekileyo yeemodyuli - Upopathi Forge.

Kumncedisi woonopopi, iimodyuli zibekwe kwiimodyuli ezisezantsi zolawulo lweengcambu. Ngaphakathi kwimodyuli nganye kukho isikimu solawulo oluqhelekileyo - zibonakalisa, iifayile, itemplates, lib, njalo njalo.

Ubume befayile kwimodyuli

Ingcambu yomnqongo inokuqulatha abalawuli balandelayo abanamagama achazayo:

  • manifests - iqulethe i-manifestos
  • files -iqulethe iifayile
  • templates -iqulethe itemplates
  • lib - iqulethe ikhowudi yeRuby

Olu ayiloluhlu olupheleleyo lwabalawuli kunye neefayile, kodwa kwanele kweli nqaku okwangoku.

Amagama ezibonelelo kunye namagama eefayile kwimodyuli

Amaxwebhu apha.

Izibonelelo (iiklasi, iinkcazelo) kwimodyuli azinakubizwa nokuba yintoni na oyithandayo. Ukongeza, kukho imbalelwano ethe ngqo phakathi kwegama lovimba kunye negama lefayile apho iPuppet iya kukhangela inkcazo yeso sixhobo. Ukuba waphula imithetho yokubiza amagama, ke iPuppet ayizukuyifumana inkcazo yesixhobo, kwaye uya kufumana impazamo yokudibanisa.

Imigaqo ilula:

  • Zonke izibonelelo kwimodyuli kufuneka zibe kwisithuba samagama semodyuli. Ukuba imodyuli ibizwa foo, ke zonke izixhobo ezikuyo kufuneka zithiywe foo::<anything>, okanye nje foo.
  • Umthombo onegama lemodyuli kufuneka ube kwifayile init.pp.
  • Kwezinye izibonelelo, inkqubo yokubiza amagama ngolu hlobo lulandelayo:
    • isimaphambili esinegama lemodyuli siyalahlwa
    • zonke iikholoni eziphindwe kabini, ukuba zikhona, zitshintshwa ngezisilayi
    • ulwandiso longeziwe .pp

Ndiza kubonisa ngomzekelo. Masithi ndibhala imodyuli nginx. Iqulethe ezi zixhobo zilandelayo:

  • класс nginx ichazwe kumboniso init.pp;
  • класс nginx::service ichazwe kumboniso service.pp;
  • chaza nginx::server ichazwe kumboniso server.pp;
  • chaza nginx::server::location ichazwe kumboniso server/location.pp.

Iipateni

Ngokuqinisekileyo wena uyazi ukuba zeziphi iitemplates; Kodwa ndiza kuyishiya xa kunokwenzeka ikhonkco kwiWikipedia.

Indlela yokusebenzisa iitemplates: Intsingiselo yetemplate inokwandiswa kusetyenziswa umsebenzi template, egqithiselwe indlela eya kwi template. Kwizibonelelo ezifana ifayili isetyenziswe kunye neparameter content. Umzekelo, njengale:

file { '/tmp/example': content => template('modulename/templatename.erb')

Jonga indlela <modulename>/<filename> ithetha ifayile <rootdir>/modules/<modulename>/templates/<filename>.

Ukongeza, kukho umsebenzi inline_template — ifumana umbhalo wetemplate njengegalelo, hayi igama lefayile.

Ngaphakathi kweetemplates, ungasebenzisa zonke iiguquguquko zePuppet kumda wangoku.

Ipopi ixhasa iitemplates kwi-ERB kunye nefomathi ye-EPP:

Ngokufutshane malunga ne-ERB

Izakhiwo zokulawula:

  • <%= ВЫРАЖЕНИЕ %> — faka ixabiso lentetho
  • <% ВЫРАЖЕНИЕ %> — bala ixabiso lentetho (ngaphandle kokuyifaka). Iingxelo ezinemiqathango (ukuba) kunye neelophu (nganye) zihlala zihamba apha.
  • <%# КОММЕНТАРИЙ %>

Amabinzana akwi-ERB abhalwe ngeRuby (ERB eneneni i-Embedded Ruby).

Ukufikelela kwizinto eziguquguqukayo kwi-manifest, kufuneka udibanise @ kwigama eliguquguqukayo. Ukususa ikhefu lomgca elivela emva kolwakhiwo lolawulo, kufuneka usebenzise ithegi yokuvala -%>.

Umzekelo wokusebenzisa ithempleyithi

Masithi ndibhala imodyuli yokulawula iZooKeeper. Iklasi enoxanduva lokwenza uqwalaselo lujongeka ngolu hlobo:

class zookeeper::configure (
  Array[String] $nodes,
  Integer $port_client,
  Integer $port_quorum,
  Integer $port_leader,
  Hash[String, Any] $properties,
  String $datadir,
) {
  file { '/etc/zookeeper/conf/zoo.cfg':
    ensure  => present,
    content => template('zookeeper/zoo.cfg.erb'),
  }
}

Kwaye itemplate ehambelanayo zoo.cfg.erb -Ngoko:

<% if @nodes.length > 0 -%>
<% @nodes.each do |node, id| -%>
server.<%= id %>=<%= node %>:<%= @port_leader %>:<%= @port_quorum %>;<%= @port_client %>
<% end -%>
<% end -%>

dataDir=<%= @datadir %>

<% @properties.each do |k, v| -%>
<%= k %>=<%= v %>
<% end -%>

Iinyaniso kunye neenguqu ezakhelwe ngaphakathi

Rhoqo inxalenye ethile yoqwalaselo ixhomekeke kwinto eyenzekayo ngoku kwindawo. Ngokomzekelo, kuxhomekeke ekubeni yintoni ukukhululwa kweDebian, kufuneka ufake enye okanye enye inguqulelo yephakheji. Uyakwazi ukubeka esweni konke oku ngesandla, ukubhala kwakhona kubonakalisa ukuba iindawo ziyatshintsha. Kodwa oku akuyondlela enzulu;

Ukufumana ulwazi malunga neendawo zokuhlala, uPuppet unendlela ebizwa ngokuba ziinyani. Iinyani - olu lwazi malunga ne-node, ekhoyo kwi-manifest ngendlela yeenguqu eziqhelekileyo kwindawo yamagama yehlabathi. Ngokomzekelo, igama lomninimzi, inguqulelo yenkqubo yokusebenza, ulwakhiwo lweprosesa, uluhlu lwabasebenzisi, uluhlu lonxibelelwano lwenethiwekhi kunye needilesi zabo, kunye nokunye okuninzi. Iinyani ziyafumaneka kwii-manifest kunye neetemplates njengezinto eziguquguqukayo eziqhelekileyo.

Umzekelo wokusebenza kunye neenyani:

notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# ресурс типа notify просто выводит сообщение в лог

Ukuthetha ngokusesikweni, inyani inegama (umtya) kunye nexabiso (iintlobo ezahlukeneyo ziyafumaneka: imitya, uluhlu, izichazi-magama). Yitya iseti yeenyaniso ezakhelwe ngaphakathi. Unako nokubhala eyakho. Abaqokeleli benyaniso bayachazwa njengemisebenzi kwiRuby, okanye njani iifayile eziphunyeziweyo. Iinyani zinokuchazwa ngendlela iifayile zombhalo ezinedatha kwiindawo zokuhlala.

Ngexesha lokusebenza, iarhente yoonopopi ikhuphela kuqala bonke abaqokeleli benyani abakhoyo ukusuka kwi-pappetserver ukuya kwindawo, emva koko ibavule kwaye ithumele iinyani eziqokelelweyo kumncedisi; Emva koku, umncedisi uqala ukuqulunqa ikhathalogu.

Iinyani ngohlobo lweefayile eziphunyezwayo

Ezo nyaniso zibekwe kwiimodyuli kuluhlu facts.d. Ngokuqinisekileyo, iifayile kufuneka ziphunyezwe. Xa ziqhutywa, kufuneka zikhuphe ulwazi kwimveliso eqhelekileyo nokuba yi-YAML okanye isitshixo=ifomathi yexabiso.

Ungalibali ukuba iinyani zisebenza kuzo zonke iindawo ezilawulwa ngumncedisi wepoppet apho imodyuli yakho ibekwe khona. Ke ngoko, kwiskripthi, jonga ukuba inkqubo inazo zonke iinkqubo kunye neefayile eziyimfuneko ukuze inyani yakho isebenze.

#!/bin/sh
echo "testfact=success"
#!/bin/sh
echo '{"testyamlfact":"success"}'

Iinyani zeRuby

Ezo nyaniso zibekwe kwiimodyuli kuluhlu lib/facter.

# всё начинается с вызова функции Facter.add с именем факта и блоком кода
Facter.add('ladvd') do
# в блоках confine описываются условия применимости факта — код внутри блока должен вернуть true, иначе значение факта не вычисляется и не возвращается
  confine do
    Facter::Core::Execution.which('ladvdc') # проверим, что в PATH есть такой исполняемый файл
  end
  confine do
    File.socket?('/var/run/ladvd.sock') # проверим, что есть такой UNIX-domain socket
  end
# в блоке setcode происходит собственно вычисление значения факта
  setcode do
    hash = {}
    if (out = Facter::Core::Execution.execute('ladvdc -b'))
      out.split.each do |l|
        line = l.split('=')
        next if line.length != 2
        name, value = line
        hash[name.strip.downcase.tr(' ', '_')] = value.strip.chomp(''').reverse.chomp(''').reverse
      end
    end
    hash  # значение последнего выражения в блоке setcode является значением факта
  end
end

Iinyaniso zesicatshulwa

Ezo nyaniso zibekwe kwiindawo ezikuluhlu /etc/facter/facts.d kwiPuppet endala okanye /etc/puppetlabs/facts.d kwiPhepha elitsha.

examplefact=examplevalue
---
examplefact2: examplevalue2
anotherfact: anothervalue

Ukufikelela kwiiNyaniso

Kukho iindlela ezimbini zokufikelela kwiinyani:

  • ngesichazi-magama $facts: $facts['fqdn'];
  • usebenzisa igama lokwenyani njengegama eliguquguqukayo: $fqdn.

Kungcono ukusebenzisa isichazi-magama $facts, okanye ngcono, bonisa indawo yamagama yehlabathi ($::facts).

Nali icandelo elifanelekileyo lamaxwebhu.

Iiguquguquko ezakhelwe ngaphakathi

Ngaphandle kwezibakala, kukwakho ezinye iinguqu, ekhoyo kwindawo yamagama yehlabathi.

  • izibakala ezithembekileyo — izinto eziguquguqukayo ezithatyathwe kwisatifikethi somthengi (ekubeni isatifikethi siqhele ukukhutshwa kwiseva yepoppet, iarhente ayinakusuka nje ithathe kwaye itshintshe isatifikethi sayo, ngoko ke iinguqu “ziyathenjwa”): igama lesatifikethi, igama lesiqinisekiso. umamkeli kunye nesizinda, izandiso ezivela kwisatifikethi.
  • iinyani zomncedisi -izinto eziguquguqukayo ezinxulumene nolwazi malunga nomncedisi-uguqulelo, igama, idilesi ye-IP yomncedisi, indawo.
  • iinyani zearhente — izinto eziguquguqukayo ezidityaniswe ngokuthe ngqo ngunopopi-arhente, hayi ngegama lesiqinisekiso — igama lesatifikethi, inguqulelo yomenzeli, uhlobo loonopopi.
  • iinguqu ezinkulu - Iinguqu zePappetmaster (sic!). Imalunga nokufana ne-in iinyani zomncedisi, kunye namaxabiso eparameter yoqwalaselo ayafumaneka.
  • iinguqu zomqokeleli - iinguqu ze-compiler ezihluke kwi-scope nganye: igama lemodyuli yangoku kunye negama lemodyuli apho into yangoku ifunyenwe khona. Zingasetyenziswa, umzekelo, ukujonga ukuba iiklasi zakho zabucala azisetyenziswa ngokuthe ngqo kwezinye iimodyuli.

Ukongeza 1: uqhuba njani kwaye ulungise yonke le nto?

Eli nqaku liqulethe imizekelo emininzi yekhowudi yoonopopi, kodwa alizange lisixelele konke konke ukuba iqhutywe njani le khowudi. Ewe, ndiyazilungisa.

I-arhente yanele ukuqhuba iPuppet, kodwa kwiimeko ezininzi uya kufuna nomncedisi.

Ummeli

Ubuncinane ukususela kwinguqulo 5, iipakethi ze-agent-puppet ukusuka Uvimba osemthethweni wePuppetlabs ziqulethe zonke izinto ezixhomekeke (i-ruby kunye neegugu ezihambelanayo), ngoko akukho bunzima bofakelo (ndithetha ngonikezelo olusekwe kwi-Debian-asisebenzisi i-RPM-based distributions).

Kweyona meko ilula, ukusebenzisa uqwalaselo loonopopi, kwanele ukuba uqalise iarhente kwimowudi yomncedisi: ngaphandle kokuba ikhowudi yoonopopi ikhutshelwe kwindawo, qalisa. puppet apply <путь к манифесту>:

atikhonov@atikhonov ~/puppet-test $ cat helloworld.pp 
node default {
    notify { 'Hello world!': }
}
atikhonov@atikhonov ~/puppet-test $ puppet apply helloworld.pp 
Notice: Compiled catalog for atikhonov.localdomain in environment production in 0.01 seconds
Notice: Hello world!
Notice: /Stage[main]/Main/Node[default]/Notify[Hello world!]/message: defined 'message' as 'Hello world!'
Notice: Applied catalog in 0.01 seconds

Kungcono, ewe, ukuseta iseva kwaye uqhube iiarhente kwiindawo kwimowudi yedaemon - emva koko kanye ngesiqingatha seyure baya kusebenzisa uqwalaselo olukhutshelweyo kwiseva.

Uyakwazi ukuxelisa imodeli yokutyhala yomsebenzi - yiya kwi-node onomdla kuyo kwaye uqale sudo puppet agent -t. Isitshixo -t (--test) eneneni iquka iinketho ezininzi ezinokuvulwa ngabanye. Olu khetho lubandakanya oku kulandelayo:

  • ungabaleki kwimo yedaemon (ngokungagqibekanga iarhente iqala kwimo yedaemon);
  • vala emva kokusebenzisa ikhathalogu (ngokungagqibekanga, i-arhente iya kuqhubeka nokusebenza kwaye isebenzise uqwalaselo kanye kwisiqingatha seyure yonke);
  • bhala ilog yomsebenzi eneenkcukacha;
  • bonisa utshintsho kwiifayile.

I-arhente inemo yokusebenza ngaphandle kweenguqu - ungayisebenzisa xa ungaqinisekanga ukuba ubhale ulungelelwaniso oluchanekileyo kwaye ufuna ukujonga ukuba yintoni kanye i-arhente eya kutshintsha ngexesha lokusebenza. Le ndlela yenziwe yi parameter --noop kumgca womyalelo: sudo puppet agent -t --noop.

Ukongeza, unokwenza i-log ye-debugging yomsebenzi - kuyo, i-puppet ibhala malunga nazo zonke izenzo ezizenzayo: malunga nesibonelelo esisebenza ngoku, malunga neeparitha zalo mthombo, malunga neziphi iinkqubo eziziqalisayo. Ngokuqinisekileyo le yiparameter --debug.

UmSebenzi

Andiyi kuqwalasela ukuseta okupheleleyo kwe-pappetserver kunye nokuthunyelwa kwekhowudi kuyo kweli nqaku; iindawo zokuhlala (zithi, ukuya kuthi ga kwikhulu). Inani elikhulu lee-nodes liya kufuna ukulungiswa - ngokungagqibekanga, i-puppetserver iqalisa abasebenzi abangaphezu kwe-4, ngenxa yokusebenza okukhulu kufuneka ukhulise inani labo kwaye ungalibali ukwandisa imida yememori, ngaphandle koko umncedisi uya kuqokelela inkunkuma ixesha elininzi.

Ukusasazwa kwekhowudi - ukuba uyifuna ngokukhawuleza kwaye kulula, jonga (ku-r10k)[https://github.com/puppetlabs/r10k], kufakelo oluncinane kufuneka lwanele.

IsiHlomelo 2: Izikhokelo zokuKhowuda

  1. Beka yonke ingqiqo kwiiklasi kunye neenkcazo.
  2. Gcina iiklasi kunye neenkcazo kwiimodyuli, kungekhona kwiimpawu ezichaza iinodi.
  3. Sebenzisa izibakala.
  4. Musa ukwenza ifs ngokusekelwe kumagama abamkeli.
  5. Zive ukhululekile ukongeza iiparamitha zeeklasi kunye neenkcazo-oku kungcono kunengqiqo efihlakeleyo efihliweyo kumzimba weklasi / chaza.

Ndiza kuchaza ukuba kutheni ndincoma ukwenza oku kwinqaku elilandelayo.

isiphelo

Masigqibezele ngentshayelelo. Kwinqaku elilandelayo ndiza kukuxelela ngeHiera, ENC kunye nePuppetDB.

Ngabasebenzisi ababhalisiweyo kuphela abanokuthatha inxaxheba kuphando. Ngena, ndiyacela.

Ngapha koko, kukho izinto ezininzi ngakumbi - ndingabhala amanqaku kwezi zihloko zilandelayo, ivoti kwinto onomdla wokufunda ngayo:

  • 59,1%Ubume boonopopi abakwizinga eliphezulu: i-loops, imephu kunye nezinye iintetho ze-lambda, abaqokeleli bezixhobo, izixhobo ezithunyelwa kwamanye amazwe kunye nonxibelelwano phakathi kwamanginginya ngePuppet, iithegi, ababoneleli, iintlobo zedatha engabonakaliyo.13
  • 31,8%"Ndingumlawuli kamama" okanye indlela thina e-Avito esenza ngayo abahlobo kunye neeseva ezininzi zepoppet zeenguqulelo ezahlukeneyo, kwaye, ngokomgaqo, inxalenye malunga nokulawula i-poppet server.7
  • 81,8%Indlela esibhala ngayo ikhowudi ye-puppet: izixhobo, amaxwebhu, uvavanyo, i-CI / CD.18

Bangama-22 abasebenzisi abavotileyo. Abasebenzisi abali-9 abakhange.

umthombo: www.habr.com