Hordhaca Puppet

Puppet waa nidaamka maamulka qaabeynta. Waxa loo isticmaalaa in lagu keeno martigaliyayaasha gobolka la doonayo oo lagu ilaaliyo gobolkan.

Waxaan la shaqeynayay Puppet in ka badan shan sano hadda. Qoraalkani asal ahaan waa mid la turjumay oo dib loo habeeyey oo laga soo ururiyey qodobbada muhiimka ah ee dukumeentiga rasmiga ah, kaas oo u oggolaan doona bilowgayaasha inay si degdeg ah u fahmaan nuxurka Puppet.

Hordhaca Puppet

Macluumaadka aasaasiga ah

Nidaamka qalliinka ee Puppet waa macmiil-server, in kasta oo ay sidoo kale taageerto hawlgalla'aanta server-ka oo leh shaqeyn xaddidan.

Habka jiidashada ee hawlgalka ayaa la isticmaalaa: sida caadiga ah, hal mar nus saac, macaamiishu waxay la xiriiraan serverka si ay u habeeyaan oo ay adeegsadaan. Haddii aad la shaqeysay macquul, ka dibna waxay isticmaalaan nooc riixis oo kala duwan: maamuluhu wuxuu bilaabayaa habka loo isticmaalo qaabeynta, macaamiisha laftooda ma codsan doonaan wax.

Inta lagu jiro xiriirka shabakada, sirta TLS ee laba-geesoodka ah ayaa la isticmaalaa: server-ka iyo macmiilku waxay leeyihiin furayaal u gaar ah iyo shahaadooyin u dhigma. Caadi ahaan serverku wuxuu bixiyaa shahaadooyin macaamiisha, laakiin mabda'a ahaan waa suurtogal in la isticmaalo CA dibadda ah.

Horudhac ku saabsan muujinta

Eray-bixinta Puppet ku dir server-ka puppet isku xidhid noodhadhka (nodes). Habaynta qanjidhada ayaa qoran in manifestos oo ku qoran luqad barnaamij gaar ah - Puppet DSL.

Puppet DSL waa luqad cad. Waxay qeexaysaa xaaladda la doonayo ee qanjidhka qaab ku dhawaaqida agabka shakhsi ahaaneed, tusaale ahaan:

  • Faylku wuu jiraa wuxuuna leeyahay nuxur gaar ah.
  • Xidhmada waa la rakibay.
  • Adeeggu wuu bilaabmay

Kheyraadka waa la isku xiri karaa:

  • Waxaa jira ku-tiirsanaan, waxay saameeyaan habka loo isticmaalo kheyraadka.
    Tusaale ahaan, "marka hore rakib xirmada, ka dibna tafatir faylka qaabeynta, ka dibna bilow adeegga."
  • Waxaa jira ogeysiisyo - haddii kheyraadku isbeddelay, waxay u soo dirtaa ogaysiisyada agabyada la diiwaan geliyay.
    Tusaale ahaan, haddii faylka qaabeynta uu isbedelo, waxaad si toos ah u bilaabi kartaa adeegga.

Intaa waxaa dheer, Puppet DSL waxay leedahay hawlo iyo doorsoomayaal, iyo sidoo kale odhaaho shuruudaysan iyo xulashooyin. Habab kala duwan ayaa sidoo kale la taageeray - EPP iyo ERB.

Puppet waxay ku qoran tahay Ruby, sidaas darteed qaar badan oo ka mid ah dhismooyinka iyo ereyada ayaa laga soo qaatay halkaas. Ruby waxay kuu ogolaaneysaa inaad ballaariso Puppet - ku dar caqli-gal adag, noocyo cusub oo kheyraad ah, hawlo.

Inta uu Puppet shaqaynayo, muujinta noode kasta oo gaar ah oo serverka ah ayaa lagu ururiyay hage. Directory waa liiska agabka iyo xiriirkooda ka dib marka la xisaabiyo qiimaha shaqooyinka, doorsoomayaasha iyo ballaarinta odhaah shuruudaysan.

Syntax iyo codestyle

Waa kuwan qaybo ka mid ah dukumeentiga rasmiga ah ee kaa caawin doona inaad fahamto syntax-ka haddii tusaalayaasha la bixiyay aysan ku filnayn:

Waa kuwan tusaale sida uu muujintu u eg tahay:

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

Gelida iyo jebinta laynka maaha qayb loo baahan yahay oo ka mid ah muujinta, laakiin waxaa jira talo lagu taliyey hage style. Soo koobid:

  • Gelid laba-meel ah, tabs lama isticmaalo.
  • Laamaha qalloocan waxaa lagu kala saaraa meel bannaan, kolonyada meel bannaan ma kala soocaan.
  • Dhibcaha ka dambeeya halbeeg kasta, oo ay ku jiraan kan u dambeeya. Halbeeg kastaa wuxuu saaran yahay khad gooni ah. Ka reebid ayaa loo sameeyay kiiska iyada oo aan lahayn halbeegyo iyo halbeeg: waxaad ku qori kartaa hal sadar oo aan hakad lahayn (ie. resource { 'title': } и resource { 'title': param => value }).
  • Fallaadhaha ku yaal cabbirrada waa inay ahaadaan heer isku mid ah.
  • Fallaadhaha xidhiidhka kheyraadka ayaa hortooda ku qoran.

Goobta faylalka ee pappetserver

Faahfaahin dheeraad ah, waxaan soo bandhigi doonaa fikradda "tusaha xididka". Tusaha xididku waa hagaha ka kooban qaabaynta Puppet ee nood gaar ah.

Tusaha xididku wuu kala duwan yahay iyadoo ku xidhan nooca Puppet iyo deegaanka la isticmaalo. Deegaanku waa qaabayn madax banaan oo lagu kaydiyo hagayaal gaar ah. Caadi ahaan waxaa loo isticmaalaa in lagu daro git, taas oo jawiga laga abuuray laamaha git. Sidaas awgeed, noodh kastaa wuxuu ku yaalaa hal deegaan ama mid kale. Tan waxaa lagu habeyn karaa qanjirka laftiisa, ama ENC, oo aan kaga hadli doono maqaalka soo socda.

  • Nooca saddexaad ("Puppet jir") hagaha salku wuxuu ahaa /etc/puppet. Isticmaalka deegaanku waa ikhtiyaari - tusaale ahaan, kuma isticmaalno Puppet-kii hore. Haddii deegaan la isticmaalo, badanaa waa lagu kaydiyaa /etc/puppet/environments, Tusaha xididku wuxuu noqon doonaa hagaha deegaanka. Haddii aan deegaanka la isticmaalin, tusaha xididku wuxuu noqon doonaa hagaha saldhigga.
  • Laga bilaabo nuqulkii afraad ("cusub Puppet"), isticmaalka deegaanku wuxuu noqday mid khasab ah, tusaha saldhigana waxa loo raray /etc/puppetlabs/code. Sidaas awgeed, bay'ada ayaa lagu kaydiyaa /etc/puppetlabs/code/environments, Tusaha xididku waa hagaha deegaanka.

