Fampidirana ny saribakoly

Ny saribakoly dia rafitra fitantanana fanamafisana. Ampiasaina izy io mba hitondrana ny mpampiantrano any amin'ny fanjakana tiana sy hitazonana an'io fanjakana io.

Niara-niasa tamin'ny Puppet nandritra ny dimy taona mahery aho izao. Ity lahatsoratra ity dia fitambarana hevi-dehibe voadika sy nohavaozina avy amin'ny antontan-taratasy ofisialy, izay ahafahan'ny vao manomboka mahazo haingana ny maha-zava-dehibe ny Puppet.

Fampidirana ny saribakoly

Fampahalalana fototra

Ny rafitra fiasan'ny Puppet dia client-server, na dia manohana ny fampandehanana tsy misy mpizara miaraka amin'ny fiasa voafetra ihany koa aza.

Modely fisintonana no ampiasaina: amin'ny alàlan'ny default, indray mandeha isaky ny antsasak'adiny, ny mpanjifa dia mifandray amin'ny mpizara amin'ny fanamafisana ary mampihatra izany. Raha niara-niasa tamin'ny Ansible ianao, dia mampiasa modely fanosehana hafa izy ireo: ny mpitantana dia manomboka ny dingan'ny fampiharana ny fanamafisana, ny mpanjifa mihitsy dia tsy hampihatra na inona na inona.

Mandritra ny fifandraisana amin'ny tambajotra dia ampiasaina ny encryption TLS roa: ny mpizara sy ny mpanjifa dia manana ny lakilen'izy ireo manokana sy ny mari-pankasitrahana mifanaraka amin'izany. Matetika ny mpizara dia manome mari-pankasitrahana ho an'ny mpanjifa, fa amin'ny ankapobeny dia azo atao ny mampiasa CA ivelany.

Fampidirana ny manifesto

Amin'ny teny saribakoly mankany amin'ny mpizara saribakoly mifandray nodes (nodes). Nosoratana ny firafitry ny nodes amin'ny manifesto amin'ny fiteny fandaharana manokana - Puppet DSL.

Saribakoly DSL dia fiteny fanambarana. Izy io dia mamaritra ny toetry ny node amin'ny endrika fanambarana ny loharanon-karena tsirairay, ohatra:

  • Misy ilay rakitra ary misy atiny manokana.
  • Ny fonosana dia napetraka.
  • Nanomboka ny serivisy.

Ny loharanon-karena dia afaka mifandray:

  • Misy ny fiankinan-doha, misy fiantraikany amin'ny filaharan'ny fampiasana ny loharanon-karena.
    Ohatra, "apetraho aloha ny fonosana, avy eo ovao ny rakitra fanamafisana, ary atombohy ny serivisy."
  • Misy fampandrenesana - raha niova ny loharano iray, dia mandefa fampahafantarana ho an'ireo loharano nisoratra anarana izany.
    Ohatra, raha miova ny fisie fichier dia azonao atao ny mamerina ho azy ny serivisy.

Fanampin'izany, ny saribakoly DSL dia manana fiasa sy miovaova, ary koa fanambarana misy fepetra sy mpifidy. Tohanana ihany koa ny mekanika fanaovana template isan-karazany - EPP sy ERB.

Ny saribakoly dia nosoratana tamin'ny teny Ruby, ka maro amin'ireo fananganana sy teny no nalaina tao. Mamela anao hanitatra ny saribakoly i Ruby - manampy lojika sarotra, karazana loharano vaovao, fiasa.

Raha mbola mandeha ny Puppet, dia atambatra ao anaty lahatahiry ny fisehoana ho an'ny node manokana tsirairay ao amin'ny server. lahatahiry dia lisitr'ireo loharanon-karena sy ny fifandraisan'izy ireo aorian'ny kajy ny sandan'ny asa, ny fari-piainana ary ny fanitarana ny fanambarana misy fepetra.

Syntax sy codestyle

Ireto misy ampahany amin'ny antontan-taratasy ofisialy hanampy anao hahatakatra ny syntax raha tsy ampy ny ohatra omena:

Ity misy ohatra iray amin'ny endriky ny manifest:

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

Ny indentation sy ny fiatoana andalana dia tsy ampahany takiana amin'ny manifest, fa misy soso-kevitra fomba fitarihana. Famintinana:

  • Indents misy habaka roa, tsy ampiasaina ny tabilao.
  • Ny braces olioly dia misaraka amin'ny toerana iray;
  • Faingo aorian'ny mari-pamantarana tsirairay, anisan'izany ny farany. Ny paramètre tsirairay dia eo amin'ny tsipika misaraka. Misy maningana natao ho an'ilay tranga tsy misy paramètre sy paramètre iray: afaka manoratra amin'ny andalana iray ianao ary tsy misy faingo (ie. resource { 'title': } и resource { 'title': param => value }).
  • Ny zana-tsipìka eo amin'ny masontsivana dia tokony ho mitovy ambaratonga.
  • Ny zana-tsipìka mifandray amin'ny loharanon-karena dia voasoratra eo anoloan'izy ireo.

Toerana misy rakitra amin'ny pappetserver

Raha mila fanazavana fanampiny dia hampiditra ny foto-kevitry ny "root directory" aho. Ny lahatahiry fototra dia ny lahatahiry misy ny saribakolina ho an'ny node manokana.

Ny lahatahiry fototra dia miovaova arakaraka ny dikan'ny Puppet sy ny tontolo ampiasaina. Ny tontolo iainana dia andiana tefy tsy miankina izay voatahiry ao anaty lahatahiry misaraka. Matetika ampiasaina miaraka amin'ny git, ka ny tontolo iainana dia noforonina avy amin'ny sampana git. Noho izany, ny node tsirairay dia miorina amin'ny tontolo iray na hafa. Ity dia azo amboarina amin'ny node, na amin'ny ENC, izay horesahiko amin'ny lahatsoratra manaraka.

  • Ao amin'ny dikan-teny fahatelo ("Saribakoly taloha") ny lahatahiry fototra dia /etc/puppet. Tsy voatery ny fampiasana tontolo iainana - ohatra, tsy ampiasainay miaraka amin'ny saribakoly taloha. Raha ny tontolo iainana no ampiasaina dia matetika voatahiry ao /etc/puppet/environments, ny lahatahiry fototra dia ny lisitry ny tontolo iainana. Raha tsy ampiasaina ny tontolo iainana dia ny lahatahiry fototra no ho lahatahiry fototra.
  • Nanomboka tamin'ny dikan-teny fahefatra (“Saribakoly vaovao”), nanjary tsy maintsy natao ny fampiasana ny tontolo iainana, ary nafindra tany amin'ny lahatahiry fototra. /etc/puppetlabs/code. Noho izany, ny tontolo iainana dia voatahiry ao /etc/puppetlabs/code/environments, ny root directory dia ny lisitry ny tontolo iainana.

