Folasaga i Papeti

Puppet o se faiga fa'atonu. E faʻaaogaina e aumai ai au i le tulaga manaʻomia ma tausia lenei setete.

Ua silia nei ma le lima tausaga o ou galue ma Puppet. O lenei tusitusiga o se faʻaliliuga ma toe faʻatulagaina tuʻufaʻatasiga o manatu autu mai faʻamaumauga aloaia, lea e mafai ai e tagata amata ona vave malamalama i le uiga o le Puppet.

Folasaga i Papeti

Faamatalaga autu

O le faiga fa'aoga a le Puppet o le client-server, e ui lava e lagolagoina ai le fa'agaioiga leai se server ma fa'atapula'aina galuega.

O se faʻataʻitaʻiga faʻataʻitaʻiga o loʻo faʻaaogaina: e le mafai, tasi i le afa itula, faʻafesoʻotaʻi e tagata faʻatau le server mo se faʻatulagaga ma faʻaoga. Afai na e galue ma Ansible, ona latou faʻaogaina lea o se faʻataʻitaʻiga faʻataʻitaʻiga ese: e amataina e le pule le faʻagasologa o le faʻaogaina o le faʻatulagaga, o le a le faʻaaogaina e le au faʻatau se mea.

I le taimi o feso'ota'iga feso'ota'iga, e fa'aogaina le fa'ailoga TLS e lua: o le server ma le tagata fa'atau e iai a latou lava ki patino ma tusi fa'atatau. E masani lava ona tuʻuina atu e le 'auʻaunaga tusi faamaonia mo tagata faʻatau, ae i le mataupu faavae e mafai ona faʻaogaina se CA fafo.

Folasaga i fa'aaliga

I upu papeti i le server papeti fa'afeso'ota'i nodes (nodes). Ua tusia le faatulagaga mo nodes i manifestos i se gagana fa'apitoa polokalame - Puppet DSL.

Puppet DSL o se gagana fa'ailoa. O loʻo faʻamatalaina le tulaga manaʻomia o le node i le tulaga o faʻamatalaga o punaoa taʻitasi, mo se faʻataʻitaʻiga:

  • O loʻo iai le faila ma e iai mea faʻapitoa.
  • Ua fa'apipi'i le afifi.
  • Ua amata le auaunaga.

O punaoa e mafai ona fesoʻotaʻi faʻatasi:

  • E iai fa'alagolago, latou te a'afia ai le fa'atonuga o lo'o fa'aogaina ai punaoa.
    Mo se faʻataʻitaʻiga, "muamua faʻapipiʻi le afifi, ona faʻasaʻo lea o le faila faila, ona amata lea o le auaunaga."
  • E iai fa'amatalaga - afai ua suia se puna'oa, e tu'uina atu fa'amatalaga i puna'oa o lo'o lesitala i ai.
    Mo se faʻataʻitaʻiga, afai e suia le faila faʻapipiʻi, e mafai ona e toe amataina le auaunaga.

E le gata i lea, o le Puppet DSL o loʻo i ai galuega ma fesuiaiga, faʻapea foʻi ma faʻamatalaga faʻamaonia ma tagata filifilia. E lagolagoina fo'i faiga fa'atusa eseese - EPP ma ERB.

Papeti e tusia i le Ruby, o le tele o fausaga ma faaupuga e ave mai iina. Ruby faʻatagaina oe e faʻalautele le Puppet - faʻaopoopo faʻamatalaga faigata, ituaiga fou o punaoa, galuega.

A'o tamo'e le Puppet, o fa'aaliga mo node ta'itasi i luga o le 'au'aunaga e tu'ufa'atasia i totonu o se lisi. aufaʻatonu o se lisi o punaoa ma latou sootaga ina ua uma ona fuafuaina le tau o galuega tauave, fesuiaiga ma le faalauteleina o faamatalaga tuutuuga.

Syntax ma codestyle

O vaega nei o faʻamaumauga aloaia o le a fesoasoani ia te oe e malamalama ai i le syntax pe afai e le lava faʻataʻitaʻiga:

O se fa'ata'ita'iga lea o foliga o le fa'aaliga:

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

O fa'ailoga ma laina laina e le o se vaega mana'omia o le fa'aaliga, ae o lo'o i ai se fautuaga taiala sitaili. Aotelega:

  • E lua avanoa avanoa, e le fa'aaogaina ta'iala.
  • O fa'a'au fa'a'i'i e va'ava'a e se avanoa;
  • Koma i tua o parakalafa ta'itasi, e aofia ai le pito mulimuli. O fa'ailoga ta'itasi o lo'o i luga o se laina ese. E faia se tuusaunoaga mo le mataupu e aunoa ma ni tapulaʻa ma se tasi parakalafa: e mafai ona e tusi i luga o le laina e tasi ma aunoa ma se koma (ie. resource { 'title': } и resource { 'title': param => value }).
  • O aū i luga o tapulaʻa e tatau ona tutusa le tulaga.
  • O aū sootaga o punaoa o loʻo tusia i luma o latou.

Tulaga o faila ile pappetserver

Mo nisi faʻamatalaga, o le a ou faʻalauiloaina le manatu o le "root directory". O le root directory o le lisi lea o loʻo i ai le faʻatulagaga Puppet mo se node patino.

O le root directory e fesuisuiaʻi e faʻatatau i le faʻasologa o Papeti ma siosiomaga o loʻo faʻaaogaina. Si'osi'omaga o seti tuto'atasi o le fa'atulagaina o lo'o teuina i totonu o fa'amaumauga eseese. E masani ona faʻaaogaina faʻatasi ma le git, i le tulaga lea e faia ai siosiomaga mai lala git. E tusa ai, o node taitasi o loʻo i totonu o se tasi poʻo se isi siosiomaga. E mafai ona faʻatulagaina i luga o le node lava ia, poʻo le ENC, lea o le a ou talanoa i ai i le isi tusiga.

  • I le fa'asologa lona tolu ("Papeti tuai") o le fa'atonuga fa'avae sa /etc/puppet. O le fa'aogaina o si'osi'omaga e filifili - mo se fa'ata'ita'iga, matou te le fa'aogaina i le Papeti tuai. Afai e fa'aogaina si'osi'omaga, e masani lava ona teuina i totonu /etc/puppet/environments, o le root directory o le a avea ma directory environment. Afai e le fa'aogaina si'osi'omaga, o le a'a o le a avea ma fa'amaumauga autu.
  • Amata mai le fa'aliliuga lona fa ("Papeti fou"), o le fa'aogaina o si'osi'omaga na fa'atulafonoina, ma o le fa'atonuga fa'avae na si'i atu i /etc/puppetlabs/code. E tusa ai, o siosiomaga e teuina i totonu /etc/puppetlabs/code/environments, root directory o le siosiomaga directory.