Waa inuu jiraa hage-hoosaad ku jira tusaha xididka manifests, kaas oo ka kooban hal ama in ka badan oo muujinaya qanjidhada. Intaa waxaa dheer, waa in uu jiraa hage-hoosaad modules, kaas oo ka kooban modules. Waxaan kuu sheegi doonaa waxa modules yihiin wax yar ka dib. Intaa waxaa dheer, Puppet hore wuxuu sidoo kale yeelan karaa hage-hoosaad files, kaas oo ka kooban faylal kala duwan oo aan ku koobiyayno noodhka. Gudaha Puppet-ka cusub, dhammaan faylasha waxa lagu meeleeyaa qaybo.

Faylasha muuqda waxay leeyihiin kordhinta .pp.

Dhowr tusaale oo dagaal ah

Sharaxaad ku saabsan noodhka iyo kheyraadka ku yaal

Dusha server1.testdomain waa in fayl la sameeyaa /etc/issue nuxur leh Debian GNU/Linux n l. Faylku waa inuu noqdaa mid ay leeyihiin isticmaale iyo koox root, xuquuqda gelitaanka waa in ay ahaataa 644.

Waxaan qornaa muujinta:

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 в начале будет воспринято как записанное в восьмеричной системе, и всё пойдёт не так, как задумано
    }
}

Cilaaqaadka ka dhexeeya kheyraadka ku yaal noode

Dusha server2.testdomain nginx waa inuu socdaa, isagoo la shaqaynaya qaabayn hore loo diyaariyey.

Aan kala furfurno dhibaatada:

  • Xirmada ayaa u baahan in la rakibo nginx.
  • Waa lagama maarmaan in faylasha qaabeynta laga soo guuriyo server-ka.
  • Adeeggu wuxuu u baahan yahay inuu socdo nginx.
  • Haddii qaabeynta la cusboonaysiiyo, adeegga waa in dib loo bilaabo.

Waxaan qornaa muujinta:

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 получает уведомление,
  # соответствующий сервис перезапускается.
}

Si ay tani u shaqeyso, waxaad u baahan tahay ku dhawaad ​​meesha faylka soo socda ee seerfarka puppet:

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

Noocyada Khayraadka

Liis dhamaystiran oo ah noocyada kheyraadka la taageeray ayaa laga heli karaa halkan dukumeentiyada, halkan waxaan ku tilmaami doonaa shan nooc oo aasaasi ah, kuwaas oo ku dhaqankayga ku filan xalinta dhibaatooyinka intooda badan.

file

Waxay maamushaa faylasha, hagayaasha, calaamadaha calaamadaha, waxa ku jira, iyo xuquuqaha gelitaanka

Qodobada:

  • magaca kheyraadka - Jidka faylka (ikhtiyaar)
  • wadada - jidka loo maro faylka (haddii aan lagu cayimin magaca)
  • loo hubiyo nooca faylka:
    • absent - tirtir faylka
    • present - waa inuu jiraa fayl nooc kasta ah (haddii uusan jirin fayl, fayl caadi ah ayaa la abuuri doonaa)
    • file - faylka caadiga ah
    • directory - hagaha
    • link - calaamad
  • content - waxyaabaha ku jira faylka (ku habboon kaliya faylasha caadiga ah, lama wada isticmaali karo Ilo ama bartilmaameed)
  • Ilo - isku xirka wadada aad rabto inaad nuqul ka sameyso waxa ku jira faylka (lama wada isticmaali karo content ama bartilmaameed). Waxaa lagu qeexi karaa sida URI midkood oo leh nidaam puppet: (kadib waxaa la isticmaali doonaa faylalka server-ka puppet), iyo nidaamka http: (Waxaan rajeynayaa inay caddahay waxa ku dhici doona kiiskan), iyo xitaa jaantuska file: ama sida waddo buuxda oo aan lahayn schema (kadib faylka FS deegaanka ee ku yaal noodhka ayaa la isticmaali doonaa)
  • bartilmaameed - Meesha ay tahay in calaamaddu tilmaamto (lama wada isticmaali karo content ama Ilo)
  • Mulkiilaha - isticmaalaha waa inuu lahaado faylka
  • group — kooxda uu faylku ka tirsan yahay
  • mode - ogolaanshaha faylka (sida xadhig ahaan)
  • dib u bixinta -Waxay suurta gelisaa habaynta hagaha soo noqnoqda
  • nadiifin - waxay awood u siinaysaa tirtiridda faylasha aan lagu sifeynin Puppet
  • ciidan - waxay suurtagelisaa in la tirtiro hagayaasha aan lagu sifeynin Puppet

xirmo

Rakiba oo ka saara baakadaha Awood u leh inuu xamili karo ogeysiisyada - dib u rakibida xirmada haddii cabbirka la cayimay reinstall_on_refresh.

Qodobada:

  • magaca kheyraadka - magaca xirmada (ikhtiyaar)
  • magaca - Magaca xirmada (haddii aan lagu cayimin magaca)
  • bixiyaha - maareeyaha xirmada si loo isticmaalo
  • loo hubiyo - xaaladda xirmada ee la rabo:
    • present, installed - nooc kasta oo la rakibay
    • latest - nooca ugu dambeeyay ee la rakibay
    • absent - la tirtiray (apt-get remove)
    • purged - la tirtiray oo ay la socdaan faylasha qaabeynta (apt-get purge)
    • held - nooca xirmada waa xiran yahay (apt-mark hold)
    • любая другая строка - nooca la cayimay ayaa lagu rakibay
  • reinstall_on_refresh - haddii true, ka dib markii la helo ogeysiiska xirmada dib ayaa loo rakibi doonaa. Faa'iido u leh qaybinta ku salaysan ilaha, halkaas oo dib u dhiska xirmooyinka laga yaabo inay lagama maarmaan noqoto marka la beddelo cabbirrada dhismaha. Asal ahaan false.

adeegga