Tsy maintsy misy subdirectory ao amin'ny lahatahiry fototra manifests, izay misy fisehoana iray na maromaro mamaritra ny nodes. Ankoatra izany, tokony hisy subdirectory modules, izay misy ny modules. Holazaiko aminao izay modules ato aoriana kely. Ankoatra izany, ny saribakoly taloha dia mety manana subdirectory ihany koa files, izay misy rakitra isan-karazany izay adikay amin'ny nodes. Ao amin'ny saribakoly vaovao, ny rakitra rehetra dia napetraka ao anaty modules.

Ny rakitra Manifest dia manana ny fanitarana .pp.

Ohatra roa amin'ny ady

Famaritana ny node sy ny loharano eo aminy

Amin'ny node server1.testdomain tsy maintsy mamorona rakitra /etc/issue miaraka amin'ny atiny Debian GNU/Linux n l. Ny rakitra dia tsy maintsy manana mpampiasa sy vondrona iray root, ny zo fidirana dia tsy maintsy 644.

Manoratra manifesto izahay:

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

Fifandraisana eo amin'ny loharanon-karena amin'ny node

Amin'ny node server2.testdomain nginx dia tsy maintsy mandeha, miasa miaraka amin'ny konfigurasi efa nomanina teo aloha.

Andeha ho simba ny olana:

  • Mila apetraka ny fonosana nginx.
  • Ilaina ny maka kopia avy amin'ny mpizara ny rakitra fanamafisana.
  • Mila mandeha ny serivisy nginx.
  • Raha havaozina ny fanovana dia tsy maintsy averina ny serivisy.

Manoratra manifesto izahay:

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

Mba hampandehanana izany dia mila ity toerana misy rakitra manaraka ity eo amin'ny mpizara saribakoly ianao:

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

Karazana loharanon-karena

Hita eto ny lisitra feno amin'ireo karazana loharano tohana ao amin'ny antontan-taratasy, eto aho dia hilazalaza karazana fototra dimy, izay amin'ny fampiharana ahy dia ampy hamahana ny ankamaroan'ny olana.

rakitra

Mitantana ny rakitra, lahatahiry, symlinks, ny atiny ary ny zo miditra.

masontsivana:

  • anarana loharano - lalana mankany amin'ny rakitra (tsy voatery)
  • lalana - lalana mankany amin'ny rakitra (raha tsy voalaza amin'ny anarana)
  • antoka - karazana rakitra:
    • absent - mamafa rakitra
    • present - tsy maintsy misy rakitra na inona na inona karazana (raha tsy misy rakitra dia hisy rakitra mahazatra)
    • file - rakitra mahazatra
    • directory - lahatahiry
    • link - symlink
  • afa-po - ny atiny rakitra (mety ho an'ny rakitra mahazatra ihany, tsy azo ampiasaina miaraka amin'ny loharano na lasibatra)
  • loharano - rohy mankany amin'ny lalana tianao handikana ny votoatin'ny rakitra (tsy azo ampiasaina miaraka amin'ny afa-po na lasibatra). Azo lazaina ho URI misy tetika puppet: (dia hampiasaina ny rakitra avy amin'ny mpizara saribakoly), ary miaraka amin'ny drafitra http: (Manantena aho fa hazava ny zavatra hitranga amin'ity tranga ity), ary na dia miaraka amin'ny kisary aza file: na ho lalana tanteraka tsy misy schema (dia hampiasaina ny rakitra avy amin'ny FS eo an-toerana eo amin'ny node)
  • lasibatra - izay tokony hanondro ny symlink (tsy azo ampiasaina miaraka amin'ny afa-po na loharano)
  • Owner — ny mpampiasa izay tokony hanana ny rakitra
  • vondrona - ny vondrona izay tokony ho an'ny rakitra
  • maody - fahazoan-dàlana amin'ny rakitra (ho tady)
  • miverimberina - mamela ny fanodinana lahatahiry miverimberina
  • fanadiovana - mamela ny famafana ireo rakitra tsy voalaza ao amin'ny Puppet
  • hery - mamela ny famafana lahatahiry tsy voalaza ao amin'ny Puppet

fonosana

Mametraka sy manala fonosana. Mahay mitantana fampandrenesana - mamerina ny fonosana raha toa ka voafaritra ny mari-pamantarana reinstall_on_refresh.

masontsivana:

  • anarana loharano - anaran'ny fonosana (tsy voatery)
  • anarana - anaran'ny fonosana (raha tsy voalaza amin'ny anarana)
  • mpamatsy - mpitantana fonosana ampiasaina
  • antoka - toetry ny fonosana tiana:
    • present, installed - misy version napetraka
    • latest - version farany napetraka
    • absent - voafafa (apt-get remove)
    • purged - voafafa miaraka amin'ny rakitra fanamafisana (apt-get purge)
    • held - voahidy ny dikan'ny fonosana (apt-mark hold)
    • любая другая строка - napetraka ny dikan-teny voafaritra
  • reinstall_on_refresh - raha true, dia rehefa voaray ny fampandrenesana dia hapetraka indray ilay fonosana. Mahasoa ho an'ny fizarana mifototra amin'ny loharano, izay mety ilaina ny fanamboarana fonosana rehefa manova masontsivana fananganana. toerana misy anao false.

fanompoana

Mitantana serivisy. Afaka mikarakara fampandrenesana - mamerina ny serivisy.

