Nhanganyaya kuPuppet

Puppet igadziriro yekugadzirisa hurongwa. Inoshandiswa kuunza mauto kunzvimbo inodiwa uye kuchengetedza iyi nyika.

Ndave ndichishanda naPuppet kweanopfuura makore mashanu zvino. Ichi chinyorwa chakanyanya kuturikirwa uye kurongeka patsva kuunganidzwa kwemapoinzi kubva kune zviri pamutemo zvinyorwa, izvo zvinobvumira vanotanga kuti vanzwisise nekukurumidza kukosha kwePuppet.

Nhanganyaya kuPuppet

Ruzivo rwekutanga

Puppet's operating system ndeyemutengi-server, kunyange inotsigirawo kushanda kusina basa nekushanda kushoma.

Iyo yekudhonza modhi yekushanda inoshandiswa: nekusarudzika, kamwe kamwe hafu yeawa, vatengi vanobata sevha kuti vagadzirise uye voishandisa. Kana iwe wakashanda neAnsible, saka vanoshandisa imwe yekusundidzira yakasiyana: maneja anotanga maitiro ekushandisa iyo gadziriso, vatengi pachavo havazoshandisi chero chinhu.

Panguva yekukurukurirana kwenetiweki, nzira mbiri dzeTLS encryption inoshandiswa: sevha uye mutengi vane makiyi avo ega uye zvitupa zvinoenderana. Kazhinji sevha inoburitsa zvitupa zvevatengi, asi musimboti zvinokwanisika kushandisa yekunze CA.

Nhanganyaya kune manifestos

MuPuppet terminology kune sevha yepuppet connect nodes (nodes). Kugadziriswa kwemanodhi kwakanyorwa mune manifestos mumutauro unokosha wepurogiramu - Puppet DSL.

Puppet DSL mutauro unozivisa. Inotsanangura mamiriro anodiwa eiyo node nenzira yekuzivisa kwezviwanikwa zvega, semuenzaniso:

  • Iyo faira iripo uye ine chaiyo yemukati.
  • Pasuru yacho yakaiswa.
  • Sevhisi yatanga.

Zvishandiso zvinogona kubatanidzwa:

  • Pane zvinotsamira, zvinokanganisa marongero anoshandiswa zviwanikwa.
    Semuenzaniso, "tanga waisa pasuru, wozogadzirisa faira rekugadzirisa, wobva watanga sevhisi."
  • Pane zviziviso - kana sosi yachinja, inotumira zviziviso kune zviwanikwa zvakanyoreswa kwairi.
    Semuenzaniso, kana iyo faira yekumisikidza ichichinja, unogona kutangazve sevhisi otomatiki.

Pamusoro pezvo, iyo Puppet DSL ine mabasa uye zvinochinjika, pamwe chete nemamiriro ezvinhu uye vanosarudza. Yakasiyana-siyana ma templating maitiro anotsigirwa zvakare - EPP uye ERB.

Puppet yakanyorwa muRuby, saka mazhinji ekuvaka uye mazwi anotorwa kubva ipapo. Ruby inobvumidza iwe kuwedzera Puppet - wedzera yakaoma logic, mhando nyowani dzezviwanikwa, mabasa.

Ipo Puppet ichimhanya, inoratidzira kune yega yega node pane server inounganidzwa kuita dhairekitori. dhairetori rondedzero yezviwanikwa uye hukama hwadzo mushure mekuverenga kukosha kwemabasa, kusiyanisa uye kuwedzera kwezvirevo zvemimiriro.

Syntax uye codestyle

Heano zvikamu zvezvinyorwa zvepamutemo zvinokubatsira kuti unzwisise syntax kana mienzaniso yakapihwa isina kukwana:

Heino muenzaniso wekuti manifest inotaridzika sei:

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

Indentation uye mitsara yekutyora haisi chikamu chinodiwa chemanifest, asi pane inokurudzirwa mutungamiriri gwara. Pfupiso:

  • Maviri-nzvimbo indents, ma tabo haashandiswe.
  • Curly braces inoparadzaniswa nenzvimbo; makoroni haana kuparadzaniswa nenzvimbo.
  • Makoma mushure meumwe neumwe parameter, kusanganisira yekupedzisira. Imwe neimwe parameter iri pamutsetse wakasiyana. Kusarudzika kunoitirwa iyo kesi isina parameter uye imwe parameter: unogona kunyora pamutsetse mumwe uye pasina koma (kureva. resource { 'title': } и resource { 'title': param => value }).
  • Miseve pazvigadziro inofanira kunge iri pamwero wakafanana.
  • Resource relationship miseve inonyorwa pamberi pavo.

Nzvimbo yemafaira pane pappetserver

Kuti uwane imwe tsananguro, ini ndichasuma iyo pfungwa ye "root directory". Iyo midzi dhairekitori ndiyo dhairekitori ine iyo Puppet kumisikidzwa kune yakatarwa node.

Iyo midzi dhairekitori inosiyana zvichienderana neshanduro yePuppet uye nharaunda dzakashandiswa. Nzvimbo dzakazvimiririra seti dzekugadzirisa dzinochengetwa mumadhairekitori akasiyana. Inowanzo shandiswa pamwe chete negit, mune iyo mamiriro ezvinhu anogadzirwa kubva kumatavi egit. Saizvozvowo, node imwe neimwe inowanikwa mune imwe nharaunda kana imwe. Izvi zvinogona kugadzirwa pane node pachayo, kana muECC, yandichataura nezvayo muchinyorwa chinotevera.

  • Mushanduro yechitatu ("old Puppet") iyo base dhairekitori yaive /etc/puppet. Iko kushandiswa kwenzvimbo kune sarudzo - semuenzaniso, isu hatizvishandise neiyo yekare Puppet. Kana nharaunda dzakashandiswa, dzinowanzochengetwa mukati /etc/puppet/environments, dhairekitori remidzi richava dhairekitori renzvimbo. Kana nharaunda dzikasashandiswa, dhairekitori remidzi richava iro base dhairekitori.
  • Kutanga kubva kuvhezheni yechina ("new Puppet"), kushandiswa kwenzvimbo kwakava kwekusungirwa, uye dhairekitori rekutanga rakaendeswa /etc/puppetlabs/code. Saizvozvo, nharaunda dzinochengeterwa mukati /etc/puppetlabs/code/environments, midzi dhairekitori inzvimbo dhairekitori.