Waxay maamushaa adeegyada Awood u leh inuu socodsiiyo ogeysiisyada - dib ayuu u bilaabayaa adeegga.

Qodobada:

  • magaca kheyraadka - adeegga la maareeyo (ikhtiyaar)
  • magaca - adeegga u baahan in la maareeyo (haddii aan lagu sheegin magaca)
  • loo hubiyo - xaaladda adeegga ee la rabo:
    • running - bilaabay
    • stopped - joogsaday
  • awood - waxay xakameysaa awoodda lagu bilaabayo adeegga:
    • true - autorun waa la dajiyay (systemctl enable)
    • mask - la qariyay (systemctl mask)
    • false - autorun waa naafo (systemctl disable)
  • qeybtii labaad - amar in dib loo bilaabo adeegga
  • xaaladda - amar si loo hubiyo heerka adeegga
  • dib u bilow - Tilmaan haddii qoraalka adeeggu uu taageerayo dib u bilaabashada. Hadii false iyo halbeegga la cayimay qeybtii labaad - qiimaha cabbirkan ayaa la isticmaalaa. Hadii false iyo parameter qeybtii labaad aan la cayimin - adeegga waa la joojiyay oo bilaabay inuu dib u bilaabo (laakin systemd wuxuu isticmaalaa amarka systemctl restart).
  • degdegsan - Tilmaan in qoraalka adeeggu uu taageerayo amarka status. Hadday false, ka dibna qiimaha parameterka ayaa la isticmaalaa xaaladda. Asal ahaan true.

Exec

Wuxuu wadaa amarada dibadda Haddii aadan cayimin xuduudaha abuuraa, kaliya haddii, haddii ama nasasho leh, amarku wuxuu socon doonaa mar kasta oo Puppet la ordo. Awood u leh inuu socodsiiyo ogeysiisyada - wuxuu wadaa amar.

Qodobada:

  • magaca kheyraadka - amarka in la fuliyo (ikhtiyaar)
  • amarka - amarka in la fuliyo (haddii aan lagu cayimin magaca)
  • wadada - wadooyinka lagu raadiyo faylka la fulin karo
  • kaliya haddii - Haddii amarka lagu sheegay halbeeggan lagu dhammaystiro koodka soo celinta eber, amarka ugu weyn waa la fulin doonaa
  • haddii - Haddii amarka lagu sheegay halbeeggaan lagu dhammaystiro koodka soo celinta aan eber ahayn, amarka ugu weyn waa la fulin doonaa
  • abuuraa - haddii feylka lagu sheegay halbeeggaan uusan jirin, amarka ugu weyn waa la fulin doonaa
  • nasasho leh - haddii true, ka dib amarka waxa la socodsiin doonaa oo kaliya marka hawlwadeenkan uu ka helo ogeysiis ilaha kale
  • cwd - tusaha laga maamulayo amarka
  • user - isticmaalaha cidda uu ka maamulayo amarka
  • bixiyaha - sida loo maamulo amarka:
    • posix - habka ilmaha si fudud ayaa loo abuuray, hubi inaad qeexdo wadada
    • qolof - amarka ayaa lagu bilaabay qolofka /bin/sh, lagama yaabo in la cayimo wadada, waxaad isticmaali kartaa globbing, tuubooyinka iyo qaababka kale ee qolofka. Caadi ahaan si toos ah ayaa loo ogaadaa haddii ay jiraan xarfo gaar ah (|, ;, &&, || iwm).

text

Waxay xakameysaa shaqo la'aanta.

Qodobada:

  • magaca kheyraadka - nooc ka mid ah aqoonsiga
  • loo hubiyo - gobolka Crown:
    • present - abuur haddii aanay jirin
    • absent - tirtir haddii ay jiraan
  • amarka - waa maxay amarka lagu ordo
  • deegaanka - deegaankee lagu maamulaa amarka (liiska doorsoomayaasha deegaanka iyo qiyamkooda iyada oo loo marayo =)
  • user - kaas oo isticmaala si uu u maamulo amarka
  • daqiiqo, saacad, toddobaadkii, bisha, bisha - marka la ordo cron. Haddii mid ka mid ah sifooyinkaas aan la cayimin, qiimaha uu ku leeyahay crontab wuxuu ahaan doonaa *.

Gudaha Puppet 6.0 text sida haddii laga saaray sanduuqa gudaha puppetserver, markaa ma jiraan wax dukumeenti ah oo ku yaal goobta guud. Laakiin isagu waxay ku jirtaa sanduuqa wakiilka puppet-ka, markaa looma baahna in si gooni ah loo rakibo. Waxaad u arki kartaa dukumentiyada ee dukumeentiga nooca shanaad ee Puppet, ama ku yaal GitHub.

Ku saabsan kheyraadka guud ahaan

Shuruudaha u gaarka ah kheyraadka

Khaladka ugu badan ee aan la kulano waa Ku dhawaaqida nuqul. Ciladani waxay dhacdaa marka laba ama in ka badan oo agab ah oo isku nooc ah oo isku magac ah ay ka soo muuqdaan hagaha.

Sidaa darteed, waxaan mar kale qori doonaa: calaamado isku mid ah waa inaysan ku jirin ilo isku nooc ah oo isku magac ah!

Mararka qaarkood waxaa loo baahan yahay in lagu rakibo baakado isku magac ah, laakiin leh maareeyayaal xirmo kala duwan. Xaaladdan oo kale, waxaad u baahan tahay inaad isticmaasho cabbirka namesi looga fogaado qaladka:

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

Noocyada kale ee kheyraadka waxay leeyihiin doorashooyin la mid ah si ay uga caawiyaan ka fogaanshaha nuqul ka mid ah - name у adeegga, command у Exec, iyo wixi la mida.

Metaparameters

Nooc kasta oo kheyraad ah wuxuu leeyahay qaybo gaar ah, iyadoon loo eegin dabeecaddiisa.

Liiska buuxa ee cabbiraadaha meta ee dukumeenti Puppet.

Liis gaaban:

  • u baahan - Halbeeggaan ayaa tilmaamaya agabka kheyraadkani ku tiirsan yahay.
  • ka hor - Halbeeggaan ayaa qeexaya kheyraadka ku xiran kheyraadkan.
  • subscribe - Halbeeggaan ayaa qeexaya agabka kheyraadkani ka helo ogeysiisyada.
  • ogeysiin - Halbeeggaan ayaa qeexaya agabka laga helo wargelinta kheyraadkan.