masontsivana:

  • anarana loharano - serivisy hotantanana (tsy voatery)
  • anarana - ny serivisy mila tantanina (raha tsy voalaza amin'ny anarana)
  • antoka - toetry ny serivisy tiana:
    • running - natomboka
    • stopped - nijanona
  • Tadiavo - mifehy ny fahafahana manomboka ny serivisy:
    • true - mandeha ny autorun (systemctl enable)
    • mask - misaron-tava (systemctl mask)
    • false - tsy mandeha ny autorun (systemctl disable)
  • haverina velomina - baiko hamerina ny serivisy
  • sata — baiko hanamarina ny toeran'ny serivisy
  • hasrestart - asehoy raha manohana ny fanombohana indray ny initscript serivisy. RAHA false ary voafaritra ny paramètre haverina velomina - ny sandan'ity mari-pamantarana ity dia ampiasaina. RAHA false ary parameter haverina velomina tsy voafaritra - mijanona ny serivisy ary manomboka manomboka (fa ny systemd dia mampiasa ny baiko systemctl restart).
  • hasstatus - manondro raha manohana ny baiko ny initscript serivisy status. raha false, dia ampiasaina ny sandan'ny paramètre sata. toerana misy anao true.

exec

Mandeha baiko ivelany. Raha tsy mamaritra paramètre ianao miteraka, ihany raha, raha tsy na refreshonly, ny baiko dia alefa isaky ny mandeha ny Puppet. Mahay mikarakara fampandrenesana - mitondra baiko.

masontsivana:

  • anarana loharano - baiko hotanterahina (tsy voatery)
  • didy - ny baiko hotanterahina (raha tsy voalaza amin'ny anarana)
  • lalana - lalana hitadiavana ny rakitra azo tanterahana
  • ihany raha - raha toa ka vita amin'ny kaody zero miverina ny baiko voalaza ao amin'io paramètre io, dia hotanterahina ny baiko fototra
  • raha tsy - raha toa ka vita amin'ny kaody fiverenana tsy aotra ny baiko voalaza ao amin'io paramètre io, dia hotanterahina ny baiko fototra.
  • miteraka - raha tsy misy ny rakitra voatondro amin'ity paramètre ity dia hotanterahina ny baiko fototra
  • refreshonly - raha true, dia tsy ho mandeha ny baiko rehefa mahazo fampandrenesana avy amin'ny loharano hafa ity exec ity
  • cwd — lahatahiry izay handefasana ny baiko
  • mpampiasa — ny mpampiasa izay handefasana ny baiko
  • mpamatsy - ny fomba fampandehanana ny baiko:
    • posix - ny fizotran'ny zaza dia noforonina fotsiny, ho azo antoka ny mamaritra lalana
    • akorany - ny baiko dia natomboka tao amin'ny shell /bin/sh, mety tsy voafaritra lalana, azonao atao ny mampiasa globbing, fantsona ary endri-javatra hafa. Matetika hita ho azy raha misy tarehintsoratra manokana (|, ;, &&, || sy ny sisa).

cron

Mifehy cronjobs.

masontsivana:

  • anarana loharano - karazana identifier fotsiny
  • antoka - fanjakana crownjob:
    • present - mamorona raha tsy misy
    • absent - esory raha misy
  • didy - inona no baiko tokony hatao
  • tontolo iainana - amin'ny tontolo inona no hampandehanana ny baiko (lisitra ny fari-piainan'ny tontolo iainana sy ny sandany amin'ny alàlan'ny =)
  • mpampiasa — avy amin'ny mpampiasa inona no handefasana ny baiko
  • minitra, ora, andro faran'ny herinandro, volana, volana - rehefa mihazakazaka cron. Raha toa ka tsy voafaritra ny iray amin'ireo toetra ireo dia ho ny sandany ao amin'ny crontab *.

Ao amin'ny Puppet 6.0 cron tahaka ny nesorina tao anaty boaty ao amin'ny puppetserver, noho izany dia tsy misy antontan-taratasy ao amin'ny tranokala ankapobeny. Fa izy dia ao anaty boaty amin'ny saribakoly-agent, ka tsy ilaina ny hametraka azy misaraka. Azonao jerena ny antontan-taratasy momba izany ao amin'ny antontan-taratasy ho an'ny andiany fahadimy amin'ny Puppet, na amin'ny GitHub.

Momba ny loharanon-karena amin'ny ankapobeny

Fepetra momba ny maha-tokana ny loharanon-karena

Ny fahadisoana mahazatra indrindra hitantsika dia Fanambarana dika mitovy. Mitranga ity hadisoana ity rehefa miseho ao amin'ny lahatahiry ny loharano roa na maromaro mitovy karazana miaraka amin'ny anarana mitovy.

Noho izany dia hanoratra indray aho hoe: Ny manifests ho an'ny node mitovy dia tsy tokony ahitana loharano mitovy karazana miaraka amin'ny lohateny mitovy!

Indraindray dia ilaina ny mametraka fonosana miaraka amin'ny anarana mitovy, fa miaraka amin'ny mpitantana fonosana samihafa. Amin'ity tranga ity, mila mampiasa ny parameter ianao namemba hisorohana ny fahadisoana:

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

Ny karazana loharano hafa dia manana safidy mitovy amin'izany mba hisorohana ny dika mitovy − name у fanompoana, command у exec, sy ny sisa.

Metaparameters

Ny karazana loharano tsirairay dia manana mari-pamantarana manokana, na inona na inona toetrany.

Lisitry ny meta paramètre feno ao amin'ny antontan-taratasy Puppet.

Lisitra fohy:

  • mitaky — ity paramètre ity dia manondro izay loharano iankinan'ity loharano ity.
  • alohan'ny - Ity mari-pamantarana ity dia mamaritra izay loharano miankina amin'io loharano io.
  • famandrihana — ity paramètre ity dia mamaritra avy amin'ny loharanon-karena mahazo fampandrenesana.
  • hampandre — Ity mari-pamantarana ity dia mamaritra izay loharano mahazo fampandrenesana avy amin'ity loharano ity.

Ireo metaparametra voatanisa rehetra dia manaiky na rohy loharano tokana na rohibe maromaro ao anaty fonon-joro efamira.

Rohy mankany amin'ny loharanon-karena

Ny rohy loharano dia fitenenana fotsiny ny loharano. Izy ireo dia ampiasaina indrindra hanondroana fiankinan-doha. Ny fanondroana loharano tsy misy dia hiteraka hadisoana fanangonana.

Toy izao ny firafitry ny rohy: karazana loharano miaraka amin'ny litera lehibe (raha misy zana-tsipìka roa ny anaran'ny karazana, dia ny ampahany tsirairay amin'ny anarana eo anelanelan'ny zana-tsipìka dia asiana renibeny), avy eo ny anaran'ny loharano ao anaty fonon-joro efamira (ny tranga misy ny anarana. tsy miova!). Tsy tokony hisy habaka;