E tatau ona i ai se subdirectory i le root directory manifests, o lo'o i ai se tasi pe sili atu fa'aaliga e fa'amatala ai nodes. E le gata i lea, e tatau ona i ai se subdirectory modules, o loʻo i ai modules. O le a ou taʻu atu ia te oe poʻo a modules o loʻo i ai i se taimi mulimuli ane. E le gata i lea, o le Papeti tuai e mafai foi ona i ai se subdirectory files, lea e iai faila eseese tatou te kopiina i nodes. I le Papeti fou, o faila uma e tuʻu i modules.

O faila Manifest e iai le faʻaopoopoga .pp.

O ni nai faataitaiga tau

Fa'amatalaga o le node ma punaoa i luga

I luga o le node server1.testdomain e tatau ona fai se faila /etc/issue ma le anotusi Debian GNU/Linux n l. O le faila e tatau ona umia e se tagata fa'aoga ma se vaega root, e tatau ona iai aia tatau 644.

Matou te tusia se faʻaaliga:

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

Sootaga i le va o punaoa i luga o se node

I luga o le node server2.testdomain nginx e tatau ona tamoʻe, galue ma se faʻatulagaga na saunia muamua.

Sei o tatou fa'avasega le fa'afitauli:

  • E manaʻomia ona faʻapipiʻi le afifi nginx.
  • E mana'omia le kopiina o faila fa'atulagaina mai le 'au'aunaga.
  • E tatau ona fa'agasolo le tautua nginx.
  • Afai e toe faʻafouina le faʻatulagaga, e tatau ona toe amataina le tautua.

Matou te tusia se faʻaaliga:

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

Mo lenei mea e galue, e te manaʻomia pe tusa o le nofoaga faila i luga o le papeti server:

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

Ituaiga Punaoa

O se lisi atoa o ituaiga punaoa lagolago e mafai ona maua iinei i totonu o fa'amaumauga, o iinei o le a ou faamatalaina ai ituaiga autu e lima, lea i laʻu faʻataʻitaʻiga e lava e foia ai le tele o faʻafitauli.

faila

Puleaina faila, directories, symlinks, o latou anotusi, ma aia tatau.