Dhammaan halbeeg-beegtiyeedka taxan waxay aqbalaan mid ka mid ah isku xirka kheyraadka ama isku xirayaasha kala duwan ee xirmooyinka labajibbaaran.

Xiriirinta ilaha

Xiriirinta kheyraadka waa si fudud xusid kheyraadka. Inta badan waxaa loo isticmaalaa in lagu muujiyo ku tiirsanaanta. Tixraaca kheyraadka aan jirin waxay keeni doontaa qalad la isku dubarid

Isku xirka isku xirka waa sida soo socota: Nooca kheyraadka oo leh xaraf weyn (haddii magaca nooca uu ka kooban yahay colons double, markaas qayb kasta oo ka mid ah magaca u dhexeeya xiidanka waa la weyneynayaa), ka dibna magaca kheyraadka ee brackets square (xaaladda magaca). waxba iskama beddelin!). Waa in aanay jirin meelo bannaan; xidhmooyinka labajibbaaran waxa la qoraa isla markiiba ka dib magaca nooca.

Tusaale:

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

Ku-tiirsanaanta iyo ogeysiisyada

Dukumeenti halkan.

Sidii hore loo sheegay, ku-tiirsanaanta fudud ee udhaxeysa agabku waa kala guur. Jid ahaan, ka taxaddar markaad ku darayso ku-tiirsanaanta - waxaad abuuri kartaa ku-tiirsanaanta wareegtada, taas oo keeni doonta qalad isku-ururin.

Si ka duwan ku-tiirsanaanta, ogeysiisyadu maaha kuwo ku-meel-gaar ah. Xeerarka soo socda ayaa khuseeya ogeysiisyada:

  • Haddii agabku helo ogeysiis, waa la cusboonaysiiyaa. Ficilada cusboonaysiinta waxay ku xiran yihiin nooca kheyraadka - Exec maamula amarka, adeegga dib u bilaabaya adeegii, xirmo dib u rakibida xirmada Haddii agabku aanu lahayn wax cusboonaysiin ah oo la qeexay, markaa waxba ma dhacaan.
  • Inta lagu jiro hal orod oo Puppet ah, kheyraadka lama cusboonaysiiyo wax ka badan hal mar. Tani waa suurtogal sababtoo ah ogeysiisyada waxaa ka mid ah ku-tiirsanaanta iyo garaafka ku-tiirsanaanta kuma jiraan wareegyo.
  • Haddii Puppet uu wax ka beddelo xaaladda kheyraadka, kheyraadku wuxuu soo diraa ogeysiisyo dhammaan agabyada la diiwaan geliyay.
  • Haddii kheyraadka la cusboonaysiiyo, waxay u soo dirtaa ogaysiisyada dhammaan agabka loo diiwaan geliyay.

Xakamaynta xuduudaha aan la cayimin

Sida caadiga ah, haddii qaar ka mid ah xudduudaha kheyraadku aysan lahayn qiimaha caadiga ah oo cabbirkan aan lagu cayimin muujinta, markaa Puppet uma beddeli doono hantidan kheyraadka u dhigma ee noodhka. Tusaale ahaan, haddii kheyraadka nooca file parameter aan la cayimin owner, markaas Puppet ma beddeli doono milkiilaha faylka u dhigma.

Hordhac fasallada, doorsoomayaasha iyo qeexitaannada

Ka soo qaad in aan haysano dhowr nood oo leh qayb isku mid ah qaabeynta, laakiin sidoo kale waxaa jira kala duwanaansho - haddii kale waxaan ku qeexi karnaa dhammaan hal block. node {}. Dabcan, waxaad si fudud u koobi kartaa qaybaha isku midka ah ee qaabeynta, laakiin guud ahaan tani waa xal xun - qaabeynta ayaa koraysa, iyo haddii aad bedesho qaybta guud ee qaabeynta, waxaad u baahan doontaa inaad wax ka beddesho wax isku mid ah meelo badan. Isla mar ahaantaana, way fududahay in qalad la sameeyo, iyo guud ahaan, mabda'a qallalan (ha ku celin naftaada) mabda'a ayaa loo abuuray sabab.

Si loo xaliyo dhibaatadan waxaa jira naqshad sida fasalka.

Fasallada

Класс waa block la magacaabay ee code poppet. Fasallada ayaa loo baahan yahay si dib loogu isticmaalo koodka.

Marka hore fasalka wuxuu u baahan yahay in la sharaxo. Sharaxaada lafteedu meelna kuma soo kordhinayso wax khayraad ah. Fasalka waxaa lagu sifeeyay muujinta:

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

Taas ka dib fasalka waxaa la isticmaali karaa:

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

Tusaale ka mid ah hawshii hore - aynu u dhaqaaqno rakibaadda iyo qaabaynta nginx fasalka:

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
}

Kala duwanaansho

Fasalka laga soo qaatay tusaalihii hore gabi ahaanba ma dabacsana sababtoo ah had iyo jeer waxay keentaa qaabeynta nginx isku mid ah. Aynu samayno dariiqa doorsoomiyaha qaabaynta, markaa fasalkan waxaa loo isticmaali karaa in lagu rakibo nginx qaab kasta.

Waa la samayn karaa iyadoo la isticmaalayo doorsoomayaal.

Fiiro gaar ah: doorsoomayaasha Puppet waa kuwo aan bedeli karin!

Intaa waxaa dheer, doorsoome waxaa la heli karaa oo kaliya ka dib marka lagu dhawaaqo, haddii kale qiimaha doorsoomuhu wuxuu noqon doonaa undef.

Tusaale la shaqaynta doorsoomayaasha:

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

Puppet ayaa leh meelaha magacyadadoorsoomayaasha, sidaas darteed, waxay leeyihiin aagga muuqaalkaDoorsoome isku magac leh waxa lagu qeexi karaa meelo magacyo kala duwan leh. Marka la xalinayo qiimaha doorsoomiyaha, doorsoomiyaha waxaa lagu raadiyaa goobta magaca hadda jirta,kadibna meesha ku lifaaqan,iyo wixii la mid ah.

Tusaalooyinka booska magaca:

  • caalami ah - doorsoomayaasha ka baxsan fasalka ama sharaxaad node halkaas tago;
  • meel magaca node ee sharaxaadda noodhka;
  • booska magaca fasalka ee sharaxaadda fasalka.

Si looga fogaado madmadowga marka la gelayo doorsoomayaasha, waxaad ku qeexi kartaa booska magaca doorsoomaha:

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