Panofanira kunge paine subdirectory mumudzi wedhairekitori manifests, iyo ine chiratidziro chimwe kana kupfuura chinotsanangura node. Mukuwedzera, panofanira kuva ne-subdirectory modules, iyo ine ma modules. Ini ndichakuudza kuti mamodule ndeapi gare gare. Uye zvakare, iyo yekare Puppet inogona zvakare kuve ine subdirectory files, iyo ine mafaera akasiyana siyana atinoteedzera kumanodhi. MuPuppet nyowani, mafaera ese anoiswa mumamodule.

Manifest mafaira ane kuwedzera .pp.

Mienzaniso miviri yekurwa

Tsanangudzo yenode uye zviwanikwa pairi

Pane node server1.testdomain faira inofanira kugadzirwa /etc/issue nezvirimo Debian GNU/Linux n l. Iyo faira inofanirwa kuve yemushandisi uye neboka root, kodzero dzekuwana dzinofanira kuva 644.

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

Hukama pakati pezviwanikwa pane node

Pane node server2.testdomain nginx inofanira kunge ichimhanya, ichishanda neyakagadzirirwa gadziriro.

Rega kugadzirisa dambudziko:

  • Iyo package inoda kuiswa nginx.
  • Izvo zvinodikanwa kuti mafaera ekugadzirisa akodzwe kubva kune server.
  • Iyo sevhisi inofanirwa kunge ichishanda nginx.
  • Kana iyo gadziriso yakagadziridzwa, sevhisi inofanirwa kutangwazve.

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

Kuti izvi zvishande, unoda inenge inotevera faira nzvimbo pane 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

Resource Types

Rondedzero yakazara yemhando dzezvishandiso zvinotsigirwa inogona kuwanikwa pano muzvinyorwa, pano ini ndichatsanangura marudzi mashanu ekutanga, ayo mukuita kwangu akakwana kugadzirisa matambudziko akawanda.

faira

Inogadzirisa mafaera, madhairekitori, symlinks, zvirimo, uye kodzero dzekuwana.

Parameter:

  • zita resource - nzira yefaira (inosarudza)
  • Nzira - nzira yefaira (kana isina kutaurwa muzita)
  • nyatsoona - rudzi rwefaira:
    • absent - bvisa faira
    • present - panofanira kunge paine faira remhando ipi neipi (kana pasina faira, faira renguva dzose richagadzirwa)
    • file - faira yenguva dzose
    • directory -dhairekitori
    • link - symlink
  • gutsikana - faira zviri mukati (inokodzera chete mafaera enguva dzose, haigone kushandiswa pamwe chete mabviro kana chinangwa)
  • mabviro - chinongedzo kunzira yaunoda kukopa zviri mukati mefaira (haigone kushandiswa pamwe chete ne gutsikana kana chinangwa) Inogona kutsanangurwa seURI ine chirongwa puppet: (ipapo mafaera kubva kune puppet server achashandiswa), uye nechirongwa http: (Ndinovimba kuti zvakajeka zvichaitika munyaya iyi), uye kunyange nemufananidzo file: kana senzira yakakwana isina schema (ipapo iyo faira kubva kuFS yemuno pane node ichashandiswa)
  • chinangwa - uko symlink inofanirwa kunongedzera (haigone kushandiswa pamwe chete ne gutsikana kana mabviro)
  • muridzi - mushandisi anofanira kunge ari muridzi wefaira
  • boka - boka iro faira rinofanira kuva raro
  • rudzi - mvumo yefaira (setambo)
  • recurse - inogonesa recursive dhairekitori kugadzirisa
  • purge - inogonesa kudzima mafaera asina kutsanangurwa muPuppet
  • simba - inogonesa kudzima madhairekitori asina kutsanangurwa muPuppet

nhuri

Inoisa uye inobvisa mapakeji. Kugona kubata zviziviso - inodzosera pasuru kana parameter yatsanangurwa reinstall_on_refresh.

Parameter:

  • zita resource - zita repasuru (sarudzo)
  • zita - zita repasuru (kana risina kutaurwa muzita)
  • Provider -Package maneja wekushandisa
  • nyatsoona - yaidiwa mamiriro epakeji:
    • present, installed - chero shanduro yakaiswa
    • latest - yazvino vhezheni yakaiswa
    • absent - kubviswa (apt-get remove)
    • purged - yakabviswa pamwe chete nemafaira ekugadzirisa (apt-get purge)
    • held - package version yakavharwa (apt-mark hold)
    • любая другая строка - iyo yakataurwa vhezheni yakaiswa
  • reinstall_on_refresh - kana a true, ipapo kana yagamuchira chiziviso iyo package inozoiswazve. Inobatsira kugovera-kwakavakirwa kugovera, uko kuvakazve mapakeji kungave kuri madikanwa kana uchichinja kuvaka paramita. Default false.

sevhisi

Anotarisira masevhisi. Kugona kugadzirisa zviziviso - inotangazve sevhisi.