Tapulaa:

  • igoa punaoa - ala i le faila (filifiliga)
  • Ala - ala i le faila (pe a le o faʻamaonia i le igoa)
  • mautinoa - ituaiga faila:
    • absent - tape se faila
    • present - e tatau ona i ai se faila o soʻo se ituaiga (afai e leai se faila, o le a faia se faila masani)
    • file - faila masani
    • directory - lisi
    • link - symlink
  • lotomalie - faila i totonu (e talafeagai mo faila masani, e le mafai ona faʻaoga faʻatasi ma puna poʻo taulaʻi)
  • puna - o se fesoʻotaʻiga i le ala e te manaʻo e kopi ai mea o loʻo i totonu o le faila (e le mafai ona faʻaoga faʻatasi ma lotomalie poʻo taulaʻi). E mafai ona faʻamaonia o se URI ma se polokalame puppet: (ona fa'aaogaina lea o faila mai le server puppet), ma fa'atasi ai ma le polokalame http: (Ou te faʻamoemoe e manino le mea o le a tupu i lenei tulaga), ma e oʻo lava i le ata file: pe o se auala faʻapitoa e aunoa ma se fuafuaga (ona faʻaaogaina lea o le faila mai le FS faʻapitonuʻu i luga o le node)
  • taulaʻi - o fea e tatau ona faasino i ai le symlink (e le mafai ona faʻaoga faʻatasi ma lotomalie poʻo puna)
  • pule - le tagata fa'aoga e tatau ona umia le faila
  • vasega — le vaega e tatau ona iai le faila
  • faiga - fa'atagaga faila (e pei o se manoa)
  • toe fai - e mafai ai ona fa'agasolo fa'asologa o fa'amaumauga
  • faamama - fa'atagaina le tapeina o faila e le o fa'amatalaina i le Puppet
  • malosi - fa'atagaina le tapeina o fa'atonuga e le o fa'amatalaina i le Puppet

afī

Fa'apipi'i ma aveese afifi. Mafai ona taulimaina faʻamatalaga - toe faʻapipiʻi le afifi pe a faʻamaonia le parakalafa reinstall_on_refresh.

Tapulaa:

  • igoa punaoa - igoa o le afifi (filifiliga)
  • igoa - igoa o le afifi (pe a le o taʻua i le igoa)
  • kamupani e tuuina - pule o pusa e faʻaaoga
  • mautinoa - tulaga mana'omia o le afifi:
    • present, installed - so'o se lomiga fa'apipi'i
    • latest - fa'apipi'i lomiga fou
    • absent - tapeina (apt-get remove)
    • purged - tape faʻatasi ma faila faʻatulagaina (apt-get purge)
    • held - o lo'o loka le fa'asologa o afifi (apt-mark hold)
    • любая другая строка - ua faʻapipiʻiina le faʻamatalaga faʻapitoa
  • reinstall_on_refresh - afai true, ona maua lea o le faʻamatalaga o le a toe faʻapipiʻi le afifi. Fa'aoga mo fa'asoa fa'avae, lea e mana'omia ai le toe fausia o afifi pe a suia fa'amaufa'ailoga faufale. Fa'atonu false.

tautua

Puleaina auaunaga. Mafai ona fa'agasolo fa'amatalaga - toe amata le auaunaga.

Tapulaa:

  • igoa punaoa - tautua e pulea (filifiliga)
  • igoa - le 'au'aunaga e mana'omia ona fa'atautaia (pe a le fa'ama'oti i le igoa)
  • mautinoa — tulaga manaomia o le auaunaga:
    • running - fa'alauiloa
    • stopped - taofi
  • mafai ai ona — pulea le tomai e amata ai le auaunaga:
    • true - ua mafai le autorun (systemctl enable)
    • mask - fa'afoliga (systemctl mask)
    • false - ua le atoatoa le autorun (systemctl disable)
  • toe amata - fa'atonuga e toe amata le tautua
  • tulaga — poloaiga e siaki le tulaga o le auaunaga
  • toe amata - fa'ailoa mai pe lagolagoina e le Initia Initia le toe amataina. Afai false ma ua faamaoti mai le parakalafa toe amata - o le tau o lenei parakalafa o loʻo faʻaaogaina. Afai false ma le parakalafa toe amata e le o faʻamaonia - ua taofi le tautua ma amata ona toe amata (ae faʻaaoga e le systemd le poloaiga systemctl restart).
  • hasstatus — faailoa mai pe lagolagoina e le Initia Initia le poloaiga status. Afai false, ona faʻaaogaina lea o le tau o le parakalafa tulaga. Fa'atonu true.

exec

Fa'atonu fa'atonuga fafo. Afai e te le faʻamaotiina faʻamau foafoa, pe afai, seia vagana poʻo faafou, o le a fa'atonu le fa'atonuga i taimi uma e ta'avale ai le Papeti. Mafai ona fa'agasolo fa'amatalaga - fa'atino se fa'atonuga.

Tapulaa:

  • igoa punaoa - fa'atonuga e fa'atino (filifiliga)
  • faʻatonuga - le faʻatonuga e faʻatino (pe a le o faʻamaonia i le igoa)
  • Ala - auala e suʻe ai le faila faila
  • pe afai - afai o le poloaiga o loʻo faʻamaonia i lenei parakalafa e faʻamaeʻaina ma le zero return code, o le a faʻataunuʻuina le poloaiga autu
  • seia vagana - afai o le faʻatonuga o loʻo faʻamaonia i lenei parakalafa ua maeʻa i se numera e le-zero, o le a faʻataunuʻuina le poloaiga autu.
  • foafoa - afai e le o iai le faila o loʻo faʻamaonia i lenei parakalafa, o le a faʻataunuʻuina le poloaiga autu
  • faafou - afai true, ona faʻatonuina lea o le faʻatonuga pe a maua e lenei exec faʻamatalaga mai isi punaoa
  • cwd — directory lea e fai ai le poloaiga
  • tagata faʻaaogā - o le tagata faʻaoga e faʻatautaia le poloaiga
  • kamupani e tuuina - fa'afefea ona fai le fa'atonuga:
    • faʻaaliga - o se faiga tamaititi ua naʻo le faia, ia mautinoa e faʻamaonia Ala
    • atigi - o le faʻatonuga e faʻalauiloa i totonu o le atigi /bin/sh, e le mafai ona faʻamaonia Ala, e mafai ona e faʻaogaina le globbing, paipa ma isi faʻaoga atigi. E masani ona iloa otometi pe a iai ni mataitusi faapitoa (|, ;, &&, || ma faapena atu ai lava).

cron

Puleaina cronjobs.

Tapulaa:

  • igoa punaoa - na'o se ituaiga fa'ailoga
  • mautinoa - tulaga crownjob:
    • present - fatu pe a le o iai
    • absent - tape pe a iai
  • faʻatonuga - o le a le poloaiga e tamoe
  • siosiomaga - o fea siosiomaga e faʻatautaia ai le faʻatonuga (lisi o fesuiaiga o le siosiomaga ma o latou tau e ala i =)
  • tagata faʻaaogā - mai ai le tagata faʻaoga e faʻatautaia le poloaiga
  • minute, itula, aso o le vaiaso, masina, aso masina - le taimi e tamoe ai cron. Afai e le o fa'ailoa mai se tasi o nei uiga, o lona tau i le crontab o le *.

I le Papeti 6.0 cron peiseai aveese mai le pusa i puppetserver, o lea e leai ni faʻamaumauga i luga o le saite lautele. Ae o ia o lo'o i totonu o le pusa i le papeti-agent, o lea e leai se manaʻoga e faʻapipiʻi ese. E mafai ona e vaʻai i faʻamaumauga mo ia i fa'amaumauga mo le lona lima o lomiga o Papeti, po o luga ole GitHub.

E uiga i punaoa lautele

Manaoga mo le tulaga ese o punaoa

O le mea sese masani tatou te fetaiai o le Ta'utinoga fa'alua. E tupu lenei mea pe a lua pe sili atu punaoa o le ituaiga tutusa ma le igoa tutusa e aliali mai i totonu o le lisi.

O lea, o le a ou toe tusi atu: fa'aaliga mo le node tutusa e le tatau ona aofia ai punaoa o le ituaiga tutusa ma le igoa tutusa!

O nisi taimi e manaʻomia le faʻapipiʻiina o afifi ma le igoa tutusa, ae faʻatasi ai ma pule o pusa eseese. I lenei tulaga, e tatau ona e faʻaogaina le parakalafa nameia aloese mai le mea sese:

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

O isi ituaiga punaoa e iai filifiliga tutusa e fesoasoani e aloese ai mai le toe fa'aluaina − name у tautua, command у exec, ma faapena atu ai lava.

Metaparameters

O ituaiga puna'oa ta'itasi e iai ni vaega fa'apitoa, tusa lava po'o le a lona natura.

Lisi atoa o meta parameters i le pepa papeti.

Lisi pupuu:

  • manaʻomia - o lenei fa'ailoga e fa'ailoa mai ai po'o fea alagaoa e fa'alagolago i ai lenei punaoa.
  • aʻo leʻi - O lenei ta'iala e fa'amaoti mai po'o fea alagaoa e fa'alagolago i lenei punaoa.
  • lesitala — o lenei ta'otoga e fa'amaoti mai po'o fea alagaoa e maua ai fa'amatalaga.
  • logoina — O lenei ta'iala o lo'o fa'amaoti mai po'o fea punaoa e maua fa'amatalaga mai lenei punaoa.

O metaparameters uma o lo'o lisiina e talia a le tasi le so'oga puna'oa po'o le fa'asologa o so'oga i puipui sikuea.

So'oga i punaoa

O se so'oga o puna'oa e na'o le ta'ua o le puna'oa. E masani lava ona faʻaaogaina e faʻaalia ai faʻalagolago. O le fa'asinoina o se puna'oa e le o iai o le a mafua ai se mea sese o le tu'ufa'atasiga.

O le fa'asologa o le feso'ota'iga e fa'apea: ituaiga punaoa ma se mataitusi tetele (afai o le igoa o le igoa o lo'o i ai ni kolone lua, ona mataitusi tetele lea o vaega ta'itasi o le igoa i le va o kolone), ona fa'aigoaina lea o le igoa punaoa i puipui sikuea (o le mataupu o le igoa. e le suia!). E le tatau ona i ai ni avanoa; fa'amaufa'ailoga sikuea e tusia vave pe a uma le igoa o le ituaiga.

Faataitaiga:

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

Fa'alagolago ma fa'amatalaga

Fa'amaumauga iinei.

E pei ona taʻua muamua, o faʻalagolago faigofie i le va o punaoa o loʻo faʻasolosolo. I le auala, ia faʻaeteete pe a faʻaopoopo faʻalagolago - e mafai ona e fatuina faʻalagolago i le taamilosaga, lea o le a mafua ai se mea sese.

E le pei o fa'alagolago, o fa'amatalaga e le fealua'i. O tulafono nei e fa'atatau mo fa'amatalaga:

  • Afai e maua e le punaoa se faʻamatalaga, e faʻafouina. O gaioiga fa'afouga e fa'alagolago ile ituaiga punaoa − exec e fai le poloaiga, tautua toe amata le auaunaga, afī toe fa'apipi'i le afifi. Afai o le punaoa e leai se faʻamatalaga faʻamatalaga faʻamalamalamaina, e leai se mea e tupu.
  • I le taimi e tasi o le Papeti, e le sili atu ma le tasi le faʻafouina o punaoa. E mafai lenei mea ona o fa'amatalaga e aofia ai fa'alagolago ma le kalafi fa'alagolago e leai ni ta'amilosaga.
  • Afai e suia e Papeti le tulaga o se punaoa, e auina atu e le punaoa faʻamatalaga i punaoa uma o loʻo faʻapipiʻiina i ai.
  • Afai e fa'afou se punaoa, e tu'uina atu fa'amatalaga i puna'oa uma o lo'o fa'amauina i ai.

Taulimaina ta'iala e le'i fa'ailoaina

I le avea ai o se tulafono, afai e le o iai se tau fa'aletonu i nisi o puna'oa ma e le o fa'amaoti mai lenei fa'ailoga i le fa'aaliga, ona le suia lea e le Puppet lenei meatotino mo le punaoa talafeagai i le node. Mo se faʻataʻitaʻiga, afai o se punaoa o le ituaiga faila fa'amauina e le'o fa'amaonia owner, ona le suia lea e Puppet le tagata e ona le faila talafeagai.

Folasaga i vasega, fesuiaiga ma fa'amatalaga

Fa'apea e tele a tatou nodes e tutusa le vaega o le fa'atulagaga, ae e iai fo'i eseesega - a leai e mafai ona tatou fa'amatalaina uma i le poloka e tasi node {}. Ioe, e mafai ona e kopiina vaega tutusa o le faʻatulagaga, ae i se tulaga lautele o se fofo leaga lea - o le faʻatulagaina e tupu, ma afai e te suia le vaega lautele o le faʻatulagaga, e tatau ona e faʻasaʻo le mea lava e tasi i le tele o nofoaga. I le taimi lava e tasi, e faigofie ona faia se mea sese, ma i se tulaga lautele, o le DRY (aua le toe faia oe lava) mataupu faavae na fatuina mo se mafuaaga.

Ina ia foia lenei faafitauli o loo i ai se mamanu faapea класс.

Vasega

Vasega o se poloka igoa o le poppet code. E mana'omia ni vasega e toe fa'aoga ai le code.

Muamua e tatau ona faamatalaina le vasega. O le faʻamatalaga lava ia e le faʻaopoopoina soʻo se punaoa i soʻo se mea. O le vasega o loʻo faʻamatalaina i faʻaaliga:

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

A maeʻa lenei mea e mafai ona faʻaaogaina le vasega:

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

O se faʻataʻitaʻiga mai le galuega muamua - seʻi o tatou faʻagasolo le faʻapipiʻiina ma le faʻatulagaina o le nginx i totonu o se vasega:

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
}