Aynu ku heshiino in dariiqa loo maro qaabeynta nginx ay ku jirto doorsoomaha $nginx_conf_source. Markaa fasalku wuxuu u ekaan doonaa sidan:

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
}

Si kastaba ha ahaatee, tusaalaha la soo qaatay waa mid xun sababtoo ah waxaa jira "aqoon sir ah" oo meel fasalka dhexdiisa ah doorsoome leh magac noocaas ah. Aad bay u saxan tahay in aqoontan laga dhigo mid guud - fasaladu waxay yeelan karaan cabbirro.

Halbeegyada fasalka waa doorsoomayaal ku jira magaca fasalka, waxa lagu qeexaa madaxa fasalka waxaana loo isticmaali karaa sida doorsoomayaasha caadiga ah ee fasalka dhexdiisa. Qiimayaasha halbeegyada waxaa lagu qeexaa marka la isticmaalayo fasalka ku jira muujinta.

Halbeegga waxaa lagu dejin karaa qiime aan caadi ahayn. Haddi halbeeggu aanu lahayn qiime caadi ah oo qiimihiisu aan la dejin marka la isticmaalo, waxa ay keenaysaa cilad ururin.

Aynu ka cabbirno fasalka tusaalaha sare oo aan ku darno laba cabbir: marka hore, loo baahan yahay, waa dariiqa qaabeynta, kan labaadna, ikhtiyaari, waa magaca xirmada ee nginx (Debian, tusaale ahaan, waxaa jira baakado 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',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

Gudaha Puppet, doorsoomayaasha waa lagu qoraa. Cun noocyo badan oo xog ah. Noocyada xogta waxaa sida caadiga ah loo isticmaalaa in lagu ansixiyo qiyamka halbeegyada loo gudbiyo fasallada iyo qeexitaannada. Haddii halbeegga la ansixiyay uusan ku habboonayn nooca la cayimay, waxaa dhici doona qalad isku-ururin.

Nooca waxa la qoraa isla markiiba ka hor magaca halbeegga:

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

Fasalada: waxaa ku jira classname vs class{'classname':}

Fasal kastaa waa kheyraad nooca fasalka. Sida nooc kasta oo kale oo kheyraad ah, ma jiri karaan laba xaaladood oo isku fasal ah oo isku mid ah.

Haddii aad isku daydo inaad ku darto fasal isku mid ah laba jeer adoo isticmaalaya class { 'classname':} (wax farqi ah ma jiro, oo leh qiyaaso kala duwan ama isku mid ah), waxaa jiri doona qalad isku dubarid ah. Laakiin haddii aad isticmaasho fasalka qaabka kheyraadka, waxaad isla markiiba si cad u dejin kartaa dhammaan xudduudaha muujinta.

Si kastaba ha ahaatee, haddii aad isticmaasho include, markaas fasalka waxaa lagu dari karaa inta jeer ee la doonayo. Xaqiiqdu waxay tahay include waa hawl awood leh oo hubisa in fasal lagu daray hagaha. Haddii fasalku aanu ku jirin buugga hagaha, wuu ku daraa, haddii uu hore u jirayna waxba ma qabto. Laakiin haddii la isticmaalo include Ma dejin kartid cabbirrada fasalka inta lagu jiro caddaynta fasalka - dhammaan cabbirrada loo baahan yahay waa in lagu dejiyaa isha xogta dibadda ah - Hiera ama ENC. Waxaan uga hadli doonaa iyaga maqaalka xiga.

Qeexayaa

Sida lagu sheegay balooggii hore, isla fasalka ma joogi karo meel wax ka badan hal mar. Si kastaba ha noqotee, xaaladaha qaarkood waxaad u baahan tahay inaad awood u yeelatid inaad isticmaasho isla block of code oo leh cabbirro kala duwan oo isku mid ah. Si kale haddii loo dhigo, waxaa jirta baahi loo qabo nooc kheyraad oo u gaar ah.

Tusaale ahaan, si loo rakibo moduleka PHP, waxaan ku sameyneynaa waxyaabaha soo socda ee Avito:

  1. Ku rakib xirmada cutubkan.
  2. Aan u abuurno faylka qaabeynta cutubkan.
  3. Waxaan u abuurnaa calaamad isku xidhka isku xidhka php-fpm.
  4. Waxaan u abuurnaa symlink si ay u config ee php cli.

Xaaladahan oo kale, naqshad sida qeexid (qeex, nooca qeexan, nooca kheyraadka la qeexay). Qeexi waxay la mid tahay fasalka, laakiin waxaa jira kala duwanaansho: marka hore, Qeexid kasta waa nooc kheyraad, ma aha kheyraad; Marka labaad, qeexid kastaa waxay leedahay cabbir aan toos ahayn $title, meesha magaca kheyraadku tago marka lagu dhawaaqo. Sida fasallada, qeexid waa in marka hore la qeexaa, ka dib waa la isticmaali karaa.

Tusaale la fududeeyay oo wata moduleka 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' }
}

Sida ugu fudud ee lagu qabto qaladka cadeynta nuqul ka mid ah waa in Qeexee. Tani waxay dhacdaa haddii qeexitaanku leeyahay kheyraad magac joogto ah leh, waxaana jira laba ama in ka badan oo qeexan oo ku saabsan noodhka qaarkood.

Way fududahay inaad naftaada ka ilaaliso tan: dhammaan agabyada ku jira qeexitaanka waa inay lahaadaan magac ku xiran $title. Beddelku waa isku-darka awoodda leh ee kheyraadka; xaaladda ugu fudud, waa ku filan tahay in loo wareejiyo kheyraadka guud dhammaan xaaladaha qeexida fasal gaar ah oo lagu daro fasalkan qeexitaanka - shaqada include awood leh.

Waxaa jira siyaabo kale oo lagu gaari karo idempotency marka lagu daro khayraadka, kuwaas oo isticmaalaya hawlaha defined и ensure_resources, laakiin waxaan kaaga sheegi doonaa qaybta xigta.

Ku-tiirsanaanta iyo ogeysiisyada fasallada iyo qeexitaannada

Fasallada iyo qeexitaannada waxay ku daraan xeerarka soo socda si loo maareeyo ku-tiirsanaanta iyo ogeysiisyada:

  • ku-tiirsanaanta fasalka/qeexidda waxay ku daraysaa ku-tiirsanaanta dhammaan agabka fasalka/qeexidda;
  • ku tiirsanaanta fasalka/qeexee waxay ku daraysaa ku tiirsanaanta dhammaan fasalka/qeexee agabka;
  • Ogeysiinta fasalka/qeexee waxay ogaysiisaa dhammaan agabka fasalka/qeexee;
  • fasalka/qeexee is-diiwaangelinta waxay u dhigantaa dhammaan agabka fasalka/qeexee.