ohatra:

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

Fiankinan-doha sy fampahafantarana

Documentation eto.

Araka ny voalaza teo aloha, ny fiankinan-doha tsotra eo amin'ny loharanon-karena dia transitive. Etsy ankilany, mitandrema rehefa manampy fiankinan-doha - azonao atao ny mamorona fiankinan-doha cyclic, izay hiteraka hadisoana fanangonana.

Tsy toy ny fiankinan-doha, ny fampandrenesana dia tsy transitive. Ireto fitsipika manaraka ireto dia mihatra amin'ny fampahafantarana:

  • Raha mahazo fampandrenesana ny loharano dia havaozina izany. Ny hetsika fanavaozana dia miankina amin'ny karazana loharano − exec manao ny commande, fanompoana mamerina ny serivisy, fonosana reinstalls ny fonosana. Raha tsy misy hetsika fanavaozam-baovao voafaritry ny loharano dia tsy misy na inona na inona mitranga.
  • Mandritra ny fihodinana iray amin'ny saribakoly, ny loharano dia havaozina tsy mihoatra ny indray mandeha. Azo atao izany satria misy fiankinan-doha ny fampandrenesana ary tsy misy tsingerina ny kisary fiankinan-doha.
  • Raha manova ny toetry ny loharano iray ny Puppet dia mandefa fampandrenesana amin'ny loharano rehetra misoratra anarana amin'izany ny loharano.
  • Raha havaozina ny loharano iray dia mandefa fampandrenesana amin'ireo loharano rehetra misoratra anarana amin'izany.

Fikarakarana masontsivana tsy voafaritra

Amin'ny maha-fitsipika azy, raha toa ka tsy manana sanda mahazatra ny masontsivana loharanon-karena sasany ary tsy voatondro ao amin'ny fisehoana io paramètre io, dia tsy hanova an'io fananana io ho an'ny loharano mifanaraka amin'izany eo amin'ny node ny Puppet. Ohatra, raha loharanon'ny karazana rakitra parameter tsy voafaritra owner, dia tsy hanova ny tompon'ny rakitra mifanaraka amin'izany ny Puppet.

Fampidirana amin'ny kilasy, miovaova ary famaritana

Eritrereto hoe manana node maromaro manana ampahany mitovy amin'ny fanamafisana isika, saingy misy ihany koa ny fahasamihafana - raha tsy izany dia afaka mamaritra azy rehetra ao anaty bloc iray isika. node {}. Mazava ho azy, azonao atao ny mandika fotsiny ny ampahany mitovy amin'ny fanamafisana, fa amin'ny ankapobeny dia vahaolana ratsy izany - mitombo ny fanamafisana, ary raha manova ny ampahany ankapobeny amin'ny fanamafisana ianao dia tsy maintsy manova zavatra mitovy amin'ny toerana maro. Mandritra izany fotoana izany, mora ny manao fahadisoana, ary amin'ny ankapobeny, ny fitsipika DRY (aza mamerina ny tenanao) dia noforonina noho ny antony iray.

Mba hamahana ity olana ity dia misy drafitra toy izany класс.

fianarana

kilasy dia bloc antsoina hoe kaody poppet. Ilaina ny kilasy hampiasaina indray kaody.

Voalohany dia mila faritana ny kilasy. Ny famaritana mihitsy dia tsy manampy loharano na aiza na aiza. Ny kilasy dia voafaritra amin'ny manifests:

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

Aorian'izany dia azo ampiasaina ny kilasy:

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

Ohatra avy amin'ny asa teo aloha - andao hamindra ny fametrahana sy ny fanamafisana ny nginx ao anaty kilasy:

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
}

hiovaova

Ny kilasy avy amin'ny ohatra teo aloha dia tsy miovaova mihitsy satria mitondra ny configuration nginx mitovy foana. Andao hatao ny lalana mankany amin'ny fari-piadidiana, dia azo ampiasaina amin'ny fametrahana ny nginx ity kilasy ity miaraka amin'ny konfigurasi rehetra.

Azo atao izany mampiasa variables.

Fanamarihana: tsy azo ovaina ny variables ao amin'ny Puppet!

Fanampin'izany, ny fari-piainana iray dia tsy azo idirana afa-tsy aorian'ny nanambarana azy, raha tsy izany dia ny sandan'ny fari-piainana undef.

Ohatra amin'ny fiasana amin'ny variables:

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

Puppet manana anaran-tsehatra, ary ny variables, araka izany, dia manana faritra hita maso: Azo faritana amin'ny espace anarana samy hafa ny fari-piainana mitovy anarana. Rehefa mamaha ny sandan'ny fari-piainana iray, dia karohina ao amin'ny toeran'ny anarana ankehitriny ny fari-piadidiana, avy eo ao amin'ny espace namespace, sy ny sisa.

Ohatra amin'ny namespace:

  • maneran-tany - ny fari-piainana ivelan'ny kilasy na famaritana node mandeha any;
  • node namespace ao amin'ny famaritana node;
  • anaram-pianarana ao amin'ny famaritana kilasy.

Mba hialana amin'ny ambiguity rehefa miditra amin'ny fari-piainana iray dia azonao atao ny mamaritra ny espace anarana amin'ny anarana miovaova:

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

Andao hanaiky fa ny lalana mankany amin'ny konfigurasi nginx dia ao amin'ny fari-piadidiana $nginx_conf_source. Dia ho toy izao ny kilasy:

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
}