Fesuiaʻiga

O le vasega mai le faʻataʻitaʻiga muamua e le mafai ona fetuutuunai aua e aumaia i taimi uma le faatulagaga nginx tutusa. Sei o tatou faia le ala i le fesuiaiga o fetuunaiga, ona mafai lea ona faʻaogaina lenei vasega e faʻapipiʻi ai le nginx ma soʻo se faʻatulagaga.

E mafai ona fai fa'aaogaina fesuiaiga.

Fa'alogo: o fesuiaiga i Papeti e le mafai ona suia!

E le gata i lea, o se fesuiaiga e faatoa mafai ona maua pe a uma ona faʻaalia, a leai o le tau o le fesuiaiga o le a undef.

Fa'ata'ita'iga o le galue ma fesuiaiga:

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

Ua iai le papeti igoa avanoa, ma o fesuiaiga, e tusa ai, ei ai vaega o le va'aia: O se fesuiaiga e tutusa le igoa e mafai ona faauigaina i igoa eseese. Pe a foia le tau o se fesuiaiga, e suʻe le fesuiaiga i le igoa o loʻo i ai nei, sosoo ai ma le igoa faʻapipiʻi, ma isi.

Fa'ata'ita'iga ole igoa ole igoa:

  • lalolagi - fesuiaiga i fafo atu o le vasega poʻo faʻamatalaga node alu i ai;
  • node namespace i le fa'amatalaga node;
  • igoa ole vasega ile fa'amatalaga ole vasega.

Ina ia aloese mai le le mautonu pe a oʻo i se fesuiaiga, e mafai ona e faʻamaonia le igoa ole igoa ile igoa fesuiaʻi:

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