Odhaaho shuruud ah iyo xushay

Dukumeenti halkan.

if

Way fududahay halkan:

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

haddii

haddii aysan ahayn haddii ay dib u noqoto: block of code waa la fulin doonaa haddii tibaaxuhu been yahay.

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

kiiska

Ma jiraan wax adag halkan sidoo kale. Waxaad isticmaali kartaa qiyamka caadiga ah (xadhkaha, tirooyinka, iwm.), tibaaxaha caadiga ah, iyo noocyada xogta sida qiyamka.

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

Xulayaal

Xulle waa luuqad la dhisay oo la mid ah case, laakiin halkii ay ka fulin lahayd block of code, waxay soo celisaa qiimaha.

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

Modules

Marka qaabayntu yar tahay, si fudud ayaa loogu hayn karaa hal caddayn. Laakiin qaabaynta badan ee aan ku sharaxno, fasalada iyo qanjidhada badan ee jira ayaa ku jira muujinta, way koraan, waxayna noqotaa mid aan habooneyn in la shaqeeyo.

Intaa waxaa dheer, waxaa jira dhibaatada dib-u-isticmaalka koodhka - marka dhammaan koodka uu ku jiro hal caddayn, way adagtahay in la wadaago code-kan dadka kale. Si loo xalliyo labadan mashaakil, Puppet waxay leedahay wax loo yaqaan modules.

Modules - kuwani waa fasallo, qeexitaanno iyo qaybaha kale ee Puppet oo lagu meeleeyay hage gaar ah. Si kale haddii loo dhigo, moduleku waa qayb madax-bannaan oo macquul ah oo Puppet ah. Tusaale ahaan, waxaa jiri kara moduleka la shaqeynta nginx, waxaana ku jiri doona waxa kaliya ee loo baahan yahay si loogu shaqeeyo nginx, ama waxaa jiri kara moduleka la shaqeynta PHP, iyo wixii la mid ah.

Modules waa la soo koobay, ku tiirsanaanta cutubyada midba midka kale ayaa sidoo kale la taageerayaa. Waxaa jira kayd furan oo modules ah - Fool-jileeca puppet.

On server-ka puppet, modules waxay ku yaalaan qaybta hoose ee hagaha xididka. Module kasta gudihiisa waxa ku jira hab habaysan oo haga-hage-tusaale ah, faylal, habyaallo, lib, iyo wixii la mid ah.

Qaab dhismeedka faylka ee moduleka

Xididka cutubka waxa ku jiri kara hagayaal soo socda oo wata magacyo qeexitaan:

  • manifests - waxa ku jira caddaymo
  • files - waxay ka kooban tahay faylal
  • templates - waxa ku jira habyaallo
  • lib - waxa ku jira koodka Ruby

Tani maaha liis dhamaystiran oo hagayaal iyo faylal ah, laakiin way ku filan tahay maqaalkan hadda.

Magacyada agabka iyo magacyada faylalka ku jira cutubka

Dukumeenti halkan.

Ilaha (fasalada, qeexitaannada) cutubka ku jira lama magacaabi karo waxaad jeceshahay. Intaa waxaa dheer, waxaa jira xiriir toos ah oo u dhexeeya magaca kheyraadka iyo magaca faylka kaas oo Puppet uu ku raadin doono sharaxaadda kheyraadkaas. Haddii aad jebiso xeerarka magacaabidda, markaas Puppet si fudud ma heli doono sharaxaadda kheyraadka, waxaadna heli doontaa qalad isku-ururin.

Xeerarku waa sahlan yihiin:

  • Dhammaan agabyada moduleka ku jira waa inay ku jiraan booska magaca moduleka. Haddii moduleka la yiraahdo foo, markaas dhammaan agabka ku jira waa in la magacaabo foo::<anything>, ama kaliya foo.
  • Ilaha leh magaca moduleka waa inuu ku jiraa faylka init.pp.
  • Ilaha kale, nidaamka magac-bixintu waa sida soo socota:
    • Horgalayaasha magaca moduleka waa la tuuray
    • Dhammaan xiidanka labanlaaban, haddii ay jiraan, waxaa lagu beddelaa dharbaaxo
    • kordhin ayaa lagu daray .pp

Waxaan ku muujin doonaa tusaale. Aynu nidhaahno waxaan qorayaa module nginx. Waxay ka kooban tahay agabyada soo socda:

  • fasalka nginx lagu tilmaamay muujinta init.pp;
  • fasalka nginx::service lagu tilmaamay muujinta service.pp;
  • qeexid nginx::server lagu tilmaamay muujinta server.pp;
  • qeexid nginx::server::location lagu tilmaamay muujinta server/location.pp.

Tilmaamo

Hubaal adiga laftaadu waad ogtahay waxa qaab-dhismeedka; Halkan kuma sifayn doono si faahfaahsan. Laakiin waan ka tagayaa haddii ay dhacdo isku xirka Wikipedia.

Sida loo isticmaalo templates: macnaha template waxa lagu kordhin karaa hawl template, kaas oo loo maro dariiqa loo maro qaabka. Wixii agab ah nooca file si wadajir ah loo isticmaalo iyada oo la barbar dhigo content. Tusaale ahaan, sida tan:

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

Dariiqa eeg <modulename>/<filename> waxay tilmaamaysaa faylka <rootdir>/modules/<modulename>/templates/<filename>.

Intaa waxaa dheer, waxaa jira shaqo inline_template - waxay helaysaa qoraalka template sida gelinta, ma aha magaca faylka.

Qaababka dhexdiisa, waxaad isticmaali kartaa dhammaan doorsoomayaasha Puppet ee baaxadda hadda jirta.

Puppet waxay taageertaa qaab-dhismeedka ERB iyo qaabka EPP:

Si kooban oo ku saabsan ERB

Hababka xakamaynta:

  • <%= ВЫРАЖЕНИЕ %> - geli qiimaha odhaahda
  • <% ВЫРАЖЕНИЕ %> - xisaabi qiimaha odhaahda (adigoon gelin). Odhaaho shuruud ah (haddii) iyo wareegyo (mid walba) badanaa halkan ayay tagaan.
  • <%# КОММЕНТАРИЙ %>