Parameter:

  • zita resource - sevhisi inotarisirwa (kusarudza)
  • zita - iyo sevhisi inoda kutungamirwa (kana isina kutaurwa muzita)
  • nyatsoona - mamiriro ebasa anodiwa:
    • running - yakatanga
    • stopped - akamira
  • kuti munhu agone ku - inodzora kugona kutanga sevhisi:
    • true - autorun inogoneswa (systemctl enable)
    • mask - disguised (systemctl mask)
    • false - autorun yakaremara (systemctl disable)
  • kutangazve - kuraira kuti utangezve sevhisi
  • chinzvimbo - raira kuti utarise mamiriro ebasa
  • hasrestart - ratidza kana iyo initscript yebasa inotsigira kutangazve. Kana false uye parameter inotsanangurwa kutangazve - kukosha kweiyi parameter inoshandiswa. Kana false uye parameter kutangazve isina kutaurwa - iyo sevhisi inomiswa uye yakatanga kutangazve (asi systemd inoshandisa murairo systemctl restart).
  • hasstatus - ratidza kana iyo initscript yebasa inotsigira murairo status. kana false, ipapo kukosha kweparameter kunoshandiswa chinzvimbo. Default true.

exec

Inomhanya mirairo yekunze. Kana iwe usingataure parameters inosika, onlyif, kunze kokuti kana refreshonly, murairo uchaitwa pese pese panoitwa Puppet. Inokwanisa kugadzirisa zviziviso - inoshandisa murairo.

Parameter:

  • zita resource - murairo kuti uitwe (optional)
  • murayiro - murairo unofanirwa kuurayiwa (kana usina kutaurwa muzita)
  • Nzira - nzira dzekutsvaga faira rinogoneka
  • onlyif - kana murairo wakataurwa mune iyi parameter wapera ne zero kodhi yekudzoka, murairo mukuru uchaitwa
  • kunze kokuti - kana murairo wakataurwa mune iyi parameter wapera nekodhi isiri zero yekudzoka, murairo mukuru uchaitwa
  • inosika - kana iyo faira inotsanangurwa mune iyi parameter isipo, murairo mukuru uchaitwa
  • refreshonly - kana a true, ipapo murairo unozoitwa chete kana uyu exec agamuchira chiziviso kubva kune zvimwe zviwanikwa
  • cwd - dhairekitori kubva kwaunomhanyisa rairo
  • mushandisi - mushandisi kubva kwaari kumhanyisa rairo
  • Provider - maitiro ekuita murairo:
    • posix - maitiro emwana anongogadzirwa, iva nechokwadi chekutsanangura Nzira
    • deko - murairo unotangwa mugoko /bin/sh, zvingasatsanangurwa Nzira, unogona kushandisa globbing, mapaipi uye mamwe magoko. Kazhinji zvinoonekwa otomatiki kana paine akakosha mavara (|, ;, &&, || zvichingoenda zvakadaro).

cron they

Inodzora cronjobs.

Parameter:

  • zita resource - imwe mhando yechiratidzo
  • nyatsoona - koronajob state:
    • present - gadzira kana isipo
    • absent - bvisa kana iripo
  • murayiro - murairo upi wekumhanya
  • mhepo mvura nenzvimbo -munzvimbo ipi yekumhanyisa kuraira (rondedzero yezvakatipoteredza zvinosiyana uye hunhu hwavo kuburikidza =)
  • mushandisi - kubva kune mushandisi wekumhanyisa rairo
  • Mineti, awa, zuva revhiki, mwedzi, mwedzi wemwedzi - nguva yekumhanya cron. Kana chimwe cheizvi hunhu chisina kutaurwa, kukosha kwayo mu crontab kuchave *.

MuPuppet 6.0 cron they sekunge kubviswa mubhokisi mupuppetserver, saka hapana magwaro pane yakajairika saiti. Asi iye ari mubhokisi mune puppet-agent, saka hapana chikonzero chekuiisa zvakasiyana. Iwe unogona kuona zvinyorwa zvayo mune zvinyorwa zvechishanu vhezheni yePuppet, kana paGitHub.

Nezve zviwanikwa mune zvese

Zvinodikanwa zvekusiyana kwezviwanikwa

Chikanganiso chakanyanya chatinosangana nacho ndeichi Duplicate declaration. Kukanganisa uku kunoitika kana zviwanikwa zviviri kana kupfuura zverudzi rumwechete zvine zita rimwechete zvichionekwa mudhairekitori.

Naizvozvo, ndichanyora zvakare: kuratidzira kweiyo node imwe chete haifanire kunge iine zviwanikwa zvemhando imwechete ine zita rimwechete!

Dzimwe nguva pane kudikanwa kwekuisa mapakeji ane zita rimwechete, asi aine akasiyana epakeji mamaneja. Muchiitiko chino, unofanira kushandisa parameter namekudzivirira kukanganisa:

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

Mamwe marudzi ezvishandiso ane sarudzo dzakafanana kubatsira kudzivirira kudzokorodza − name у sevhisi, command у exec, zvichingoenda zvakadaro.

Metaparameters

Mhando yega yega yekushandisa ine mamwe ma parameter akakosha, zvisinei nehunhu hwayo.

Runyorwa ruzere rwemeta paramita mune zvinyorwa zvePuppet.

Rondedzero pfupi:

  • inoda - iyi parameter inoratidza kuti ndezvipi zviwanikwa izvi zvinotsamira pazviri.
  • pamberi - Iyi parameter inotsanangura kuti ndezvipi zviwanikwa zvinoenderana nechinhu ichi.
  • nokunyora magwaro - iyi parameter inotsanangura kubva kune zviwanikwa izvi sosi inogamuchira zviziviso.
  • zivisa - Iyi parameter inotsanangura kuti ndezvipi zviwanikwa zvinogashira zviziviso kubva kune iyi sosi.