Na izany aza, ny ohatra nomena dia ratsy satria misy "fahalalana miafina" izay misy ao anatin'ny kilasy misy fari-piainana misy anarana toy izany sy izany. Tsara kokoa ny manao an'io fahalalana io amin'ny ankapobeny - ny kilasy dia afaka manana paramètre.

masontsivana kilasy dia variables ao amin'ny anaran'ny kilasy, voafaritra ao amin'ny lohatenin'ny kilasy izy ireo ary azo ampiasaina toy ny fari-pahaizana mahazatra ao amin'ny vatan'ny kilasy. Ny sandan'ny parameter dia voafaritra rehefa mampiasa ny kilasy ao amin'ny manifest.

Ny parameter dia azo apetraka amin'ny sanda default. Raha toa ka tsy manana sanda mahazatra ny parameter iray ary tsy napetraka ny sanda rehefa ampiasaina, dia hiteraka hadisoana fanangonana izany.

Andeha hojerentsika ny kilasy avy amin'ny ohatra etsy ambony ary ampio paramètre roa: ny voalohany, ilaina, dia ny lalana mankany amin'ny fanamafisana, ary ny faharoa, tsy voatery, dia ny anaran'ny fonosana misy nginx (ao amin'ny Debian, ohatra, misy fonosana. 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',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

Ao amin'ny saribakoly, ny variables dia soratana. Hanina karazana data maro. Ny karazana data dia matetika ampiasaina hanamarina ny soatoavin'ny mari-pamantarana nampitaina tamin'ny kilasy sy famaritana. Raha tsy mifanandrify amin'ilay karazana voatondro ny paramètre nandalo dia hisy hadisoana amin'ny fanangonana.

Ny karazana dia nosoratana avy hatrany alohan'ny anaran'ny parameter:

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

Kilasy: ampidiro ny anaram-pianarana vs kilasy{'classname':}

Ny kilasy tsirairay dia loharano iray karazana am-pianarana. Toy ny amin'ny karazana loharano hafa rehetra, tsy misy tranga roa amin'ny kilasy iray ihany amin'ny node iray ihany.

Raha manandrana manampy kilasy iray amin'ny node iray ianao indroa mampiasa class { 'classname':} (tsy misy fahasamihafana, miaraka amin'ny paramètre samy hafa na mitovy), hisy ny fahadisoana fanangonana. Fa raha mampiasa kilasy amin'ny fomba loharano ianao dia azonao atao ny mametraka mazava tsara ny masontsivana rehetra ao amin'ny manifest.

Na izany aza, raha mampiasa include, dia azo ampiana imbetsaka araka izay irina ny kilasy. Ny zava-misy dia izany include dia asa idempotent izay manamarina raha toa ka nampiana kilasy iray tao amin'ny lahatahiry. Raha tsy ao amin'ny lahatahiry ny kilasy dia ampiana izany ary raha efa misy izy dia tsy manao na inona na inona. Fa raha ny fampiasana include Tsy azonao atao ny mametraka masontsivana kilasy mandritra ny fanambaran'ny kilasy - tsy maintsy apetraka amin'ny loharano angon-drakitra ivelany ny masontsivana ilaina rehetra - Hiera na ENC. Hiresaka momba azy ireo isika ao amin’ny lahatsoratra manaraka.

Mamaritra

Araka ny voalaza tao amin'ny bloc teo aloha, ny kilasy iray ihany dia tsy afaka miseho amin'ny node mihoatra ny indray mandeha. Na izany aza, amin'ny toe-javatra sasany dia mila mampiasa andian-kaody mitovy amin'ny mari-pamantarana samihafa amin'ny node iray ianao. Raha lazaina amin'ny teny hafa dia ilaina ny karazana loharanon-karena ho azy manokana.

Ohatra, mba hametrahana ny module PHP dia manao izao manaraka izao ao amin'ny Avito izahay:

  1. Apetraho amin'ity module ity ny fonosana.
  2. Andao hamorona fisie fanamafisana ho an'ity module ity.
  3. Mamorona symlink amin'ny config ho an'ny php-fpm izahay.
  4. Mamorona symlink amin'ny config ho an'ny php cli izahay.

Amin'ny toe-javatra toy izany, ny famolavolana toy ny hamaritra (farito, karazana voafaritra, karazana loharano voafaritra). A Define dia mitovy amin'ny kilasy, saingy misy fahasamihafana: voalohany, ny tsirairay Define dia karazana loharano fa tsy loharano; faharoa, ny famaritana tsirairay dia manana paramètre implicit $title, izay alehan'ny anaran'ny loharano rehefa nambara. Tahaka ny amin'ny kilasy, ny famaritana dia tsy maintsy faritana aloha, ary avy eo dia azo ampiasaina.

Ohatra tsotsotra miaraka amin'ny module ho an'ny 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' }
}

Ny fomba tsotra indrindra hahitana ny fahadisoana fanambaràna duplicate dia ao amin'ny Define. Mitranga izany raha manana loharano misy anarana tsy miova ny famaritana iray, ary misy tranga roa na maromaro amin'io famaritana io amin'ny node sasany.

Mora ny miaro tena amin'izany: ny loharano rehetra ao anatin'ny famaritana dia tsy maintsy manana anarana arakaraka $title. Ny safidy iray dia ny fampidirana loharanon-karena amin'ny tranga tsotra indrindra, ampy ny mamindra ny loharano mahazatra amin'ny toe-javatra rehetra amin'ny famaritana ho any amin'ny kilasy misaraka ary mampiditra ity kilasy ity amin'ny famaritana - asa; include idempotent.

Misy fomba hafa hanatrarana ny idempotency rehefa manampy loharanon-karena, dia ny fampiasana asa defined и ensure_resources, fa holazaiko aminao izany amin'ny fizarana manaraka.

Fiankinan-doha sy fampahafantarana ho an'ny kilasy sy famaritana

Ny kilasy sy ny famaritana dia manampy ireto fitsipika manaraka ireto amin'ny fitantanana ny fiankinan-doha sy ny fampahafantarana:

  • Ny fiankinan-doha amin'ny kilasy / famaritana dia manampy ny fiankinan-doha amin'ny loharano rehetra ao amin'ny kilasy / mamaritra;
  • ny class/define fiankinan-doha dia manampy ny fiankinan-doha amin'ny kilasy rehetra/faritana loharano;
  • class/define fampahafantarana mampahafantatra ny loharanon-karena rehetra ao amin'ny kilasy/faritra;
  • class/define famandrihana dia misoratra anarana amin'ny loharano rehetra ao amin'ny kilasy/faritra.