Odhaahyada ERB waxay ku qoran yihiin Ruby (ERB dhab ahaantii waa Ruby ku dhexjiraan).

Si aad u hesho doorsoomayaasha muujinta, waxaad u baahan tahay inaad ku darto @ ilaa magaca doorsooma. Si aad meesha uga saarto xariiqda jaban ee soo muuqda ka dib dhisidda xakamaynta, waxaad u baahan tahay inaad isticmaasho summada xidhitaanka -%>.

Tusaale ahaan isticmaalka template

Aynu nidhaahno waxaan qorayaa cutub si loo xakameeyo ZooKeeper. Fasalka mas'uulka ka ah abuurista isku xidhka wuxuu u eg yahay sidan:

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'),
  }
}

Iyo template u dhiganta zoo.cfg.erb - Markaa:

<% 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 -%>

Xaqiiqooyinka iyo Kala-duwanaanshaha la dhisay

Badanaa qaybta gaarka ah ee qaabeynta waxay kuxirantahay waxa hadda ka dhacaya noodhka. Tusaale ahaan, iyadoo ku xidhan waxa Debian sii dayntu tahay, waxaad u baahan tahay inaad ku rakibto mid ama nooc kale oo xirmada ah. Waxaas oo dhan waxaad ula socon kartaa gacanta, dib-u-qorista caddaymaha haddii noodhku isbedelaan. Laakiin tani maaha hab halis ah; automation ayaa aad uga wanaagsan.

Si loo helo macluumaadka ku saabsan noodhka, Puppet waxa uu leeyahay hab loo yaqaan xaqiiqooyinka. Xaqiiqooyinka - tani waa macluumaadka ku saabsan noodhka, oo lagu heli karo muujinta qaabka doorsoomayaasha caadiga ah ee magaca caalamiga ah. Tusaale ahaan, magaca martida loo yahay, nooca nidaamka hawlgalka, naqshadaha processor-ka, liiska isticmaaleyaasha, liiska isku-xidhka shabakadaha iyo ciwaanadooda, iyo wax badan oo badan. Xaqiiqooyinka waxaa lagu heli karaa muujinta iyo qaab-dhismeedka sida doorsoomayaasha caadiga ah.

Tusaale la shaqaynta xaqiiqooyinka:

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

Si rasmi ah u hadalka, xaqiiqadu waxay leedahay magac (xadhig) iyo qiimo (noocyo kala duwan ayaa jira: xargaha, arrays, qaamuusyada). Cun dhigay xaqiiqooyinka la dhisay. Waxaad sidoo kale qori kartaa adigu. Xog-ururinta ayaa lagu tilmaamay sida hawlaha Rubymidkoodna faylasha la fulin karo. Xaqiiqooyinka sidoo kale waxaa lagu soo bandhigi karaa foomka faylal qoraal ah oo xog leh on the noodes.

Inta lagu jiro hawlgalka, wakiilka puppet ayaa marka hore koobiyaya dhammaan xaqiiqooyinka la heli karo laga bilaabo pappetserver-ka ilaa noodda, ka dib marka uu soo saaro iyaga oo u soo diraya xaqiiqooyinka la ururiyey serverka; Taas ka dib, server-ku wuxuu bilaabaa ururinta buug-yaraha.

Xaqiiqooyinka qaabka faylasha la fulin karo

Xaqiiqooyinka noocaan ah waxaa lagu meeleeyaa cutubyo ku jira hagaha facts.d. Dabcan, faylasha waa inay noqdaan kuwo la fulin karo. Marka la ordo, waa in ay xogta u soo saaraan wax soo saarka caadiga ah ee YAML ama key=qaabka qiimaha midkood.

Ha iloobin in xaqiiqadu ay quseyso dhammaan qanjidhada uu maamulo server-ka poppet kaas oo cutubkaagu la geeyay. Sidaa darteed, qoraalka, taxaddar si aad u hubiso in nidaamku leeyahay dhammaan barnaamijyada iyo faylasha lagama maarmaanka u ah xaqiiqdaada inay shaqeyso.

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

Xaqiiqooyinka Ruby

Xaqiiqooyinka noocaan ah waxaa lagu meeleeyaa cutubyo ku jira hagaha 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

Xaqiiqooyinka qoraalka

Xaqiiqooyinka noocan oo kale ah waxaa lagu dhejiyaa qanjidhada tusaha /etc/facter/facts.d in jir puppet ama /etc/puppetlabs/facts.d ee Puppet cusub.

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

Helitaanka Xaqiiqooyinka

Waxaa jira laba siyaabood oo loo wajaho xaqiiqooyinka:

  • iyada oo loo marayo qaamuuska $facts: $facts['fqdn'];
  • adoo isticmaalaya magaca dhabta ah sida doorsoomiyaha magaca: $fqdn.

Way fiicantahay inaad isticmaasho qaamuus $facts, ama xitaa si ka sii fiican, tilmaan meelaynta magaca caalamiga ah ($::facts).

Waa kan qaybta ku habboon ee dukumeentiga.

Isbeddel-dhismay

Marka laga reebo xaqiiqda, waxaa sidoo kale jira doorsoomayaasha qaarkood, laga heli karo meel-magaceedka caalamiga ah.

  • xaqiiqooyin lagu kalsoon yahay - doorsoomayaasha laga soo qaatay shahaadada macmiilka (maadaama shahaadadu inta badan lagu bixiyo server-ka poppet, wakiilku kaliya ma qaadan karo oo ma beddeli karo shahaadadiisa, sidaa darteed doorsoomayaashu waa “la aaminay”): magaca shahaadada, magaca martigeliyaha iyo domain, kordhinta shahaadada.
  • xaqiiqooyinka serverka Kala duwanaanshiyaha la xiriira macluumaadka ku saabsan server-ka-nooca, magaca, serverka IP-ga, deegaanka.
  • xaqiiqooyinka wakiilka - doorsoomayaasha si toos ah ugu darey wakiilka puppet-ka, oo aan lagu qorin factor - magaca shahaadada, nooca wakiilka, nooca puppet.
  • doorsoomayaasha sare - Doorsoomayaasha Pappetmaster (sic!). Waxay la mid tahay sida gudaha xaqiiqooyinka serverka, oo lagu daray qiimaha halbeegga qaabeynta ayaa diyaar ah.
  • doorsoomayaasha compiler - doorsoomayaasha isku-darka ah ee ku kala duwan baaxad kasta: magaca moduleka hadda jira iyo magaca moduleka kaas oo shayga hadda la galay. Waxaa loo isticmaali karaa, tusaale ahaan, si loo hubiyo in fasaladaada gaarka ah aan si toos ah looga isticmaalin qaybaha kale.