Sei o tatou malilie o le ala i le nginx configuration o loʻo taoto i le fesuiaiga $nginx_conf_source. Ona foliga lea o le vasega:

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
}

Ae ui i lea, o le faʻataʻitaʻiga ua tuʻuina atu e leaga ona o loʻo i ai se "malamalama faalilolilo" o se mea i totonu o le vasega o se fesuiaiga e iai se igoa faapena ma se igoa e faʻaaogaina. E sili atu ona sa'o le fa'alauteleina o lenei malamalama - e mafai e vasega ona iai ni tapula'a.

Vasega tapula'a o ni fesuiaiga i le igoa o le vasega, o loʻo faʻamaonia i le ulutala vasega ma e mafai ona faʻaaogaina e pei o fesuiaiga masani i le tino o le vasega. Fa'amauina tulaga taua pe a fa'aogaina le vasega i le fa'aaliga.

E mafai ona seti le parakalafa i se tau le aoga. Afai e leai se tau fa'aletonu o se parakalafa ma e le o setiina le tau pe a fa'aaogaina, o le a mafua ai se mea sese o le tu'ufa'atasiga.

Sei o tatou faʻavasegaina le vasega mai le faʻataʻitaʻiga o loʻo i luga ma faʻaopoopo i ai ni taʻaloga se lua: muamua, manaʻomia, o le ala i le faʻatulagaga, ma le lona lua, filifili, o le igoa o le afifi ma nginx (i Debian, mo se faʻataʻitaʻiga, o loʻo i ai afifi. 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',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

I le Puppet, e fa'aigoa ai fesuiaiga. 'A'ai tele ituaiga fa'amaumauga. O ituaiga faʻamatalaga e masani ona faʻaaogaina e faʻamaonia ai tau faʻamaufaʻailoga ua pasi i vasega ma faʻamatalaga. Afai e le fetaui le parakalafa ua pasia ma le ituaiga ua faamaoti, o le a tupu se mea sese o le tuufaatasia.

O le ituaiga e tusia i luma o le igoa parakalafa:

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

Vasega: aofia ai le igoa vasega vs vasega{'classname':}

O vasega taitasi o se punaoa o ituaiga vasega. E pei o isi ituaiga punaoa, e le mafai ona lua faʻataʻitaʻiga o le vasega lava e tasi i le node e tasi.

Afai e te taumafai e faʻaopoopo se vasega i le node e tasi faʻalua faʻaaoga class { 'classname':} (leai se eseesega, faʻatasi ai ma faʻasologa eseese pe tutusa), o le ai ai se mea sese faʻapipiʻi. Ae afai e te faʻaogaina se vasega i le sitaili punaoa, e mafai ona e vave faʻatulagaina ona faʻamaufaʻailoga uma i le faʻaaliga.

Ae peitai, afai e te faʻaaogaina include, ona mafai lea ona faaopoopo le vasega i le tele o taimi e manao ai. O le mea moni e faapea include ose galuega fa'apitoa e siaki pe ua fa'aopoopo se vasega i le lisi. Afai e le o iai le vasega i totonu o le lisi, e fa'aopoopoina, ma afai ua i ai, e leai se mea. Ae i le tulaga o le faʻaaogaina include E le mafai ona e setiina ta'iala a le vasega ile ta'utinoga a le vasega - e tatau ona tu'u uma fa'amaufa'ailoga mana'omia ile puna fa'amatalaga mai fafo - Hiera po'o le ENC. Ka sau‵tala tatou e uiga ki a latou i te suā mataupu.

Fa'amatala

E pei ona taʻua i le poloka talu ai, o le vasega lava e tasi e le mafai ona i ai i luga o se node e sili atu ma le tasi. Ae ui i lea, i nisi tulaga e te manaʻomia le mafai ona faʻaogaina le poloka tutusa o le code faʻatasi ai ma faʻasologa eseese i luga o le node tutusa. I se isi faaupuga, o loʻo i ai se manaʻoga mo se ituaiga punaoa lava ia.

Mo se faʻataʻitaʻiga, ina ia faʻapipiʻi le PHP module, matou te faia mea nei i Avito:

  1. Fa'apipi'i le afifi i lenei module.
  2. Se'i o tatou faia se faila fa'atulagaina mo lenei module.
  3. Matou te fatuina se symlink i le config mo php-fpm.
  4. Matou te fatuina se symlink i le config mo php cli.

I ia tulaga, o se mamanu e pei o fa'amatala (fa'amatala, fa'amalamalamaina le ituaiga, fa'amalamalamaina ituaiga punaoa). A Define e talitutusa ma se vasega, ae e iai eseesega: muamua, o Define taitasi o se ituaiga punaoa, ae le o se punaoa; lona lua, o fa'auigaga ta'itasi o lo'o i ai se fa'ailoga manino $title, i le mea e alu i ai le igoa punaoa pe a faʻaalia. E pei lava o le tulaga o vasega, e tatau ona faʻamatalaina muamua se faʻamatalaga, a maeʻa ona faʻaaogaina.

O se faʻataʻitaʻiga faigofie ma se module mo 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' }
}

O le auala pito sili ona faigofie e pu'e ai le Fa'amatalaga Fa'alua sese o lo'o i totonu Define. E tupu lenei mea pe afai o se faʻamatalaga o loʻo i ai se punaoa ma se igoa tumau, ma e lua pe sili atu faʻamatalaga o lenei faʻamatalaga i luga o nisi node.

E faigofie ona puipuia oe mai lenei mea: o punaoa uma i totonu o le faʻamatalaga e tatau ona i ai se igoa e faʻalagolago i ai $title. O se isi mea o le faʻaopoopoina o punaoa i le tulaga sili ona faigofie, ua lava le faʻanofoina o punaoa masani i taimi uma o le faʻamatalaga i se vasega ese ma aofia ai lenei vasega i le faʻamatalaga - galuega; include fa'aletonu.

E i ai isi auala e ausia ai le le atoatoa pe a faʻaopoopo punaoa, e pei o le faʻaaogaina o galuega defined и ensure_resources, ae o le a ou taʻu atu ia te oe i le isi vaega.

Fa'alagolago ma fa'amatalaga mo vasega ma fa'amatalaga