Fanambarana misy fepetra sy mpifidy

Documentation eto.

if

Tsotra izany eto:

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

raha tsy

raha tsy hoe raha mivadika: ny bloc of code dia hotanterahina raha diso ilay fiteny.

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

raharaha

Tsy misy zavatra sarotra koa eto. Azonao atao ny mampiasa soatoavina mahazatra (tady, isa, sns.), fomba fiteny mahazatra, ary karazana data ho sanda.

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

Selectors

Ny selector dia fananganana fiteny mitovy amin'ny case, fa tsy manatanteraka andian-kaody, dia mamerina sanda iray.

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

Modules

Rehefa kely ny fandrindrana dia azo tehirizina mora foana ao anaty manifest iray. Saingy arakaraky ny hamaritana bebe kokoa, ny kilasy sy ny node ao amin'ny manifeste, dia mitombo izy io, ary manjary sarotra ny miasa.

Fanampin'izany, misy ny olana amin'ny fampiasana indray ny kaody - rehefa ao anaty manifest iray ny kaody rehetra dia sarotra ny mizara ity code ity amin'ny hafa. Mba hamahana ireo olana roa ireo dia manana sampana antsoina hoe modules ny Puppet.

Modules - ireo dia andiana kilasy, famaritana ary saribakoly hafa napetraka ao anaty lahatahiry misaraka. Raha lazaina amin'ny teny hafa, ny module dia singa mahaleo tena amin'ny lojika saribakoly. Ohatra, mety misy môdely miasa amin'ny nginx, ary misy ny zavatra ilaina sy ny ilaina mba hiasa amin'ny nginx, na mety misy ny module miasa amin'ny PHP, sy ny sisa.

Ny modules dia misy versioned, ary ny fiankinan'ny modules amin'ny tsirairay dia tohanana ihany koa. Misy tahiry misokatra amin'ny modules - Puppet Forge.

Ao amin'ny mpizara saribakoly, ny modules dia hita ao amin'ny subdirectory modules amin'ny lahatahiry fototra. Ao anatin'ny module tsirairay dia misy rafitra lahatahiry manara-penitra - manifests, rakitra, templates, lib, sy ny sisa.

Ny firafitry ny rakitra ao anaty module

Ny fototry ny module dia mety ahitana ireto lahatahiry manaraka ireto miaraka amin'ny anarana mamaritra:

  • manifests - misy manifesto
  • files - misy rakitra
  • templates - misy modely
  • lib - misy kaody Ruby

Tsy lisitra feno ny lahatahiry sy ny rakitra ity, fa ampy ho an'ity lahatsoratra ity amin'izao fotoana izao.

Anarana loharano sy anaran'ny rakitra ao amin'ny module

Documentation eto.

Ny loharanon-karena (kilasy, famaritana) ao amin'ny maody iray dia tsy azo omena anarana izay tianao. Fanampin'izany, misy fifampiresahana mivantana eo amin'ny anaran'ny loharano iray sy ny anaran'ny rakitra izay hikarohan'ny Puppet ny famaritana an'io loharano io. Raha mandika ny fitsipika nomena ianao, dia tsy hahita ny famaritana loharano fotsiny ny Puppet, ary hahazo fahadisoana amin'ny fanangonana ianao.

Tsotra ny fitsipika:

  • Ny loharano rehetra ao amin'ny module dia tsy maintsy ao amin'ny anaran'ny module. Raha antsoina ny module foo, dia tokony hotononina ny loharano rehetra ao anatiny foo::<anything>, na fotsiny foo.
  • Ny loharano misy ny anaran'ny maody dia tsy maintsy ao anaty rakitra init.pp.
  • Ho an'ny loharano hafa dia toy izao manaraka izao ny drafitry ny anaran'ny rakitra:
    • ariana ny tovana misy ny anaran'ny mody
    • ny zana-tsipìka roa, raha misy, dia soloina tetezana
    • asiana fanitarana .pp

Hampiseho ohatra aho. Aleo atao hoe manoratra module aho nginx. Ahitana ireto loharano manaraka ireto:

  • класс nginx voalaza ao amin'ny fanambarana init.pp;
  • класс nginx::service voalaza ao amin'ny fanambarana service.pp;
  • hamaritra nginx::server voalaza ao amin'ny fanambarana server.pp;
  • hamaritra nginx::server::location voalaza ao amin'ny fanambarana server/location.pp.

Templates

Azo antoka fa fantatrao ny atao hoe môdely; Avelako anefa izany sao sanatria rohy mankany amin'ny Wikipedia.

Ahoana ny fampiasana môdely: Ny dikan'ny môdely dia azo itarina amin'ny fampiasana asa iray template, izay mandalo ny lalana mankany amin'ny môdely. Ho an'ny loharano toy ny rakitra ampiasaina miaraka amin'ny parameter content. Ohatra, toy izao:

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

Jereo ny lalana <modulename>/<filename> midika hoe rakitra <rootdir>/modules/<modulename>/templates/<filename>.

Ankoatra izany, misy ny asa inline_template - mandray ny lahatsoratra môdely ho fampidirana, fa tsy ny anaran'ny rakitra.

Ao anatin'ny maodely, azonao atao ny mampiasa ny fari-piadidiana saribakoly rehetra amin'ny sehatra ankehitriny.

Saribakoly manohana modely amin'ny endrika ERB sy EPP:

Fohy momba ny ERB

Rafitra fanaraha-maso:

  • <%= ВЫРАЖЕНИЕ %> - ampidiro ny sandan'ny teny
  • <% ВЫРАЖЕНИЕ %> - kajy ny sandan'ny fitenenana (tsy ampidirina). Ny fanambarana misy fepetra (raha) sy ny tadivavarana (samy) dia mandeha eto.
  • <%# КОММЕНТАРИЙ %>

Ny fanehoana ao amin'ny ERB dia voasoratra amin'ny Ruby (ERB dia tena Embedded Ruby).