Yese yakanyorwa metaparameters inogashira ingave imwe chete yekushandisa link kana nhevedzano yezvekubatanidza mumabhuraketi akaenzana.

Links kune zviwanikwa

A resource link ingori kutaurwa kweiyo sosi. Iwo anonyanya kushandiswa kuratidza dependencies. Kurevera chinhu chisipo kunokonzeresa kukanganisa kwekubatanidza.

Syntax yeiyi link ndeiyi inotevera: resource type ine capital letter (kana zita rezita riine kaviri makoroni, ipapo chikamu chega chega chezita pakati pemakoroni chine capitalized), ipapo iro zita rekushandisa mumabhuraketi akaenzana (nyaya yezita. haina kuchinja!). Panofanira kunge pasina nzvimbo; masikweya mabhureki anonyorwa pakarepo mushure mezita remhando.

Muenzaniso:

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

Zvinoenderana uye zviziviso

Zvinyorwa pano.

Sezvambotaurwa, nyore kutsamira pakati pezviwanikwa zvinochinja. Nenzira, chenjerera paunenge uchiwedzera kutsamira - iwe unogona kugadzira cyclic kutsamira, izvo zvinokonzeresa kukanganisa kwekuunganidza.

Kusiyana nekutsamira, zviziviso hazvisi zvekuchinja. Mitemo inotevera inoshanda kune zviziviso:

  • Kana iyo sosi ikagamuchira chiziviso, inovandudzwa. Zviito zvekuvandudza zvinoenderana nerudzi rwezvekushandisa - exec anomhanyisa murairo, sevhisi inotangazve sevhisi, nhuri inodzosera pasuru. Kana iyo sosi isina chiitiko chekuvandudza chinotsanangurwa, saka hapana chinoitika.
  • Munguva yekumhanya kwePuppet, iyo sosi inovandudzwa kwete kanopfuura kamwe. Izvi zvinogoneka nekuti zviziviso zvinosanganisira kutsamira uye girafu rekutsamira harina matenderedzwa.
  • Kana Puppet ichichinja mamiriro echishandiso, sosi inotumira zviziviso kune zvese zviwanikwa zvakanyoreswa kwazviri.
  • Kana sosi yakagadziridzwa, inotumira zviziviso kune zvese zviwanikwa zvakanyoreswa kwairi.

Kubata zvisina kutaurwa parameters

Semutemo, kana imwe dhizaini paramende isina kukosha kweiyo default uye iyi parameter haina kutaurwa mumanifesiti, ipapo Puppet haizoshandure iyi pfuma kune inoenderana sosi pane node. Somuenzaniso, kana sosi yemhando faira parameter haina kutaurwa owner, ipapo Puppet haizoshandure muridzi wefaira rinoenderana.

Nhanganyaya kumakirasi, zvinoshanduka uye tsananguro

Ngatitii tine node akati wandei ane chikamu chakafanana chekugadzirisa, asi pane zvakare misiyano - zvikasadaro tinogona kuzvitsanangura zvese mubhuroka rimwe. node {}. Ehe, iwe unogona kungokopa zvakafanana zvikamu zvechigadziriso, asi kazhinji iyi imhinduro yakaipa - iyo gadziriso inokura, uye kana ukashandura iyo yakawanda chikamu chekugadzirisa, iwe uchafanirwa kugadzirisa chinhu chimwe chete munzvimbo dzakawanda. Panguva imwecheteyo, zviri nyore kuita chikanganiso, uye kazhinji, iyo DRY (usazvidzokorora iwe pachako) nheyo yakagadzirwa nokuda kwechikonzero.

Kugadzirisa dambudziko iri kune dhizaini yakadai se класс.

Makirasi

Chikoro ibhuku rine zita repoppet kodhi. Makirasi anodiwa kuti ushandisezve kodhi.

Kutanga kirasi inoda kutsanangurwa. Tsanangudzo pachayo haiwedzeri chero zviwanikwa chero kupi. Kirasi inotsanangurwa mukuratidzira:

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

Mushure meizvi kirasi inogona kushandiswa:

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

Muenzaniso kubva pane rakapfuura basa - ngatifambise kuisirwa uye kumisikidzwa kwenginx mukirasi:

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
}

Misiyano

Kirasi kubva pamuenzaniso wapfuura haichinjiki zvachose nekuti inogara ichiunza iyo nginx kumisikidzwa. Ngatiite nzira yekuchinjisa shanduko, ipapo kirasi iyi inogona kushandiswa kuisa nginx nechero gadziriso.

Zvinogona kuitwa kushandisa variables.

Chenjerera: akasiyana muPuppet haachinjike!

Mukuwedzera, shanduko inogona kuwanikwa chete mushure mekunge yaziviswa, kana zvisina kudaro kukosha kwekusiyana kuchava undef.

Muenzaniso wekushanda nemhando dzakasiyana:

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

Chipopi chine mazita enzvimbo, uye zvakasiyana-siyana, maererano nazvo, vane nzvimbo yekuonekwa: Shanduko ine zita rimwechete inogona kutsanangurwa munzvimbo dzakasiyana dzemazita. Paunenge uchigadzirisa kukosha kwekusiyana, shanduko inotsvakwa munzvimbo yemazita yemazuva ano, ipapo mune yakavharirwa zita, zvichingodaro.

Namespace mienzaniso:

  • pasi rose - zvinosiyana kunze kwekirasi kana node tsananguro enda ikoko;
  • node namespace mune node tsananguro;
  • kirasi namespace mukutsanangurwa kwekirasi.