Vasega ma fa'amatalaga fa'aopoopo tulafono nei i le fa'afoeina o fa'alagolago ma fa'amatalaga:

  • fa'alagolago ile vasega/fa'amatala fa'aopoopo fa'alagolago ile punaoa uma ole vasega/fa'amatala;
  • se vasega/fa'amatala fa'alagolago fa'aopoopo fa'alagolago ile vasega uma/fa'amatala punaoa;
  • vasega/fa'amatala fa'asilasilaga e logoina uma punaoa a le vasega/fa'amatala;
  • vasega/fa'amatala le lesitala e lesitala i punaoa uma o le vasega/fa'amatala.

Fa'amatalaga aiaiga ma tagata filifilia

Fa'amaumauga iinei.

if

E faigofie iinei:

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

seia vagana

se'i vagana o se pe afai i tua: o le poloka o le code o le a faia pe afai e sese le faaupuga.

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

tulaga

E leai foi se mea faigata iinei. E mafai ona e faʻaogaina tulaga masani ( manoa, numera, ma isi), faʻamatalaga masani, ma ituaiga faʻamaumauga e fai ma tau.

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

Tagata filifilia

O le tagata filifilia o se gagana e fau tutusa ma case, ae nai lo le faʻatinoina o se poloka o code, e toe faʻafoʻi mai ai se tau.

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

Modules

Pe a laʻititi le faʻatulagaga, e faigofie ona teuina i se tasi faʻaaliga. Ae o le tele o faʻasalalauga tatou te faʻamatalaina, o le tele o vasega ma nodes o loʻo i ai i le faʻaaliga, e tupu aʻe, ma e le faigofie ona galue.

E le gata i lea, o loʻo i ai le faʻafitauli o le toe faʻaaogaina o le code - a oʻo uma le code i le tasi faʻaaliga, e faigata ona faʻasoa lenei code i isi. Ina ia foia nei faʻafitauli e lua, o le Puppet e iai se faʻalapotopotoga e taʻua o modules.

Modules - o seti nei o vasega, fa'auigaga ma isi fa'alapotopotoga Papeti tu'u i totonu o se fa'atonuga ese'ese. I se isi faaupuga, o le module o se vaega tuto'atasi o le Puppet logic. Mo se faʻataʻitaʻiga, atonu o loʻo i ai se module mo le galue ma le nginx, ma o le a aofia ai mea ma naʻo mea e manaʻomia e galue ai ma nginx, pe ono iai se module mo le galue ma PHP, ma isi.

O lo'o fa'aliliuina, ma o lo'o fa'alagolago fo'i fa'alagolago le tasi i le isi. O loʻo i ai se faʻamaumauga tatala o modules - Papeti Forge.

I luga o le 'au'aunaga papeti, o lo'o i totonu o le fa'atonuga o modules o le root directory. I totonu o module taʻitasi o loʻo i ai se faʻataʻitaʻiga masani - faʻaaliga, faila, faʻataʻitaʻiga, lib, ma isi.

Faiga faila i totonu o se module

O le a'a o le module e mafai ona i ai tusitaiala nei ma igoa fa'amatala:

  • manifests - o loʻo i ai faʻaaliga
  • files - e iai faila
  • templates - o lo'o iai fa'ata'ita'iga
  • lib - o loʻo i ai le tulafono Ruby

E le o se lisi atoa lea o lisi ma faila, ae ua lava mo lenei tusiga mo le taimi nei.

Igoa o punaoa ma igoa o faila i totonu o le module

Fa'amaumauga iinei.

Punaoa (vasega, faʻamatalaga) i totonu o se module e le mafai ona faʻaigoaina soʻo se mea e te manaʻo ai. E le gata i lea, o loʻo i ai se fesoʻotaʻiga tuusaʻo i le va o le igoa o se punaoa ma le igoa o le faila lea o le a suʻe ai le Puppet mo se faʻamatalaga o lena punaoa. Afai e te solia tulafono fa'aigoaina, o le a le maua e Puppet le faʻamatalaga punaoa, ma o le ae mauaina se mea sese.

E faigofie tulafono:

  • O punaoa uma i totonu o se module e tatau ona i totonu ole igoa ole module. Afai e valaau le module foo, ona tatau lea ona ta'u uma punaoa oi ai foo::<anything>, pe na'o foo.
  • O le puna'oa ma le igoa o le module e tatau ona i totonu o le faila init.pp.
  • Mo isi punaoa, o le faʻailoga igoa faila e faʻapea:
    • ua tia'i le prefix ma le igoa module
    • o koluma ta'ilua uma, pe afai ei ai, e suitulaga i se fa'ailoga
    • ua faaopoopo le faaopoopoga .pp

O le a ou faʻaalia i se faʻataʻitaʻiga. Fa'apea o lo'o ou tusia se module nginx. O lo'o i ai punaoa nei:

  • класс nginx faamatalaina i le faaaliga init.pp;
  • класс nginx::service faamatalaina i le faaaliga service.pp;
  • fa'amatala nginx::server faamatalaina i le faaaliga server.pp;
  • fa'amatala nginx::server::location faamatalaina i le faaaliga server/location.pp.

Mamanu

E mautinoa lava o oe lava e iloa poʻo a faʻataʻitaʻiga o le a ou le faʻamatalaina auiliili iinei. Ae o le a ou tuu ai ina neʻi iai sootaga i Wikipedia.

Auala e fa'aoga ai fa'ata'ita'iga: E mafai ona fa'alauteleina le uiga o se fa'ata'ita'iga e fa'aaoga ai se galuega template, lea e pasia le ala i le mamanu. Mo punaoa pei faila fa'aoga fa'atasi ma le parakalafa content. Mo se faʻataʻitaʻiga, pei o lenei:

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

Va'ai le ala <modulename>/<filename> o lona uiga faila <rootdir>/modules/<modulename>/templates/<filename>.

E le gata i lea, o loʻo i ai se galuega inline_template - na te mauaina le tusiga faʻataʻitaʻiga e fai ma faʻaoga, ae le o le igoa faila.

I totonu o faʻataʻitaʻiga, e mafai ona e faʻaogaina uma fesuiaiga Papeti i le lautele o loʻo iai nei.

Papeti lagolago faʻataʻitaʻiga ile ERB ma le EPP faʻatulagaga:

Fa'apuupuu e uiga i le ERB

Pulea fausaga:

  • <%= ВЫРАЖЕНИЕ %> — faaofi le taua o le faaupuga
  • <% ВЫРАЖЕНИЕ %> — fa'atatau le tau o se fa'amatalaga (e aunoa ma le fa'aofiina). O fa'amatalaga fa'atatau (afai) ma fa'amaufa'ailoga (ta'itasi) e masani ona alu i'i.
  • <%# КОММЕНТАРИЙ %>

O faʻamatalaga ile ERB o loʻo tusia ile Ruby (ERB o le Ruby Embedded).

Ina ia maua suiga mai le faʻaaliga, e tatau ona e faʻaopopo @ i le igoa fesuia'i. Ina ia aveese se laina laina e aliali mai pe a maeʻa se faʻatonuga, e tatau ona e faʻaogaina se pine faʻamau -%>.

Faataitaiga o le faaaogaina o le mamanu

Fa'apea o lo'o ou tusia se module e pulea ai le ZooKeeper. O le vasega e nafa ma le fatuina o le config e pei o lenei:

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

Ma le mamanu fetaui zoo.cfg.erb - O lea:

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

Mea moni ma Fuafuaga Fausia

E masani lava o le vaega patino o le faʻatulagaga e faʻalagolago i mea o loʻo tupu nei i luga o le node. Mo se faʻataʻitaʻiga, faʻalagolago i le faʻamalolo o Debian, e tatau ona e faʻapipiʻi se tasi poʻo se isi faʻasologa o le afifi. E mafai ona e mata'ituina ma le lima nei mea uma, toe tusi fa'aaliga pe a suia nodes. Ae e le o se faiga ogaoga lea;

Ina ia maua faʻamatalaga e uiga i nodes, e iai le masini e taʻua o mea moni. Mea moni - o faʻamatalaga lea e uiga i le node, o loʻo maua i faʻaaliga i foliga o fesuiaiga masani i le igoa ole lalolagi. Mo se faʻataʻitaʻiga, igoa talimalo, faʻaogaina faiga faʻaoga, fausaga faʻapipiʻi, lisi o tagata faʻaoga, lisi o fesoʻotaʻiga fesoʻotaʻiga ma latou tuatusi, ma le tele, sili atu. E maua fa'amatalaga i fa'aaliga ma fa'ata'ita'iga e fai ma suiga masani.

O se faʻataʻitaʻiga o le galue ma mea moni:

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

I le tulaga aloaia, o se mea moni e iai se igoa ( manoa) ma se tau (o ituaiga eseese e maua: manoa, arrays, lomifefiloi). 'A'ai seti o mea moni fausia-i totonu. E mafai foi ona e tusia sau oe lava tusi. O loʻo faʻamatalaina tagata aoina mea moni pei o galuega i Ruby, pe faapefea faila faila. E mafai fo'i ona tu'uina atu fa'amatalaga i le fomu faila faila ma faʻamaumauga i luga o nodes.

I le taimi o le fa'agaioiga, e kopi muamua e le sui o le papeti mea moni uma e maua mai le pappetserver i le node, a mae'a ona fa'alauiloa ma lafo atu mea moni na aoina i le server; A maeʻa lenei mea, e amata e le 'auʻaunaga ona tuʻufaʻatasia le faʻamaumauga.

Fa'amatalaga i foliga o faila fa'atino

O ia mea moni o loʻo tuʻuina i modules i totonu o le lisi facts.d. Ioe, o faila e tatau ona faʻatinoina. A tamoʻe, e tatau ona latou faʻaalia faʻamatalaga i galuega masani ile YAML poʻo le ki = faʻasologa tau.

Aua nei galo o mea moni e faʻatatau i nodes uma o loʻo pulea e le poppet server o loʻo faʻapipiʻiina ai lau module. O le mea lea, i totonu o le tusitusiga, faʻaeteete e siaki o loʻo i ai i le polokalama polokalama uma ma faila e manaʻomia mo lau mea moni e galue.

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

Ruby mea moni

O ia mea moni o loʻo tuʻuina i modules i totonu o le lisi 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

Fa'amatalaga fa'amatalaga

O ia mea moni e tu'u i nodes i le lisi /etc/facter/facts.d i Papeti tuai pe /etc/puppetlabs/facts.d i le Papeti fou.

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

Alu i Mea Moni

E lua auala e faʻafeiloaʻi ai mea moni:

  • e ala i le lomifefiloi $facts: $facts['fqdn'];
  • fa'aaoga le igoa moni e pei o le igoa fesuia'i: $fqdn.

E sili le fa'aoga o se lomifefiloi $facts, pe sili atu foi, faʻaalia le igoa ole lalolagi ($::facts).

O le vaega talafeagai lea o le fa'amaumauga.

Fuafuaga Fausia

E ese mai i mea moni, e iai foʻi nisi fesuiaiga, avanoa i le igoa ole lalolagi.

  • mea moni faatuatuaina - fesuiaiga e ave mai le tusi faamaonia a le kalani (talu ai o le tusi faamaonia e masani ona tuʻuina atu i luga o se poppet server, e le mafai e le sooupu ona ave ma suia lana tusi faamaonia, o lea e "faʻatuatuaina" fesuiaiga): le igoa o le tusi faamaonia, le igoa o le talimalo ma le vaega, faʻaopoopoga mai le tusi faamaonia.
  • server mea moni —Fesuiaiga e fesootai ma faamatalaga e uiga i le server—version, igoa, tuatusi IP server, siosiomaga.
  • sui mea moni — fesuia'i fa'aopoopo sa'o e le papeti-sui, ae le o le fa'amatalaga - igoa fa'amaonia, fa'amatalaga sui, fa'asologa o papeti.
  • matai fesuiaiga - Pappetmaster fesuiaiga (sic!). E tutusa lava ma totonu server mea moni, fa'atasi ai ma fa'amaufa'ailoga tau fa'asologa o lo'o avanoa.
  • suitulaga tu'ufa'atasi — suitulaga tu'ufa'atasia e 'ese'ese i va'aiga ta'itasi: o le igoa o le module o lo'o iai nei ma le igoa o le module lea na fa'aogaina ai le mea o lo'o iai nei. E mafai ona fa'aoga, mo se fa'ata'ita'iga, e siaki ai e le o fa'aogaina sa'o au vasega tuto'atasi mai isi modules.