Mba hidirana amin'ny variables avy amin'ny manifest dia mila manampy ianao @ amin'ny anarana miovaova. Mba hanesorana ny fiatoana andalana izay miseho aorian'ny fananganana fanaraha-maso dia mila mampiasa marika famaranana ianao -%>.

Ohatra amin'ny fampiasana ny môdely

Andao atao hoe manoratra môdô hifehy ny ZooKeeper aho. Ny kilasy tompon'andraikitra amin'ny famoronana ny config dia toa izao:

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

Ary ny môdely mifanaraka aminy zoo.cfg.erb - Noho izany:

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

Ny zava-misy sy ny Variable anatiny

Matetika ny ampahany manokana amin'ny fanamafisana dia miankina amin'ny zava-mitranga amin'izao fotoana izao amin'ny node. Ohatra, miankina amin'ny famotsorana an'i Debian, mila mametraka dikan-teny iray na hafa amin'ny fonosana ianao. Azonao atao ny manara-maso izany rehetra izany amin'ny tananao, mamerina manoratra ireo fisehoana raha miova ny nodes. Saingy tsy fomba matotra izany;

Mba hahazoana vaovao momba ny nodes, Puppet dia manana rafitra antsoina hoe zava-misy. Facts - izany dia fampahalalana momba ny node, azo alaina amin'ny fisehoana amin'ny endriky ny fari-pahaizana mahazatra ao amin'ny habakabaka manerantany. Ohatra, ny anaran'ny mpampiantrano, ny dikan'ny rafitra fiasana, ny rafitra processeur, ny lisitry ny mpampiasa, ny lisitry ny fifandraisana amin'ny tambajotra sy ny adiresiny, ary ny maro hafa. Ny zava-misy dia hita ao amin'ny manifests sy ny môdely toy ny variables mahazatra.

Ohatra iray amin'ny fiasana amin'ny zava-misy:

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

Raha lazaina amin'ny fomba ofisialy, ny zava-misy dia manana anarana (tady) sy sandany (misy karazany isan-karazany: tady, array, rakibolana). Hanina fitambaran'ny zava-misy ao anatiny. Azonao atao koa ny manoratra ny anao manokana. Famaritana ireo mpanangona zava-misy toy ny fiasa ao amin'ny Ruby, na ahoana rakitra azo tanterahana. Azo aseho amin'ny endrika ihany koa ny zava-misy rakitra lahatsoratra misy angona amin'ny nodes.

Mandritra ny fampandehanan-draharaha, ny mpiasan'ny saribakoly voalohany dia mandika ny mpanangona zava-misy rehetra azo alaina avy amin'ny pappetserver mankany amin'ny node, ary avy eo dia manomboka azy ireo ary mandefa ny zava-misy voaangona any amin'ny server; Aorian'izany dia manomboka manangona ny katalaogy ny mpizara.

Ny zava-misy amin'ny endrika rakitra azo tanterahana

Ny zava-misy toy izany dia apetraka amin'ny modules ao amin'ny lahatahiry facts.d. Mazava ho azy fa tsy maintsy executable ny rakitra. Rehefa mihazakazaka izy ireo dia tsy maintsy mamoaka vaovao amin'ny vokatra mahazatra amin'ny endrika YAML na key=value.

Aza adino fa ny zava-misy dia mihatra amin'ny nodes rehetra izay fehezin'ny mpizara poppet izay ametrahana ny maody. Noho izany, ao amin'ny script, mitandrema mba hanamarina fa ny rafitra dia manana ny programa sy ny rakitra rehetra ilaina amin'ny fiasanao.

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

Ruby zava-misy

Ny zava-misy toy izany dia apetraka amin'ny modules ao amin'ny lahatahiry 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

Text facts

Ny zava-misy toy izany dia apetraka amin'ny nodes ao amin'ny lahatahiry /etc/facter/facts.d amin'ny saribakoly taloha na /etc/puppetlabs/facts.d amin'ny saribakoly vaovao.

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

Mandeha amin'ny zava-misy

Misy fomba roa hanatonana ny zava-misy:

  • amin’ny alalan’ny rakibolana $facts: $facts['fqdn'];
  • mampiasa ny anarana zava-misy ho toy ny anarana miovaova: $fqdn.

Tsara raha mampiasa rakibolana $facts, na tsara kokoa aza, manondro ny espace anarana manerantany ($::facts).

Ity ny fizarana mifandraika amin'ny antontan-taratasy.

Variables voaorina

Ankoatra ny zava-misy dia misy ihany koa variables sasany, hita ao amin'ny espace anaram-pirenena.

  • zava-misy azo itokisana — Variable izay nalaina avy amin'ny taratasy fanamarinana ny mpanjifa (satria matetika no avoaka amin'ny server poppet ny taratasy fanamarinana, dia tsy afaka maka sy manova ny mari-pankasitrahana fotsiny ny mpandraharaha, noho izany dia “atokisana” ireo fari-pitsipika): ny anaran'ny taratasy fanamarinana, ny anaran'ny mpampiantrano sy sehatra, fanitarana avy amin'ny taratasy fanamarinana.
  • zava-misy amin'ny mpizara —variable mifandraika amin'ny fampahalalana momba ny mpizara—dikan-teny, anarana, adiresy IP mpizara, tontolo iainana.
  • zava-misy mpandraharaha — variables ampiana mivantana avy amin'ny saribakoly-agent, fa tsy amin'ny zava-misy — anaran'ny taratasy fanamarinana, versione agent, version saribakoly.
  • master variables - Variable Pappetmaster (sic!). Mitovy amin'ny in zava-misy amin'ny mpizara, miampy ny sandan'ny paramètre configuration dia misy.
  • variables compiler — Variable compiler izay tsy mitovy amin'ny sehatra tsirairay: ny anaran'ny module ankehitriny sy ny anaran'ny module izay nidirana ny zavatra ankehitriny. Azo ampiasaina izy ireo, ohatra, mba hanamarinana fa tsy ampiasaina mivantana avy amin'ny maody hafa ny kilasinao manokana.

Fanampiny 1: ahoana ny fomba fampandehanana sy ny debug an'izany rehetra izany?