Ku darida 1: sida loo ordo oo loo saxo waxaas oo dhan?

Maqaalku wuxuu ka kooban yahay tusaalooyin badan oo ah koodka puppet, laakiin gabi ahaanba nooma uu sheegin sida loo socodsiiyo koodkan. Hagaag, waan is saxayaa.

Wakiil ayaa ku filan inuu maamulo Puppet, laakiin kiisaska intooda badan waxaad sidoo kale u baahan doontaa server.

Wakiilka

Ugu yaraan ilaa nooca XNUMX, baakadaha wakiilka puppet-ka Kaydka rasmiga ah ee Puppetlabs waxay ka kooban yihiin dhammaan waxyaabaha ku tiirsanaanta (ruby iyo dhagaxyada u dhigma), markaa ma jiraan wax dhib ah rakibidda (waxaan ka hadlayaa qaybinta ku salaysan Debian-ma isticmaalno qaybinta ku salaysan RPM).

Xaaladda ugu fudud, si aad u isticmaasho qaabeynta puppet, waa ku filan in la bilaabo wakiilka qaabka server-la'aanta: waa haddii code puppet lagu koobiyeeyo noodhka, bilow 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

Way fiicantahay, dabcan, inaad dejiso server-ka oo aad ku socodsiiso wakiilada qanjidhada qaab dhismeedka daemon - ka dibna hal mar nus saacba waxay codsan doonaan qaabeynta laga soo dejiyo server-ka.

Waxaad ku dayan kartaa qaabka riixitaanka ee shaqada - u tag noodhka aad xiisaynayso oo bilow sudo puppet agent -t. Furaha -t (--test) dhab ahaantii waxa ku jira dhawr doorasho oo si gaar ah loo awoodsiin karo. Doorashooyinkan waxaa ka mid ah kuwan soo socda:

  • Ha ku socon qaabka daemon (sida caadiga ah wakiilku wuxuu ku bilaabmaa qaabka daemon);
  • xir ka dib markaad dalbato buug-yaraha (sida caadiga ah, wakiilku wuxuu sii wadi doonaa inuu shaqeeyo oo dabaqo qaabeynta hal mar nuskii saac);
  • qor qoraal shaqo oo faahfaahsan;
  • muujin isbedelada faylasha.

Wakiilku waxa uu leeyahay qaab hawleed iyada oo aan isbeddelin - waxaad isticmaali kartaa marka aanad hubin inaad qortay qaabaynta saxda ah oo aad rabto inaad hubiso waxa dhabta ah ee wakiilku isbeddelayo inta lagu jiro hawlgalka. Habkan waxaa karti u leh cabbirka --noop khadka taliska: sudo puppet agent -t --noop.

Intaa waxaa dheer, waxaad awood u yeelan kartaa log debugging ee shaqada - gudaha, puppet ayaa wax ka qoraya dhammaan ficillada ay qabato: ku saabsan kheyraadka ay hadda shaqeyneyso, oo ku saabsan xuduudaha kheyraadkan, ku saabsan barnaamijyada uu bilaabo. Dabcan tani waa halbeeg --debug.

Server

Ma tixgelin doono habaynta buuxda ee pappetserver-ka iyo geynta koodka qodobkan; Waxaan dhihi doonaa oo kaliya in sanduuqa dhexdiisa uu jiro nooc si buuxda u shaqeynaya oo server ah oo aan u baahnayn qaabeyn dheeri ah si uu ula shaqeeyo wax yar tirada noodhka (ku dheh, ilaa boqol). Tiro badan oo qanjidhada ah ayaa u baahan doona hagaajin - sida caadiga ah, puppetserver waxay soo saartaa wax aan ka badnayn afar shaqaale, waxqabadka weyn waxaad u baahan tahay inaad kordhiso tiradooda oo ha ilaawin inaad kordhiso xadka xusuusta, haddii kale server-ku wuxuu ururin doonaa qashinka inta badan.

Dejinta koodka - haddii aad si dhakhso ah oo fudud ugu baahan tahay, ka dibna fiiri (eeg r10k)https://github.com/puppetlabs/r10k], rakibaadda yaryar waa inay noqotaa mid ku filan.

Kordhinta 2: Tilmaamaha Codaynta

  1. Geli dhammaan caqli-galnimada fasallada iyo qeexitaannada.
  2. Ku hay fasalada iyo qeexitaannada cutubyada, ha ku jiraan bandhigyada qeexaya noodhka.
  3. Isticmaal xaqiiqooyinka.
  4. Ha samayn haddii ku saleysan magacyada martida loo yahay.
  5. Dareen xor u ah inaad ku darto cabbirrada fasallada iyo qeexitaannada - tani way ka fiican tahay caqli-gal aan toos ahayn oo ku qarsoon jidhka fasalka/qeexidda.

Waxaan ku sharixi doonaa sababta aan kugula talinayo inaad tan sameyso maqaalka soo socda.

gunaanad

Aan ku dhameeyo hordhaca. Maqaalka soo socda waxaan kaaga sheegi doonaa Hiera, ENC iyo PuppetDB.

Isticmaalayaasha diiwaangashan oo keliya ayaa ka qaybqaadan kara sahanka. Soo gal, soo dhawoow.

Dhab ahaantii, waxaa jira waxyaabo badan oo dheeraad ah - Waxaan qori karaa maqaallo ku saabsan mawduucyada soo socda, u codee waxaad xiisaynayso inaad wax ka akhrido:

  • 59,1%Dhisidda puppet sare-qaar heerka xiga: wareegyada, khariidadeynta iyo tibaaxaha lambda kale, kheyraadka aruuriya, kheyraadka la dhoofiyo iyo isgaarsiinta martigeliyaha iyada oo loo marayo Puppet, tags, bixiyayaasha, noocyada xogta aan la taaban karin.13
  • 31,8%"Anigu waxaan ahay maamulka hooyaday" ama sida aanu Avito saaxiibo ula samaynay dhowr adeegayaal poppet oo noocyo kala duwan ah, iyo, mabda'a, qaybta ku saabsan maamulida server-ka poppet.7
  • 81,8%Sida aan u qorno koodka puppet: qalabaynta, dukumentiyada, tijaabinta, CI/CD.18

22 isticmaale ayaa u codeeyay. 9 isticmaale ayaa ka aamusay.

Source: www.habr.com