Fa'aopoopo 1: fa'afefea ona tamo'e ma debug nei mea uma?

O le tusiga o loʻo i ai le tele o faʻataʻitaʻiga o le papeti code, ae e leʻi taʻuina mai ia i matou le auala e faʻatino ai lenei code. Ia, ua ou faasa'oina a'u lava.

Ua lava se sui e fa'atautaia le Puppet, ae mo le tele o tulaga e te mana'omia ai fo'i se sau.

Sooupu

A itiiti mai talu mai le version 5, papeti-agent afifi mai faleteuoloa aloaia Puppetlabs o loʻo i ai faʻalagolago uma (rubi ma maa tutusa), o lea e leai ni faʻafitauli faʻapipiʻi (O loʻo ou talanoa e uiga i faʻasalalauga faʻavae Debian - matou te le faʻaogaina tufatufaga faʻavae RPM).

I le tulaga sili ona faigofie, e faʻaaoga ai le faʻatulagaina o papeti, ua lava le faʻalauiloaina o le sooupu i le tulaga leai se server: pe a faʻapea e kopi le code papeti i le node, faʻalauiloa. 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

E sili atu, ioe, le setiina o le 'auʻaunaga ma faʻatautaia sui i luga o nodes i le daemon mode - ona tasi i le afa itula latou te faʻaogaina le faʻatulagaina na sii mai i le server.

E mafai ona e faʻataʻitaʻia le faʻataʻitaʻiga o le galuega - alu i le node e te fiafia i ai ma amata sudo puppet agent -t. Ki -t (--test) e aofia moni lava le tele o filifiliga e mafai ona faʻaogaina taʻitoʻatasi. O nei avanoa e aofia ai mea nei:

  • aua le tamoe i le daemon mode (e ala i le le mafai ona amata le sui i le daemon mode);
  • tapuni pe a uma ona faʻaogaina le lisi (e ala i le faaletonu, o le a faʻaauau pea ona galue le sooupu ma faʻaoga le faʻatulagaina i le afa itula);
  • tusi se fa'amatalaga auiliili o galuega;
  • fa'aali suiga i faila.

O loʻo i ai i le sooupu se faiga faʻaoga e aunoa ma ni suiga - e mafai ona e faʻaaogaina pe a e le o mautinoa na e tusia le faʻatulagaga saʻo ma e te manaʻo e siaki poʻo le a tonu le sui o le a suia i le taimi o le taotoga. O lenei faiga e mafai e le parakalafa --noop i luga o le laina poloaiga: sudo puppet agent -t --noop.

E le gata i lea, e mafai ona e faʻaogaina le faʻailoga o le galuega - i totonu, o loʻo tusia ai e papeti e uiga i gaioiga uma o loʻo ia faia: e uiga i le punaoa o loʻo faʻagasolo nei, e uiga i taʻiala o lenei punaoa, e uiga i polokalame na te faʻalauiloaina. Ioe o se parakalafa lenei --debug.

Saini

O le a ou le mafaufau i le seti atoa o le pappetserver ma le faʻapipiʻiina o le code i lenei tusiga o le a naʻo le mea o loʻo i ai i fafo atu o le pusa o loʻo i ai se faʻaoga atoatoa o le server e le manaʻomia se faʻaopoopoga faʻaopoopo e galue ai ma se numera itiiti; nodes (fai mai, e oo atu i le selau). Ole numera tele o nodes o le a manaʻomia ai le faʻalogo - ona o le faaletonu, e le sili atu ma le fa tagata faigaluega e faʻalauiloa e le puppetserver, mo le sili atu o le faʻatinoga e te manaʻomia le faʻateleina o latou numera ma aua neʻi galo e faʻateleina tapulaa manatua, a leai o le a aoina lapisi e le server le tele o taimi.

Fa'ailoga fa'ailoga - afai e te mana'omia vave ma faigofie, ona va'ai lea (i le r10k)[https://github.com/puppetlabs/r10k], mo mea faʻapipiʻi laiti e tatau ona lava.

Fa'aopoopo 2: Ta'iala Fa'ailoga

  1. Tuu uma manatu i vasega ma faʻamatalaga.
  2. Taofi vasega ma faauigaga i modules, ae le o faʻaaliga e faʻamatalaina ai nodes.
  3. Fa'aaogā mea moni.
  4. Aua le faia pe afai e fa'avae ile igoa talimalo.
  5. Lagona le saoloto e faʻaopoopo faʻamaufaʻailoga mo vasega ma faʻamatalaga - e sili atu lenei mea nai lo le faʻaogaina o manatu natia i totonu o le tino o le vasega / faʻamalamalamaina.

O le a ou faʻamatalaina pe aisea ou te fautuaina ai le faia o lenei mea i le isi tusiga.

iʻuga

Tatou faauma i le folasaga. I le isi tala o le a ou taʻuina atu ia te oe Hiera, ENC ma PuppetDB.

Na'o tagata fa'aigoaina e mafai ona auai i le su'esu'ega. Saini ese j, faʻamolemole.

O le mea moni, e tele naua mea - e mafai ona ou tusia tala i autu nei, palota i mea e te fiafia e faitau i ai:

  • 59,1%Fau papeti mata'utia - o nisi tulaga leaga: matasele, fa'afanua ma isi fa'aaliga lambda, aoina punaoa, punaoa auina atu i fafo ma feso'ota'iga i le va o tagata e ala i Papeti, pine, tagata e tu'uina atu, ituaiga fa'amaumauga.13
  • 31,8%"O aʻu o le pule a loʻu tina" poʻo le auala na matou faauo ai i Avito i le tele o poppet servers o ituaiga eseese, ma, i le mataupu faavae, o le vaega e uiga i le faʻatinoina o le poppet server.7
  • 81,8%Fa'afefea ona matou tusia le code papeti: meafaifaaili, fa'amaumauga, su'ega, CI/CD.18

22 tagata fa'aoga na palota. 9 tagata fa'aoga na le mafai.

puna: www.habr.com