Ny lahatsoratra dia nanana ohatra maro momba ny kaody saribakoly, saingy tsy nilaza taminay mihitsy ny fomba fampandehanana an'io fehezan-dalàna io. Eny, manitsy ny tenako aho.

Ampy ny mpandraharaha iray hampandehanana saribakoly, fa amin'ny ankamaroan'ny tranga dia mila mpizara ihany koa ianao.

mpandraharaha

Farafaharatsiny hatramin'ny version 5, packages puppet-agent from tahiry ofisialy Puppetlabs misy ny fiankinan-doha rehetra (robina sy ny vatosoa mifanitsy aminy), ka tsy misy fahasarotana amin'ny fametrahana (miresaka momba ny fizarana mifototra amin'ny Debian aho - tsy mampiasa fizarana mifototra amin'ny RPM izahay).

Amin'ny tranga tsotra indrindra, raha hampiasa ny fanamafisana saribakoly, dia ampy ny manomboka ny mpandraharaha amin'ny fomba tsy misy mpizara: raha toa ka adika amin'ny node ny kaody saribakoly, manomboka 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

Tsara kokoa, mazava ho azy, ny manangana ny mpizara sy ny mampandeha mpiasa amin'ny nodes amin'ny mode daemon - avy eo indray mandeha isaky ny antsasak'adiny dia hampihatra ny fanitsiana alaina avy amin'ny mpizara izy ireo.

Azonao atao ny maka tahaka ny maodely fanosehana ny asa - mandehana any amin'ny node tianao ary manomboka sudo puppet agent -t. ANDININ- -t (--test) raha ny marina dia misy safidy maromaro azo alefa tsirairay. Ireto safidy ireto dia ahitana ireto manaraka ireto:

  • aza mihazakazaka amin'ny daemon mode (amin'ny alàlan'ny default dia manomboka amin'ny mode daemon ny agent);
  • nakatona rehefa avy nampihatra ny katalaogy (amin'ny alàlan'ny default, ny mpiasa dia hanohy hiasa ary hampihatra ny fanamafisana indray mandeha isaky ny antsasak'adiny);
  • manorata diarin'asa amin'ny antsipiriany;
  • asehoy ny fiovana amin'ny rakitra.

Ny mpiasa dia manana fomba fiasa tsy misy fiovana - azonao ampiasaina izany rehefa tsy azonao antoka fa nanoratra ny fanitsiana marina ianao ary te-hijery hoe inona marina no hovain'ilay mpiasa mandritra ny fandidiana. Ity fomba ity dia alefan'ny paramètre --noop amin'ny andalana baiko: sudo puppet agent -t --noop.

Ankoatr'izay, azonao atao ny mamela ny log debug an'ny asa - ao anatin'izany ny saribakoly dia manoratra momba ny hetsika rehetra ataony: momba ny loharanon-karena izay karakarainy amin'izao fotoana izao, momba ny mari-pamantarana an'ity loharano ity, momba ny programa avoakany. Mazava ho azy fa parameter izany --debug.

mpizara

Tsy hojereko ny fametrahana feno ny pappetserver sy ny fametrahana kaody ho azy ato amin'ity lahatsoratra ity dia hilaza fotsiny aho fa ivelan'ny boaty dia misy dikan-teny feno amin'ny server izay tsy mitaky fanamafisam-peo fanampiny mba hiasa miaraka amin'ny isa kely; nodes (milaza, hatramin'ny zato). Ny isan'ny nodes bebe kokoa dia mitaky fanerena - amin'ny alàlan'ny default, ny puppetserver dia manomboka mpiasa tsy mihoatra ny efatra, ho an'ny fampisehoana lehibe kokoa dia mila mampitombo ny isany ianao ary aza adino ny mampitombo ny fetran'ny fitadidiana, raha tsy izany dia hanangona fako ny mpizara matetika.

Fametrahana kaody - raha mila izany haingana sy mora ianao dia jereo (amin'ny r10k)[https://github.com/puppetlabs/r10k], ho an'ny fametrahana kely dia tokony ho ampy.

Fanampiny 2: Torolàlana momba ny fanoratana

  1. Apetraho ao anaty kilasy sy famaritana ny lojika rehetra.
  2. Tazony amin'ny modules ny kilasy sy famaritana, fa tsy amin'ny fanehoana mamaritra ny nodes.
  3. Ampiasao ny zava-misy.
  4. Aza manao ifs mifototra amin'ny anaran'ny mpampiantrano.
  5. Aza misalasala manampy masontsivana ho an'ny kilasy sy famaritana - tsara kokoa noho ny lojika implicit miafina ao amin'ny vatan'ny class/define.

Hazavaiko ao amin'ny lahatsoratra manaraka hoe nahoana aho no manoro hevitra anao hanao izany.

famaranana

Andeha hofaranana amin’ny fampidirana. Amin'ny lahatsoratra manaraka dia hilaza aminao momba ny Hiera, ENC ary PuppetDB aho.

Ireo mpampiasa voasoratra anarana ihany no afaka mandray anjara amin'ny fanadihadiana. HiditraPlease.

Raha ny marina, misy fitaovana maro kokoa - afaka manoratra lahatsoratra momba ireto lohahevitra manaraka ireto aho, mifidy izay tianao hovakiana:

  • 59,1%Fanamboarana saribakoly efa mandroso - diky amin'ny ambaratonga manaraka: tadivavarana, fametahana sari-tany ary fanehoana lambda hafa, mpanangona loharanon-karena, loharano aondrana ary fifandraisana iraisan'ny mpampiantrano amin'ny alalan'ny saribakoly, marika, mpamatsy, karazana data abstract.13
  • 31,8%"Admin'ny reniko aho" na ny fomba nanaovan'ny Avito namana tamin'ny mpizara poppet maromaro amin'ny dikan-teny samihafa, ary, raha ny fitsipika, ny ampahany amin'ny fitantanana ny mpizara poppet.7
  • 81,8%Ahoana ny fanoratana fehezan-dalàna saribakoly: fitaovana, antontan-taratasy, fitsapana, CI/CD.18

Mpampiasa 22 no nifidy. Mpampiasa 9 no nifady.

Source: www.habr.com