Kuti udzivise kusanzwisisika kana uchiwana shanduko, unogona kutsanangura iyo namespace muzita rinochinja-chinja:

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

Ngatibvumei kuti nzira inoenda kune nginx kumisikidzwa iri mukusiyana $nginx_conf_source. Ipapo kirasi ichaita seizvi:

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
}

Zvisinei, muenzaniso wakapiwa wakaipa nokuti kune imwe "zivo yakavanzika" iyo pane imwe nzvimbo mukati mekirasi inoshanduka ine zita rakadaro uye rakadaro rinoshandiswa. Zvakanyanya kurongeka kuita ruzivo urwu ruzere - makirasi anogona kuve nemaparamita.

Kirasi parameters zvinosiyana-siyana munzvimbo yemazita ekirasi, zvinotsanangurwa mumusoro wekirasi uye zvinogona kushandiswa sezvinosiyana-siyana mumuviri wekirasi. Parameter values ​​inotsanangurwa kana uchishandisa kirasi mune manifest.

Iyo parameter inogona kuiswa kune yakasarudzika kukosha. Kana parameter isina kukosha kwekutanga uye kukosha kusina kuiswa kana kushandiswa, kunokonzera kukanganisa kwekubatanidza.

Ngatitarisei kirasi kubva pamuenzaniso wepamusoro uye tiwedzere maviri paramita: yekutanga, inodiwa, ndiyo nzira yekumisikidzwa, uye yechipiri, sarudzo, ndiro zita repasuru ine nginx (muDebian, semuenzaniso, kune mapakeji. 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',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

MuPuppet, mavara akasiyana anotaipa. Eat akawanda data mhando. Mhando dzedata dzinowanzo shandiswa kusimbisa parameter tsika dzinopfuudzwa kumakirasi uye tsananguro. Kana iyo yakapfuura parameter isingaenderane nemhando yakatarwa, kukanganisa kwekuunganidza kuchaitika.

Rudzi rwakanyorwa pakarepo pamberi pezita reparameter:

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

Makirasi: anosanganisira classname vs class{'classname':}

Kirasi yega yega chitubu cherudzi kirasi. Sezvakaita chero imwe mhando yechishandiso, hapagone kuve nezviitiko zviviri zvekirasi imwechete pane imwechete node.

Kana iwe ukaedza kuwedzera kirasi kune imwechete node kaviri uchishandisa class { 'classname':} (hapana mutsauko, ane akasiyana kana akafanana paramita), pachave nekukanganisa kwekuunganidza. Asi kana iwe ukashandisa kirasi mune resource dhizaini, unogona pakarepo kuseta kwayo ese ma paramita mune manifest.

Nekudaro, kana ukashandisa include, ipapo kirasi inogona kuwedzerwa kakawanda sezvaunoda. Chokwadi ndechekuti include ibasa risina simba rinotarisa kana kirasi yawedzerwa kune dhairekitori. Kana iyo kirasi isiri mudhairekitori, inoiwedzera, uye kana yatovepo, haiite chinhu. Asi kana kushandisa include Iwe haugone kuseta makirasi paramita panguva yekuzivisa kwekirasi - ese anodiwa ma paramita anofanirwa kuiswa mune yekunze data sosi - Hiera kana ENC. Tichataura nezvavo munyaya inotevera.

Inotsanangura

Sezvakataurwa mubhokisi rakapfuura, kirasi imwechete haigoni kuvapo pane node kanopfuura kamwe. Nekudaro, mune zvimwe zviitiko iwe unofanirwa kukwanisa kushandisa iyo imwechete block yekodhi ine akasiyana ma paramita pane imwechete node. Mune mamwe mazwi, panodiwa mhando yezviwanikwa zvayo.

Semuenzaniso, kuti tiise iyo PHP module, tinoita zvinotevera muAvito:

  1. Isa pasuru neiyi module.
  2. Ngatigadzire faira rekugadzirisa ye module iyi.
  3. Isu tinogadzira symlink kune iyo config ye php-fpm.
  4. Isu tinogadzira symlink kune iyo config ye php cli.

Mumamiriro ezvinhu akadaro, dhizaini yakadai se define (tsanangura, defined type, defined resource type). A Define yakafanana nekirasi, asi pane misiyano: kutanga, imwe neimwe Define imhando yezviwanikwa, kwete resource; chechipiri, tsananguro yega yega ine parameter isina kujeka $title, uko zita rekushandisa rinoenda kana raziviswa. Sezvakaita munyaya yemakirasi, tsanangudzo inofanira kutanga yatsanangurwa, mushure mokunge inogona kushandiswa.

Muenzaniso wakareruka une module yePHP:

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

Nzira iri nyore yekubata iyo Duplicate declaration kukanganisa iri muDefine. Izvi zvinoitika kana tsananguro iine sosi ine zita rinogara riripo, uye pane maviri kana anopfuura emuenzaniso wetsanangudzo iyi pane imwe node.

Zviri nyore kuzvidzivirira kubva kune izvi: zvese zviwanikwa mukati metsanangudzo zvinofanirwa kunge zvine zita zvinoenderana $title. Imwe nzira ndeyekuwedzera zvisina simba kwezviwanikwa; mune yakapusa kesi, zvakakwana kufambisa zviwanikwa zvakajairwa kune ese mamiriro etsanangudzo mukirasi yakaparadzana uye inosanganisira iyi kirasi mune tsananguro - basa. include idempotent.

Kune dzimwe nzira dzekuwana idempotency kana uchiwedzera zviwanikwa, kureva kushandisa mabasa defined и ensure_resources, asi ndichakuudza nezvazvo muchikamu chinotevera.

Zvinoenderana uye zviziviso zvekirasi uye tsananguro

Makirasi uye tsananguro dzinowedzera iyo inotevera mitemo pakubata zvinotsamira uye zviziviso:

  • kuvimba nekirasi/tsanangudzo inowedzera kutsamira pane zvese zviwanikwa zvekirasi/define;
  • kirasi / tsanangura kuvimba kunowedzera kutsamira kune ese makirasi / tsanangura zviwanikwa;
  • kirasi / tsanangura chiziviso chinozivisa zvese zviwanikwa zvekirasi / tsanangura;
  • class/define subscription inonyoresa kune zvese zviwanikwa zvekirasi/define.

Conditional statements uye vanosarudza

Zvinyorwa pano.

if

Zviri nyore apa:

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

kunze kokuti

kunze kwekunge iri kana in reverse: iyo block yekodhi ichaitwa kana kutaura kuri kwenhema.

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

mhosva

Hapana chakaoma apa futi. Iwe unogona kushandisa zvakajairwa kukosha (tambo, manhamba, nezvimwewo), zvirevo zvenguva dzose, uye mhando dzedata sehunhu.

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

Selectors

Sarudzo imhando yemutauro wakafanana ne case, asi pachinzvimbo chekuita block yekodhi, inodzosera kukosha.

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

Modules

Kana iyo gadziriso idiki, inogona kuchengetwa nyore mune imwe manifest. Asi iyo yakawanda magadzirirwo atinotsanangura, iyo yakawanda makirasi uye node aripo mune manifest, inokura, uye zvinova zvinonetsa kushanda nazvo.

Pamusoro pezvo, pane dambudziko rekushandisazve kodhi - kana kodhi yese iri mukuratidzira, zvakaoma kugovera iyi kodhi nevamwe. Kugadzirisa matambudziko maviri aya, Puppet ine mubatanidzwa unonzi modules.

Modules -aya maseti emakirasi, tsananguro uye zvimwe masangano ePuppet akaiswa mune imwe dhairekitori. Mune mamwe mazwi, module chikamu chakazvimirira chePuppet logic. Semuenzaniso, panogona kunge paine module yekushanda nenginx, uye ichange iine izvo uye chete izvo zvinodiwa kuti ushande nenginx, kana panogona kunge paine module yekushanda nePHP, zvichingodaro.

Mamodule akashandurwa, uye kutsamira kwemamodule pane imwe neimwe kunotsigirwawo. Kune yakavhurika repository yemamodule - Puppet Forge.

Pane iyo puppet server, ma modules ari mune iyo modules subdirectory yemudzi dhairekitori. Mukati memodhi yega yega mune yakajairwa dhairekitori scheme - inoratidza, mafaera, matemplate, lib, zvichingodaro.

Chimiro chefaira mune module

Midzi yemodule inogona kunge iine madhairekitori anotevera ane mazita anotsanangura:

  • manifests - ine manifestos
  • files - ine mafaira
  • templates - ine matemplate
  • lib - ine Ruby kodhi

Iyi haisi rondedzero yakazara yemadhairekitori uye mafaera, asi yakakwana kune ino chinyorwa ikozvino.

Mazita ezviwanikwa uye mazita emafaira ari mumodule

Zvinyorwa pano.

Zviwanikwa (makirasi, tsananguro) mune module haigone kupihwa zita chero chaunoda. Pamusoro pezvo, pane kunyorerana kwakananga pakati pezita rechishandiso uye zita refaira umo Puppet achatsvaga tsananguro yechishandiso ichocho. Kana iwe ukatyora mitemo yekupa mazita, ipapo Puppet haingowane tsananguro yechishandiso, uye iwe uchawana kukanganisa kwekuunganidza.

Mitemo yacho iri nyore:

  • Zvese zviwanikwa mumodule zvinofanirwa kunge zviri mumodule namespace. Kana iyo module yakadanwa foo, ipapo zviwanikwa zvese zviri mairi zvinofanirwa kupihwa zita foo::<anything>, kana kuti foo.
  • Iyo sosi ine zita reiyo module inofanirwa kunge iri mufaira init.pp.
  • Kune zvimwe zviwanikwa, iyo faira yekutumidza zita chirongwa ndeiyi:
    • prefix ine zita remodule inoraswa
    • ese maviri colon, kana aripo, anotsiviwa nemaslash
    • kuwedzera kunowedzerwa .pp

Ndicharatidza nemuenzaniso. Ngatitii ndiri kunyora module nginx. Rine zvinhu zvinotevera:

  • класс nginx inotsanangurwa mumanifesiti init.pp;
  • класс nginx::service inotsanangurwa mumanifesiti service.pp;
  • define nginx::server inotsanangurwa mumanifesiti server.pp;
  • define nginx::server::location inotsanangurwa mumanifesiti server/location.pp.

Mapepa

Chokwadi iwe pachako unoziva kuti matemplate ndeapi; Ini handisi kuzoatsanangura zvakadzama pano. Asi ndichazvisiya chete link kuWikipedia.

Mashandisiro ematemu: Zvinorehwa netemplate zvinogona kuwedzerwa uchishandisa basa template, iyo inopfuudzwa nzira yekuenda kune template. Zvezviwanikwa zvemhando faira inoshandiswa pamwe chete neparameter content. Semuenzaniso, seizvi:

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

Ona nzira <modulename>/<filename> zvinoreva faira <rootdir>/modules/<modulename>/templates/<filename>.

Uye zvakare, kune basa inline_template - inogamuchira zvinyorwa zvetemplate sekuisa, kwete zita refaira.

Mukati mematemu, unogona kushandisa ese maPuppet akasiyana mune yazvino chiyero.

Puppet inotsigira matemplate muERB uye EPP fomati:

Muchidimbu nezveERB

Kudzora zvimiro:

  • <%= ВЫРАЖЕНИЕ %> - isa kukosha kwechirevo
  • <% ВЫРАЖЕНИЕ %> - kuverenga kukosha kwechirevo (pasina kuiisa). Mamiriro ezvinhu (kana) uye zvishwe (chimwe nechimwe) anowanzoenda pano.
  • <%# КОММЕНТАРИЙ %>

Matauriro ari muERB akanyorwa muRuby (ERB is actually Embedded Ruby).

Kuti uwane zvinosiyana kubva kumanifesiti, unofanirwa kuwedzera @ kune zita rakasiyana. Kuti ubvise mutsara unoputika unoonekwa mushure mekugadzirisa kuvaka, unoda kushandisa tag yekuvhara -%>.

Muenzaniso wekushandisa template

Ngatitii ndiri kunyora module yekudzora ZooKeeper. Kirasi ine basa rekugadzira iyo config inotaridzika seizvi:

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

Uye template inoenderana zoo.cfg.erb - Saka:

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

Chokwadi uye Yakavakwa-mukati Variables

Kazhinji chikamu chaicho chekugadzirisa chinoenderana nezviri kuitika pane node. Semuenzaniso, zvichienderana nekuti Debian kuburitswa chii, unofanirwa kuisa imwe kana imwe vhezheni yepakeji. Unogona kutarisa zvese izvi nemaoko, kunyorazve kunoratidza kana node dzachinja. Asi iyi haisi nzira yakakomba; otomatiki iri nani zvakanyanya.

Kuti uwane ruzivo nezve node, Puppet ine nzira inonzi chokwadi. Chokwadi -Iri iruzivo nezve node, inowanikwa muzviratidziro muchimiro cheakajairwa akasiyana munzvimbo yepasirese mazita. Semuyenzaniso, zita rekutambira, vhezheni yekushandisa system, processor architecture, runyorwa rwevashandisi, runyorwa rwetiweki interfaces nemakero avo, uye zvakawanda, zvakawanda. Chokwadi chinowanikwa mumanifesiti uye matemplate seanogara achisiyana.

Muenzaniso wekushanda nechokwadi:

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

Kutaura zviri pamutemo, chokwadi chine zita (tambo) uye kukosha (marudzi akasiyana-siyana aripo: tambo, arrays, dictionaries). Eat seti yezvakavakirwa-mukati chokwadi. Unogona kunyorawo zvako. Vaunganidzi vechokwadi vanotsanangurwa kufanana nemabasa muRubykungave se executable mafaira. Chokwadi chinogona kuratidzwawo mufomu mameseji mafaira ane data pamanodhi.

Panguva yekushanda, mumiriri wepuppet anotanga akopa ese aripo echokwadi vatori kubva pappetserver kuenda kune node, mushure mezvo inovavhura uye inotumira chokwadi chakaunganidzwa kune server; Mushure meizvi, sevha inotanga kuunganidza iyo catalog.

Chokwadi chiri muchimiro chemafaira anoteeka

Zvinhu zvakadaro zvinoiswa mumamodule mudhairekitori facts.d. Ehe, mafaera anofanira kunge achiitwa. Kana ichimhanya, ivo vanofanirwa kuburitsa ruzivo kune yakajairwa kubuda mune chero YAML kana kiyi = kukosha kwefomati.

Usakanganwa kuti chokwadi chinoshanda kune ese ma node anodzorwa nepoppet server uko module yako inotumirwa. Naizvozvo, mune script, ita shuwa kutarisa kuti system yacho ine ese mapurogiramu uye mafaera anodiwa kuti chokwadi chako chishande.

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

Ruby chokwadi

Zvinhu zvakadaro zvinoiswa mumamodule mudhairekitori 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

Zvinyorwa zvemashoko

Zvinhu zvakadaro zvinoiswa pamanodhi mudhairekitori /etc/facter/facts.d muPuppet yekare kana /etc/puppetlabs/facts.d muPuppet itsva.

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

Kusvika kune Chokwadi

Pane nzira mbiri dzekutaura chokwadi:

  • kuburikidza neduramazwi $facts: $facts['fqdn'];
  • uchishandisa zita rechokwadi sezita rakasiyana: $fqdn.

Zviri nani kushandisa duramazwi $facts, kana zvirinani, ratidza nzvimbo yezita repasi rose ($::facts).

Heino chikamu chakakodzera chezvinyorwa.

Yakavakwa-mukati Variables

Kunze kwechokwadi, kune zvakare zvimwe zvakasiyana, inowanikwa munzvimbo yepasi rose yemazita.

  • chokwadi chakavimbika - machinjiro anotorwa kubva pachitupa chemutengi (sezvo chitupa chinowanzo kupihwa papoppet server, mumiririri haagone kungotora nekuchinja chitupa chake, saka izvo zvinosiyana "zvinovimbwa"): zita rechitupa, saiti uye zita rezita, kuwedzera kubva pachitupa.
  • server chokwadi -zvinosiyana zvine chekuita neruzivo nezve server-vhezheni, zita, server IP kero, nharaunda.
  • agent chokwadi - akasiyana akawedzerwa zvakananga nepuppet-agent, uye kwete nefactor - zita retifiketi, mumiririri shanduro, puppet version.
  • master variables -Pappetmaster zvinosiyana (sic!). Zvakafanana nein server chokwadi, pamwe nekumisikidza parameter maitiro aripo.
  • compiler variables - compiler variables inosiyana mune imwe neimwe chiyero: zita reiyo module uye zita reiyo module umo chinhu chazvino chakawanikwa. Inogona kushandiswa, semuenzaniso, kutarisa kuti makirasi ako epachivande haasi kushandiswa zvakananga kubva kune mamwe ma module.

Kuwedzera 1: sei kumhanya uye kugadzirisa zvese izvi?

Chinyorwa chacho chaive nemienzaniso yakawanda yekodhi kodhi, asi hachina kutiudza zvachose maitiro ekuita iyi kodhi. Zvakanaka, ndiri kuzvigadzirisa.

Mumiririri akakwana kumhanyisa Puppet, asi kazhinji kazhinji iwe unozodawo sevha.

Agent

Zvirinani kubvira vhezheni XNUMX, puppet-agent mapakeji kubva official Puppetlabs repository ine zvese zvinotsamira (ruby uye matombo anoenderana), saka hapana matambudziko ekuisa (ndiri kutaura nezve Debian-based distributions - isu hatishandise RPM-based distributions).

Muchiitiko chakareruka, kushandisa dhizaini yekumisikidza, zvakakwana kuvhura mumiriri mune serverless modhi: chero iyo puppet kodhi yakateedzerwa kune node, kutanga. 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

Zviri nani, hongu, kumisikidza sevha uye kumhanya vamiririri pane node mune daemon modhi - ipapo kamwe kamwe hafu yeawa vanozoisa iyo yekumisikidza yakatorwa kubva kuseva.

Iwe unogona kutevedzera push modhi yebasa - enda kune node yaunofarira uye tanga sudo puppet agent -t. Key -t (--test) inosanganisa sarudzo dzinoverengeka dzinogona kugoneswa yega. Izvi zvinosanganisira zvinotevera:

  • usamhanye mune daemon modhi (nekusagadzika mumiririri anotanga mune daemon mode);
  • kuvhara mushure mekushandisa iyo catalog (nekusagadzika, mumiririri acharamba achishanda uye kushandisa gadziriro kamwe chete hafu yeawa);
  • nyora chinyorwa chebasa chakadzama;
  • ratidza shanduko mumafaira.

Mumiririri ane maitiro ekushanda pasina shanduko - unogona kuishandisa kana usina chokwadi chekuti wakanyora kugadzirisa uye unoda kutarisa kuti chii chaizvo chichachinja mumiririri panguva yekushanda. Iyi modhi inogoneswa neiyo parameter --noop pamutsetse wekuraira: sudo puppet agent -t --noop.

Uye zvakare, iwe unogona kugonesa iyo debugging log yebasa - mairi, puppet inonyora nezve zvese zviito zvazvinoita: nezve sosi yairi kugadzirisa parizvino, nezve maparamendi echishandiso ichi, nezvezvirongwa zvaanotangisa. Chokwadi iyi parameter --debug.

Server

Ini handisi kuzofunga nezveseta yakazara yepappetserver uye kuendesa kodhi kwairi mune ino chinyorwa; Ini ndinongotaura kuti kunze kwebhokisi kune inoshanda zvizere vhezheni yeseva iyo isingade imwe gadziriso yekushanda nenhamba shoma nodes (ti, kusvika zana). Huwandu hukuru hwemanodhi hunoda tuning - nekusarudzika, puppetserver inotangisa vashandi vanopfuura vana, kuti uite zvakanyanya iwe unofanirwa kuwedzera nhamba yavo uye usakanganwa kuwedzera miganho yekurangarira, zvikasadaro sevha inounganidza marara kazhinji yenguva.

Code deployment - kana uchiida nekukurumidza uye zviri nyore, wobva watarisa (pa r10k)[https://github.com/puppetlabs/r10k], pakuisa zvidiki zvinofanirwa kunge zvakakwana.

Wedzero 2: Coding Guidelines

  1. Isa zvese zvine musoro mumakirasi uye tsananguro.
  2. Chengetedza makirasi uye tsananguro mumamodule, kwete mumaratidziro anotsanangura node.
  3. Shandisa chokwadi.
  4. Usaite ifs zvichibva pamazita ekugamuchira.
  5. Inzwa wakasununguka kuwedzera maparamendi emakirasi uye tsananguro - izvi zviri nani pane fungidziro yakavanzika yakavanzwa mumuviri wekirasi/tsananguro.

Ini ndichatsanangura kuti sei ndichikurudzira kuita izvi munyaya inotevera.

mhedziso

Ngatipedzei nenhanganyaya. Muchinyorwa chinotevera ini ndichakuudza nezve Hiera, ENC uye PuppetDB.

Vashandisi vakanyoresa chete ndivo vanogona kutora chikamu muongororo. Nyorera mu, Munogamuchirwa.

Muchokwadi, kune zvimwe zvinhu zvakawanda - ndinogona kunyora zvinyorwa pane zvinotevera misoro, kuvhota pane zvaungade kuverenga nezvazvo:

  • 59,1%Zvigadzirwa zvemhando yepamusoro zvezvidhori - zvimwe zvedanho rinotevera: zvishwe, mepu uye mamwe mataurirwo e lambda, vaunganidzi vezviwanikwa, zviwanikwa zvinotengeswa kunze kwenyika uye kutaurirana kwevatambi kuburikidza nePuppet, tags, vapeji, abstract data types.13
  • 31,8%"Ndiri admin waamai vangu" kana kuti isu muAvito takaita sei shamwari nemaseva akati wandei eshanduro dzakasiyana, uye, mumusimboti, chikamu chekutarisira poppet server.7
  • 81,8%Manyorero atinoita puppet code: instrumentation, zvinyorwa, kuedza, CI / CD.18

22 vashandisi vakavhota. 9 vashandisi vakaramba.

Source: www.habr.com