Selelekela sa Popi

Puppet ke sistimi ea taolo ea tlhophiso. E sebelisoa ho tlisa batho ba amohelang baeti sebakeng se lakatsehang le ho boloka boemo bona.

Ke sebelitse le Puppet lilemo tse fetang tse hlano joale. Sengoloa sena ha e le hantle ke pokello e fetoletsoeng le ho hlophisoa bocha ea lintlha tsa bohlokoa ho tsoa litokomaneng tsa semmuso, tse tla lumella ba qalang ho utloisisa ka potlako moelelo oa Popi.

Selelekela sa Popi

Tlhahisoleseling ea mantlha

Sistimi ea ts'ebetso ea Puppet ke seva ea bareki, leha e ts'ehetsa ts'ebetso e se nang seva e nang le ts'ebetso e fokolang.

Mohlala oa ts'ebetso oa ho hula o sebelisoa: ka ho sa feleng, hang ka halofo ea hora, bareki ba ikopanya le seva bakeng sa tlhophiso le ho e sebelisa. Haeba u sebelitse le Ansible, joale ba sebelisa mokhoa o fapaneng oa ho sutumetsa: mookameli o qala mokhoa oa ho sebelisa tlhophiso, bareki ka bobona ba ke ke ba sebelisa letho.

Nakong ea puisano ea marang-rang, ho sebelisoa encryption ea litsela tse peli tsa TLS: seva le moreki ba na le linotlolo tsa bona tsa lekunutu le litifikeiti tse lumellanang. Ka tloaelo seva se fana ka litifikeiti bakeng sa bareki, empa ha e le hantle hoa khoneha ho sebelisa CA e ka ntle.

Kenyelletso ea li-manifestos

Lereho la lipopae ho seva sa popi hokela nodes (li-node). Tlhophiso ea li-node e ngotsoe ka li-manifestos ka puo e khethehileng ea lenaneo - Puppet DSL.

Puppet DSL ke puo ea phatlalatso. E hlalosa boemo bo lakatsehang ba node ka mokhoa oa liphatlalatso tsa lisebelisoa tsa motho ka mong, mohlala:

  • Faele e teng mme e na le litaba tse ikhethileng.
  • Sephutheloana se kentsoe.
  • Tšebeletso e se e qalile.

Lisebelisoa li ka hokahanngoa:

  • Ho na le litšepe, li ama tatellano eo lisebelisoa li sebelisoang ka eona.
    Mohlala, "kenya sephutheloana pele, ebe u hlophisa faele ea tlhophiso, ebe u qala ts'ebeletso."
  • Ho na le litsebiso - haeba mohloli o fetohile, o romela litsebiso ho mehloli e ngolisitsoeng ho eona.
    Mohlala, haeba faele ea tlhophiso e fetoha, o ka qala ts'ebeletso ka bo eona.

Ho phaella moo, Puppet DSL e na le mesebetsi le mefuta-futa, hammoho le lipolelo tse nang le maemo le likhetho. Ho boetse ho tšehetsoa mekhoa e fapaneng ea ho etsa litempele - EPP le ERB.

Puppet e ngotsoe ka Ruby, kahoo boholo ba lihahi le mantsoe a nkiloe moo. Ruby e u lumella ho holisa Puppet - eketsa logic e rarahaneng, mefuta e mecha ea lisebelisoa, mesebetsi.

Ha Puppet e ntse e sebetsa, lipontšo bakeng sa node e 'ngoe le e' ngoe e khethehileng ho seva li bokelloa bukeng. dibaka ke lethathamo la lisebelisoa le likamano tsa tsona ka mor'a ho bala bohlokoa ba mesebetsi, mefuta-futa le ho atolosoa ha lipolelo tse nang le maemo.

Syntax le codestyle

Mona ke likarolo tsa litokomane tsa molao tse tla u thusa ho utloisisa syntax haeba mehlala e fanoeng e sa lekana:

Mona ke mohlala oa hore na manifesto e shebahala joang:

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

Ho ikarola le ho khaoha ha mela ha se karolo e hlokahalang ea ponahalo, empa ho na le khothaletso setaele sa setaele. Kakaretso:

  • Li-indent tse peli tsa sebaka, li-tab ha li sebelisoe.
  • Li-curly braces li aroloa ke sebaka; li-colon ha li arohane ke sebaka.
  • Likoma ka mor'a parameter ka 'ngoe, ho kenyelletsa le ea ho qetela. Paramethara ka 'ngoe e moleng o arohaneng. Ho na le mokhelo bakeng sa nyeoe e se nang li-parameter le parameter e le 'ngoe: o ka ngola moleng o le mong ntle le phegelwana (i.e. resource { 'title': } и resource { 'title': param => value }).
  • Metsu e holim'a li-parameter e lokela ho ba boemong bo lekanang.
  • Metsu ea kamano ea lisebelisoa e ngotsoe ka pel'a bona.

Sebaka sa lifaele ho pappetserver

Bakeng sa tlhaloso e eketsehileng, ke tla hlahisa mohopolo oa "root directory". Motso oa directory ke directory e nang le tlhophiso ea Puppet bakeng sa node e itseng.

Motso oa buka e fapana ho latela mofuta oa Puppet le tikoloho e sebelisitsoeng. Tikoloho ke lihlopha tse ikemetseng tsa tlhophiso tse bolokiloeng ho li-directory tse arohaneng. Hangata e sebelisoa hammoho le git, moo maemo a thehiloeng ho tsoa makaleng a git. Ka hona, node e 'ngoe le e' ngoe e sebakeng se seng kapa se seng. Sena se ka hlophisoa ho node ka boeona, kapa ho ENC, eo ke tla bua ka eona sehloohong se latelang.

  • Phetolelong ea boraro ("Puppet ea khale") buka ea motheo e ne e le /etc/puppet. Tšebeliso ea tikoloho ke ea boikhethelo - mohlala, ha re e sebelise le Popi ea khale. Haeba libaka li sebelisoa, hangata li bolokiloe ka har'a /etc/puppet/environments, buka ea motso e tla ba directory ea tikoloho. Haeba tikoloho e sa sebelisoe, motso oa directory e tla ba mohloli oa motheo.
  • Ho qala ka mofuta oa bone ("popi e ncha"), tšebeliso ea tikoloho e ile ea tlameha ho sebelisoa, 'me bukana ea motheo e ile ea isoa ho /etc/puppetlabs/code. Ka hona, libaka li bolokiloe ka har'a /etc/puppetlabs/code/environments, motso directory ke directory ea tikoloho.

Ho tlameha ho ba le subdirectory bukeng ea metso manifests, e nang le pontšo e le 'ngoe kapa tse ngata tse hlalosang li-node. Ho feta moo, ho lokela ho ba le subdirectory modules, e nang le li-module. Ke tla u bolella hore na ke li-module life hamorao. Ho feta moo, Puppet ea khale e kanna ea ba le bukana e nyane files, e nang le lifaele tse fapaneng tseo re li kopitsang ho li-node. Ho Popi e ncha, lifaele tsohle li behiloe ka limmojule.

Lifaele tsa Manifest li na le katoloso .pp.

Mehlala e 'meli ea ntoa

Tlhaloso ea node le lisebelisoa ho eona

Nodeng server1.testdomain faele e tlameha ho etsoa /etc/issue ka dikahare Debian GNU/Linux n l. Faele e tlameha ho ba ea mosebelisi le sehlopha root, litokelo tsa ho fihlella li tlameha ho ba 644.

Re ngola manifesto:

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

Likamano pakeng tsa lisebelisoa ka node

Nodeng server2.testdomain nginx e tlameha ho sebetsa, e sebetsa ka tlhophiso e lokiselitsoeng pele.

Ha re lokise bothata:

  • Sephutheloana se hloka ho kenngoa nginx.
  • Hoa hlokahala hore lifaele tsa tlhophiso li kopitsoe ho tsoa ho seva.
  • Tšebeletso e tlameha ho sebetsa nginx.
  • Haeba tlhophiso e nchafalitsoe, tšebeletso e tlameha ho qala hape.

Re ngola manifesto:

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

Hore sena se sebetse, o hloka sebaka se latelang sa faele ho seva sa popi:

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

Mefuta ea Lisebelisoa

Lethathamo le felletseng la mefuta ea lisebelisoa tse tšehetsoeng le ka fumanoa mona litokomaneng, mona ke tla hlalosa mefuta e mehlano ea motheo, eo ka tloaelo ea ka e lekaneng ho rarolla mathata a mangata.

faele

E laola lifaele, li-directory, li-symlink, likahare tsa tsona, le litokelo tsa ho fihlella.

Parameters:

  • lebitso la mohlodi - tsela ea faele (ho ikhethela)
  • tsela - tsela ea faele (haeba e sa boleloa ka lebitso)
  • etsa bonnete ba - mofuta oa faele:
    • absent - hlakola faele
    • present - ho tlameha ho ba le faele ea mofuta ofe kapa ofe (haeba ho se na faele, faele e tloaelehileng e tla etsoa)
    • file - faele e tloaelehileng
    • directory - directory
    • link - symlink
  • dikahare - likahare tsa faele (tse loketseng lifaele tse tloaelehileng feela, li ke ke tsa sebelisoa hammoho mohloli o moholo kapa sepheo)
  • mohloli o moholo - sehokelo sa tsela eo u batlang ho kopitsa litaba tsa faele ho eona (e ke ke ea sebelisoa hammoho le dikahare kapa sepheo). E ka hlalosoa e le URI e nang le morero puppet: (ebe ho tla sebelisoa lifaele tse tsoang ho seva sa lipopae), le ka morero http: (Ke tšepa hore ho hlakile se tla etsahala tabeng ena), esita le ka setšoantšo file: kapa e le tsela e felletseng ntle le schema (joale ho tla sebelisoa faele e tsoang ho FS ea lehae sebakeng sa node)
  • sepheo — moo symlink e lokelang ho supa (e ke ke ea sebelisoa hammoho le dikahare kapa mohloli o moholo)
  • mong'a - mosebelisi ea lokelang ho ba mong'a faele
  • sehlopha se — sehlopha seo faele e lokelang ho ba ho sona
  • screen reader mode - tumello ea faele (joalo ka khoele)
  • khutlisa - e nolofalletsa ho sebetsa ka mokhoa oa ho pheta-pheta
  • ho hloekisa - e nolofalletsa ho hlakola lifaele tse sa hlalosoang ho Puppet
  • lebotho la - e nolofalletsa ho hlakola li-directory tse sa hlalosoang ho Puppet

sephutheloana

E kenya le ho tlosa liphutheloana. E khona ho sebetsana le litsebiso - e khutlisetsa sephutheloana haeba parameter e boletsoe reinstall_on_refresh.

Parameters:

  • lebitso la mohlodi - lebitso la sephutheloana (boikhethelo)
  • lebitso - lebitso la sephutheloana (haeba le sa boleloa ka lebitso)
  • Mofani - molaoli oa sephutheloana ho sebelisoa
  • etsa bonnete ba - boemo bo lakatsehang ba sephutheloana:
    • present, installed - mofuta ofe kapa ofe o kentsoe
    • latest - mofuta oa morao-rao o kentsoe
    • absent - hlakotsoe (apt-get remove)
    • purged - e hlakotsoe hammoho le lifaele tsa tlhophiso (apt-get purge)
    • held - mofuta oa sephutheloana o notletsoe (apt-mark hold)
    • любая другая строка - mofuta o boletsoeng o kentsoe
  • reinstall_on_refresh - haeba true, ka mor'a ho fumana tsebiso, sephutheloana se tla tsosolosoa. E bohlokoa bakeng sa phetisetso e thehiloeng mohloling, moo ho ka hlokahalang ho aha liphutheloana ha ho fetoloa liparamente tsa moaho. Ea kamehla false.

tšebeletso ea

E laola litšebeletso. E khona ho sebetsana le litsebiso - e qala tšebeletso hape.

Parameters:

  • lebitso la mohlodi - tšebeletso e lokela ho laoloa (ho ikhethela)
  • lebitso - tšebeletso e hlokang ho laoloa (haeba e sa boleloa ka lebitso)
  • etsa bonnete ba - boemo bo lakatsehang ba ts'ebeletso:
    • running - qala
    • stopped - emisa
  • kgontsha - e laola bokhoni ba ho qala ts'ebeletso:
    • true - autorun e buletsoe (systemctl enable)
    • mask - e patiloe (systemctl mask)
    • false - autorun e holofetse (systemctl disable)
  • qala hape — команда для перезапуска сервиса
  • boemo — taelo ya ho lekola boemo ba tshebeletso
  • hasrestart — bontša hore na initscript ea litšebeletso e tšehetsa ho qala bocha. Haeba false mme parameter e hlalositsoe qala hape - boleng ba parameter ena bo sebelisoa. Haeba false le parameter qala hape ha e hlalosoe - ts'ebeletso e emisitsoe mme e qala ho qala hape (empa systemd e sebelisa taelo systemctl restart).
  • hasstatus — bontša hore na initscript ea litšebeletso e tšehetsa taelo status. Haeba false, joale boleng ba parameter bo sebelisoa boemo. Ea kamehla true.

phetha

E tsamaisa litaelo tsa kantle. Haeba u sa hlalose li-parameter e bōpa, feela haeba, ntle le hore kapa refreshonly, taelo e tla tsamaisoa nako le nako ha Puppet e tsamaisoa. E khona ho sebetsana le litsebiso - e tsamaisa taelo.

Parameters:

  • lebitso la mohlodi - taelo e lokelang ho etsoa (ka boikhethelo)
  • taelo ea - taelo e lokelang ho etsoa (haeba e sa boleloa ka lebitso)
  • tsela - litsela tseo ho tsona ho ka batloang faele e sebetsang
  • feela haeba - haeba taelo e boletsoeng paramenteng ena e phethiloe ka khoutu ea ho khutlisa zero, taelo e kholo e tla etsoa
  • ntle le hore - haeba taelo e boletsoeng paramenteng ena e phethiloe ka khoutu ea ho khutla e seng zero, taelo e kholo e tla etsoa
  • e bōpa - haeba faele e boletsoeng ho parameter ena ha e eo, taelo e ka sehloohong e tla etsoa
  • refreshonly - haeba true, joale taelo e tla tsamaisoa feela ha exec e fumana tsebiso ho tsoa mehloling e meng
  • cwd — bukana eo o tla tsamaisa taelo ho eona
  • user want-meet.ru — mosebelisi eo a ka tsamaisang taelo ho tsoa ho eena
  • Mofani - mokhoa oa ho tsamaisa taelo:
    • khuts'oanyane - ts'ebetso ea ngoana e entsoe feela, etsa bonnete ba hore o totobatsa tsela
    • khetla - taelo e qalisoa ka khetla /bin/sh, e ka 'na ea se ke ea boleloa tsela, o ka sebelisa globbing, liphaephe le likarolo tse ling tsa likhetla. Hangata e fumanoa ka bo eona haeba ho na le litlhaku tse khethehileng (|, ;, &&, || jj).

cron

E laola li-cronjobs.

Parameters:

  • lebitso la mohlodi - mofuta o itseng oa sekhetho
  • etsa bonnete ba - boemo ba mosebetsi:
    • present - theha haeba e le sieo
    • absent - hlakola haeba e teng
  • taelo ea - ke taelo efe ea ho matha
  • tikoloho e khahlang - sebakeng seo u ka tsamaisang taelo ho sona (lenane la mefuta e fapaneng ea tikoloho le boleng ba tsona ka =)
  • user want-meet.ru — ho tsoa ho mosebelisi ofe ho tsamaisa taelo
  • motsotso, hora, hara beke, Khoeli, khoeli le khoeli - nako ea ho matha cron. Haeba e 'ngoe ea litšobotsi tsena e sa hlalosoa, boleng ba eona ho crontab e tla ba *.

Ho Popi ea 6.0 cron joalo ka ho ntšoa ka lebokoseng ho puppetserver, kahoo ha ho na litokomane sebakeng se akaretsang sa marang-rang. Empa eena e ka lebokoseng ho li-puppet-agent, kahoo ha ho hlokahale ho e kenya ka thoko. U ka bona litokomane tsa eona litokomaneng tsa mofuta oa bohlano oa Popi, kapa ho GitHub.

Mabapi le lisebelisoa ka kakaretso

Litlhoko tsa ho ikhetha ha lisebelisoa

Phoso e atileng haholo eo re kopanang le eona ke Phatlalatso ea boikopanyo. Phoso ena e etsahala ha mehloli e 'meli kapa ho feta ea mofuta o tšoanang e nang le lebitso le tšoanang e hlaha bukeng.

Ka hona, ke tla ngola hape: e bonts'ang bakeng sa node e ts'oanang ha ea lokela ho ba le lisebelisoa tsa mofuta o tšoanang ka sehlooho se ts'oanang!

Ka linako tse ling ho na le tlhokahalo ea ho kenya liphutheloana tse nang le lebitso le le leng, empa ka batsamaisi ba liphutheloana tse fapaneng. Tabeng ena, o hloka ho sebelisa parameter nameho qoba phoso:

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

Mefuta e meng ea lisebelisoa e na le likhetho tse tšoanang ho thusa ho qoba phetisetso − name у tšebeletso ea, command у phetha, joalo joalo.

Metaparameters

Mofuta o mong le o mong oa lisebelisoa o na le li-parameter tse khethehileng, ho sa tsotellehe hore na ke tsa mofuta ofe.

Lethathamo le felletseng la li-parameter tsa meta litokomaneng tsa Puppet.

Lenane le lekgutshwane:

  • hloka - parameter ena e bontša hore na mohloli ona o itšetlehile ka mehloli efe.
  • pele - Paramethara ena e totobatsa hore na ke lisebelisoa life tse itšetlehileng ka mohloli ona.
  • Subscribe - paramethara ena e totobatsa hore na mohloli ona o fumana litsebiso ho tsoa ho eng.
  • tsebisa - Paramethara ena e totobatsa hore na ke lisebelisoa life tse amohelang litsebiso ho tsoa mohloling ona.

Li-metaparameter tsohle tse thathamisitsoeng li amohela sehokelo se le seng sa mohloli kapa letoto la likhokahano ka masakaneng a sekwere.

Lihokelo tsa lisebelisoa

Sehokelo sa mohlodi ke polelo feela ya mohlodi. Li sebelisoa haholo-holo ho bontša ho itšetleha. Ho bua ka sesebelisoa se seng se le teng ho tla baka phoso ea ho bokella.

Syntax ea sehokelo ke e latelang: mofuta oa sesebelisoa o nang le tlhaku e kholo (haeba lebitso la mofuta o na le li-colon tse peli, joale karolo e 'ngoe le e' ngoe ea lebitso lipakeng tsa li-colon e ngotsoe ka litlhaku tse kholo), ebe lebitso la sesebelisoa ka masakaneng a lisekoere (tabeng ea lebitso. ha e fetohe!). Ha hoa lokela ho ba le libaka; li-brackets tse sekoere li ngoloa hang ka mor'a lebitso la mofuta.

Mohlala:

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

Litšepiso le litsebiso

Litokomane mona.

Joalo ka ha ho boletsoe pejana, ho its'etleha habonolo lipakeng tsa lisebelisoa hoa fetoha. Ka tsela, e-ba hlokolosi ha u eketsa litšepiso - u ka theha litšepe tsa cyclic, tse tla baka phoso ea ho bokella.

Ho fapana le batho ba itšetlehileng ka bona, litsebiso ha li fetohe. Melao e latelang e sebetsa bakeng sa litsebiso:

  • Haeba sesebelisoa se fumana tsebiso, se tla ntlafatsoa. Liketso tsa ntlafatso li itšetlehile ka mofuta oa lisebelisoa - phetha o tsamaisa taelo, tšebeletso ea qala tshebeletso hape, sephutheloana e tsosolosa sephutheloana. Haeba mohloli o se na ketso ea ntlafatso e hlalositsoeng, ha ho letho le etsahalang.
  • Nakong e le 'ngoe ea Puppet, sesebelisoa ha se ntlafatsoe ho feta hang. Sena se ka etsahala hobane litsebiso li kenyelletsa litšepiso 'me setšoantšo sa ho itšetleha ha se na lipotoloho.
  • Haeba Puppet e fetola boemo ba sesebelisoa, mohloli o romela litsebiso ho mehloli eohle e ngolisitsoeng ho eona.
  • Haeba sesebelisoa se nchafalitsoe, se romela litsebiso ho lisebelisoa tsohle tse ngolisitsoeng ho sona.

Ho sebetsana le liparamente tse sa hlalosoang

E le molao, haeba mohloli o mong oa lisebelisoa o se na boleng ba kamehla 'me paramethara ena e sa hlalosoa ho manifesto, joale Puppet e ke ke ea fetola thepa ena bakeng sa mohlodi o tsamaisanang le node. Ka mohlala, haeba mohloli oa mofuta faele paramethara e sa hlalosoang owner, joale Puppet e ke ke ea fetola mong'a faele e tsamaisanang le eona.

Kenyelletso ea litlelase, mefuta-futa le litlhaloso

Ha re re re na le li-node tse 'maloa tse nang le karolo e tšoanang ea tlhophiso, empa ho boetse ho na le liphapang - ho seng joalo re ka li hlalosa kaofela ka boloko bo le bong. node {}. Ha e le hantle, u ka kopitsa likarolo tse tšoanang tsa tlhophiso, empa ka kakaretso ena ke tharollo e mpe - tlhophiso e ntse e hōla, 'me haeba u fetola karolo e akaretsang ea tlhophiso, u tla tlameha ho hlophisa ntho e tšoanang libakeng tse ngata. Ka nako e ts'oanang, ho bonolo ho etsa phoso, 'me ka kakaretso, molao-motheo oa DRY (u se ke ua pheta-pheta) o qapiloe ka lebaka.

Ho rarolla bothata bona ho na le moralo o joalo класс.

Ditlelase

Sehlopha ke lebitso la boloko la khoutu ea poppet. Litlelase lia hlokahala ho sebelisa khoutu hape.

Pele, sehlopha se hloka ho hlalosoa. Tlhaloso ka boeona ha e kenye lisebelisoa leha e le life kae kapa kae. Sehlopha se hlalosoa ka mekhahlelo:

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

Ka mor'a moo, sehlopha se ka sebelisoa:

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

Mohlala ho tsoa mosebetsing o fetileng - ha re tsamaiseng ho kenya le ho hlophisoa ha nginx sehlopheng:

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
}

Mefuta e fapaneng

Sehlopha se tsoang mohlaleng o fetileng ha se fetohe ho hang hobane se lula se tlisa tlhophiso e tšoanang ea nginx. Ha re etseng tsela ea ho feto-fetoha ha tlhophiso, ebe sehlopha sena se ka sebelisoa ho kenya nginx ka tlhophiso efe kapa efe.

E ka etsoa ho sebedisa diphapano.

Tlhokomeliso: mefuta e fapaneng ea Puppet ha e fetohe!

Ho phaella moo, phapang e ka fumanoa feela ka mor'a hore e phatlalatsoe, ho seng joalo boleng ba ho fetoha bo tla ba teng undef.

Mohlala oa ho sebetsa le mefuta e fapaneng:

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

Popi e na le libaka tsa mabitso, 'me liphapang, ka hona, li na le sebaka sa ponahalo: Phapang e nang le lebitso le tšoanang e ka hlalosoa libakeng tse fapaneng tsa mabitso. Ha ho rarolloa bohlokoa ba ho feto-fetoha, ho phenyekolloa ho phenyekolloa sebakeng sa hona joale sa mabitso, joale sebakeng sa mabitso se koalehileng, joalo-joalo.

Mehlala ea sebaka sa mabitso:

  • lefats'e - mefuta e fapaneng ka ntle ho sehlopha kapa tlhaloso ea node e ea moo;
  • sebaka sa mabitso sa node tlhalosong ea node;
  • sebaka sa mabitso sa sehlopha ho tlhaloso ea sehlopha.

Ho qoba ho se hlaka ha o fumana phapang, o ka hlakisa sebaka sa mabitso ka lebitso le feto-fetohang:

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

Ha re lumellane hore tsela e lebisang ho tlhophiso ea nginx e ka har'a phapang $nginx_conf_source. Joale sehlopha se tla shebahala tjena:

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
}

Leha ho le joalo, mohlala o fanoeng ke o mobe hobane ho na le "tsebo ea sephiri" eo ​​kae-kae ka har'a sehlopha ho sebelisoa phetoho e nang le lebitso le joalo. Ho nepahetse haholo ho etsa hore tsebo ena e be kakaretso - litlelase li ka ba le liparamente.

Litekanyetso tsa sehlopha ke lintho tse fapaneng sebakeng sa mabitso sa sehlopha, li hlalositsoe sehloohong sa sehlopha 'me li ka sebelisoa joalo ka mefuta e tloaelehileng ea sehlopha. Litekanyetso tsa parameter li hlalositsoe ha u sebelisa sehlopha ho manifest.

Paramethara e ka hlophisoa ho boleng ba kamehla. Haeba parameter e se na boleng ba kamehla 'me boleng bo sa behoa ha bo sebelisoa, bo tla baka phoso ea ho bokella.

Ha re behelle sehlopha ho tsoa mohlaleng o kaholimo mme re kenye liparamente tse peli: ea pele, e hlokahalang, ke tsela ea tlhophiso, 'me ea bobeli, ka boikhethelo, ke lebitso la sephutheloana se nang le nginx (ka Debian, mohlala, ho na le liphutheloana. 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',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

Ho Puppet, mefuta e fapaneng e ngotsoe. Ja mefuta e mengata ea data. Mefuta ea data hangata e sebelisoa ho netefatsa boleng ba paramente bo fetisetsoang litlelaseng le litlhaloso. Haeba parameter e fetisitsoeng e sa lumellane le mofuta o boletsoeng, phoso ea ho bokella e tla etsahala.

Mofuta o ngotsoe hang-hang pele ho lebitso la parameter:

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

Lihlopha: kenyeletsa classname vs class{'classname':}

Sehlopha se seng le se seng ke sesebelisoa sa mofuta sehlopha sa. Joalo ka mofuta ofe kapa ofe oa sesebelisoa, ho ka se be le mehlala e 'meli ea sehlopha se le seng sebakeng se le seng.

Haeba u leka ho eketsa sehlopha ho node e le 'ngoe habeli u sebelisa class { 'classname':} (ha ho na phapang, e nang le liparamente tse fapaneng kapa tse ts'oanang), ho tla ba le phoso ea ho bokella. Empa haeba u sebelisa sehlopha ka mokhoa oa lisebelisoa, u ka khona hang-hang ho beha liparamente tsohle tsa eona ho manifest.

Leha ho le joalo, haeba u sebelisa include, joale tlelase e ka eketsoa ka makhetlo a mangata kamoo u lakatsang kateng. 'Nete ke hore include ke ts'ebetso e sa sebetseng e lekolang hore na sehlopha se kentsoe bukeng. Haeba sehlopha se le sieo bukeng, sea se eketsa, 'me haeba se se se ntse se le teng, ha se etse letho. Empa ha e sebelisoa include Ha o khone ho beha liparamente tsa sehlopha nakong ea phatlalatso ea sehlopha - litekanyo tsohle tse hlokahalang li tlameha ho beoa mohloling oa data oa kantle - Hiera kapa ENC. Re tla bua ka tsona sehloohong se latelang.

E hlalosa

Joalo ka ha ho boletsoe bolokong bo fetileng, sehlopha se le seng se ke ke sa ba teng ho node ho feta hang. Leha ho le joalo, maemong a mang u hloka ho khona ho sebelisa "block" e tšoanang ea khoutu e nang le li-parameter tse fapaneng sebakeng se le seng. Ka mantsoe a mang, ho na le tlhokahalo ea mofuta oa mohloli oa eona.

Mohlala, molemong oa ho kenya module ea PHP, re etsa tse latelang ho Avito:

  1. Kenya sephutheloana ka mojule ona.
  2. Ha re theheng faele ea tlhophiso bakeng sa mojule ona.
  3. Re theha symlink ho config bakeng sa php-fpm.
  4. Re theha symlink ho config bakeng sa php cli.

Maemong a joalo, moralo o kang hlalosa (hlalosa, mofuta o hlalositsoeng, mofuta oa mohlodi o hlalositsoeng). A Define e tšoana le sehlopha, empa ho na le liphapang: pele, e 'ngoe le e 'ngoe Define ke mofuta oa mohlodi, eseng mohlodi; ea bobeli, tlhaloso e 'ngoe le e' ngoe e na le parameter e sa tobang $title, moo lebitso la mohloli le eang teng ha le phatlalatsoa. Joalo ka litlelaseng, tlhaloso e tlameha ho hlalosoa pele, ka mor'a moo e ka sebelisoa.

Mohlala o nolofalitsoeng o nang le mojule oa 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' }
}

Mokhoa o bonolo oa ho ts'oara phoso ea phatlalatso ea Duplicate ke ho Define. Sena se etsahala haeba tlhaloso e na le mohloli o nang le lebitso le sa khaotseng, 'me ho na le mehlala e' meli kapa ho feta ea tlhaloso ena sebakeng se seng.

Ho bonolo ho itšireletsa ho sena: lisebelisoa tsohle tse ka hare ho tlhaloso li tlameha ho ba le lebitso ho itšetlehile ka $title. Ntho e 'ngoe ke tlatsetso e se nang thuso ea lisebelisoa; maemong a bonolo, ho lekane ho tsamaisa lisebelisoa tse tloaelehileng maemong ohle a tlhaloso ho sehlopha se arohaneng mme o kenyelletsa sehlopha sena tlhalosong - mosebetsi. include hloka matla.

Ho na le mekhoa e meng ea ho fumana idempotency ha u eketsa lisebelisoa, e leng ho sebelisa mesebetsi defined и ensure_resources, empa ke tla u bolella ka eona karolong e latelang.

Litšepiso le litsebiso bakeng sa lihlopha le litlhaloso

Lihlopha le litlhaloso li kenyelletsa melao e latelang ho sebetsana le litšepiso le litsebiso:

  • ho itšetleha ka sehlopha / ho hlalosa ho eketsa ho itšetleha ka lisebelisoa tsohle tsa sehlopha / ho hlalosa;
  • ho itšetleha ka sehlopha / ho hlalosa ho eketsa litšepe ho lihlopha tsohle / ho hlalosa lisebelisoa;
  • class/define notification e tsebisa lisebelisoa tsohle tsa sehlopha/define;
  • class/define subscription e ingolisa ho lisebelisoa tsohle tsa sehlopha/define.

Lipolelo tsa maemo le bakhethoa

Litokomane mona.

if

Ho bonolo mona:

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

ntle le hore

ntle le haeba e le ka morao: "block of code" e tla etsoa haeba polelo e le leshano.

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

hlahletsoe nyeoe

Ha ho letho le rarahaneng le mona. U ka sebelisa litekanyetso tse tloaelehileng (likhoele, linomoro, joalo-joalo), lipolelo tse tloaelehileng, le mefuta ea data e le boleng.

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

Bakhethi

Mokhethi ke moaho oa puo o tšoanang le case, empa ho e-na le ho sebelisa boloko ba khoutu, e khutlisa boleng.

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

Mejule

Ha tlhophiso e le nyane, e ka bolokoa habonolo ho manifest e le 'ngoe. Empa ha re hlalosa litlhophiso tse ngata, ho na le litlelase le li-node tse ngata ho ponaletso, ea hola, 'me ho ba thata ho sebetsa le eona.

Ho feta moo, ho na le bothata ba ho sebelisa khoutu hape - ha khoutu eohle e le pontšong e le 'ngoe, ho thata ho arolelana khoutu ena le ba bang. Ho rarolla mathata ana a mabeli, Puppet e na le setheo se bitsoang li-module.

Mejule - tsena ke lihlopha tsa lihlopha, litlhaloso le likarolo tse ling tsa Lipopae tse behiloeng bukeng e arohaneng. Ka mantsoe a mang, mojule ke karolo e ikemetseng ea logic ea Puppet. Ka mohlala, ho ka 'na ha e-ba le mojule oa ho sebetsa le nginx,' me e tla ba le se hlokahalang feela ho sebetsa le nginx, kapa ho ka ba le module ea ho sebetsa le PHP, joalo-joalo.

Модули версионируются, также поддерживаются зависимости модулей друг от друга. Есть открытый репозиторий модулей — Popi Forge.

Ho seva sa lipopae, li-module li fumaneha ka har'a subdirectory ea li-module tsa directory ea motso. Ka har'a mojule o mong le o mong ho na le moralo o tloaelehileng oa li-directory - lipontšo, lifaele, litempele, lib, joalo-joalo.

Sebopeho sa faele ka mojulung

Motso oa module o ka ba le li-directory tse latelang tse nang le mabitso a hlalosang:

  • manifests - e na le li-manifestos
  • files - e na le lifaele
  • templates - e na le litempele
  • lib - e na le khoutu ea Ruby

Lena ha se lethathamo le felletseng la li-directory le lifaele, empa le lekane bakeng sa sengoloa sena hajoale.

Mabitso a lisebelisoa le mabitso a lifaele mojulung

Litokomane mona.

Lisebelisoa (lihlopha, litlhaloso) mojulung li ke ke tsa bitsoa eng kapa eng eo u e ratang. Ho feta moo, ho na le ngollano e tobileng pakeng tsa lebitso la mohlodi le lebitso la faele moo Pupete a tla batla tlhaloso ya mohlodi oo. Haeba u tlola melao ea ho reha mabitso, joale Puppet e ke ke ea fumana tlhaloso ea lisebelisoa, 'me u tla fumana phoso ea ho bokella.

Melao e bonolo:

  • Lisebelisoa tsohle tse mojuleng li tlameha ho ba sebakeng sa mabitso sa mojule. Haeba module e bitsoa foo, joale lisebelisoa tsohle tse ho eona li lokela ho bitsoa foo::<anything>, kapa feela foo.
  • Mohloli o nang le lebitso la mojule o tlameha ho ba faeleng init.pp.
  • Bakeng sa lisebelisoa tse ling, leano la ho reha lebitso la faele ke le latelang:
    • sehlongoapele se nang le lebitso la mojule se lahloa
    • li-colon tsohle tse habeli, haeba li teng, li nkeloa sebaka ke li-slash
    • ho eketsoa .pp

Ke tla bontša ka mohlala. Ha re re ke ngola mojule nginx. E na le lisebelisoa tse latelang:

  • класс nginx e hlalosoang ho ponahatso init.pp;
  • класс nginx::service e hlalosoang ho ponahatso service.pp;
  • hlalosa nginx::server e hlalosoang ho ponahatso server.pp;
  • hlalosa nginx::server::location e hlalosoang ho ponahatso server/location.pp.

Litempele

Ehlile uena ka bouena ua tseba hore na litempele ke eng; Nke ke ka li hlalosa ka botlalo mona. Empa ke tla e tlohela feela haeba ho ka etsahala link ho Wikipedia.

Mokhoa oa ho sebelisa litempele: Moelelo oa template o ka atolosoa ho sebelisoa ts'ebetso template, e fetisetsoang tsela ea template. Bakeng sa lisebelisoa tsa mofuta faele e sebelisoa hammoho le parameter content. Ka mohlala, joalo ka:

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

Sheba tsela <modulename>/<filename> e bolela faele <rootdir>/modules/<modulename>/templates/<filename>.

Ntle le moo, ho na le ts'ebetso inline_template — e fumana mongolo wa thempleite e le kenyo, eseng lebitso la faele.

Ka har'a lithempleite, u ka sebelisa mefuta eohle ea li-Puppet sebakeng sa hajoale.

Popi e tšehetsa litempele ka sebopeho sa ERB le EPP:

Ka bokhutšoanyane ka ERB

Mehaho ea taolo:

  • <%= ВЫРАЖЕНИЕ %> — kenya boleng ba polelo
  • <% ВЫРАЖЕНИЕ %> — bala boleng ba polelo (ntle le ho e kenya). Lipolelo tsa maemo (haeba) le loops (e 'ngoe le e' ngoe) hangata li ea mona.
  • <%# КОММЕНТАРИЙ %>

Lipolelo ho ERB li ngotsoe ka Ruby (ERB ha e le hantle e Embedded Ruby).

Ho fihlella mefuta e fapaneng ho tsoa ho manifest, o hloka ho eketsa @ ho lebitso le feto-fetohang. Ho tlosa khefu ea mohala e hlahang ka mor'a mohaho oa taolo, o hloka ho sebelisa letšoao la ho koala -%>.

Mohlala oa ho sebelisa template

Ha re re ke ngola mojule ho laola ZooKeeper. Sehlopha se ikarabellang bakeng sa ho theha config se shebahala tjena:

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

Le template e lumellanang zoo.cfg.erb - Kahoo:

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

Lintlha le Liphetoho tse Ahiloeng

Hangata karolo e itseng ea tlhophiso e itšetlehile ka se etsahalang hona joale node. Mohlala, ho latela hore na ho lokolloa ha Debian ke eng, o hloka ho kenya mofuta o le mong kapa o mong oa sephutheloana. U ka hlokomela tsena tsohle ka letsoho, ho ngola hape hoa bonahala haeba li-node li fetoha. Empa ona ha se mokhoa o tebileng; automation e betere haholo.

Ho fumana tlhahisoleseling mabapi le li-node, Puppet e na le mokhoa o bitsoang lintlha. Linnete - ena ke tlhahisoleseling mabapi le node, e fumanehang ka lipontšo ka mokhoa oa mefuta e tloaelehileng sebakeng sa mabitso sa lefatše. Mohlala, lebitso la moamoheli, mofuta oa sistimi ea ts'ebetso, meralo ea processor, lenane la basebelisi, lenane la marang-rang a marang-rang le liaterese tsa bona, le tse ling tse ngata. Lintlha li fumaneha ka har'a li-manifest le li-template joalo ka mefuta e tloaelehileng.

Mohlala oa ho sebetsa le lintlha:

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

Ha re bua ka molao, 'nete e na le lebitso (khoele) le boleng (mefuta e fapaneng e teng: likhoele, lihlopha, lidikishinari). Ja sete ya lintlha tse ahiloeng. U ka boela ua ngola ea hau. Babokelli ba lintlha ba hlalosoa joalo ka mesebetsi ho Rubykapa jwang lifaele tse sebetsang. Lintlha li ka boela tsa hlahisoa ka foromo lifaele tsa mongolo tse nang le data lintlheng.

Nakong ea ts'ebetso, moemeli oa lipopae o qala ka likopi tsohle tse fumanehang ho tsoa ho pappetserver ho ea node, ka mor'a moo e li hlahisa ebe e romela lintlha tse bokelitsoeng ho seva; Ka mor'a sena, seva se qala ho bokella lethathamo la libuka.

Lintlha ka mokhoa oa lifaele tse phethiloeng

Lintlha tse joalo li behiloe ka har'a li-module bukeng facts.d. Ehlile, lifaele li tlameha ho phethisoa. Ha li tsamaisoa, li tlameha ho hlahisa tlhahisoleseling ho tlhahiso e tloaelehileng ka YAML kapa key=value format.

Se ke oa lebala hore lintlha li sebetsa ho li-node tsohle tse laoloang ke seva sa poppet moo module ea hau e romelloang teng. Ka hona, ho script, ela hloko ho hlahloba hore na tsamaiso e na le mananeo ohle le lifaele tse hlokahalang hore 'nete ea hau e sebetse.

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

Lintlha tsa Ruby

Lintlha tse joalo li behiloe ka har'a li-module bukeng 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

Lintlha tsa mongolo

Lintlha tse joalo li behiloe li-node bukeng ea buka /etc/facter/facts.d ka Popi ea khale kapa /etc/puppetlabs/facts.d ho Popi e ncha.

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

Ho Fihla Linnete

Ho na le mekhoa e 'meli ea ho atamela lintlha:

  • ka bukantswe $facts: $facts['fqdn'];
  • ho sebelisa lebitso la nnete joalo ka lebitso le feto-fetohang: $fqdn.

Ho molemo ho sebelisa buka e hlalosang mantsoe $facts, kapa ho feta, bonts'a sebaka sa mabitso sa lefats'e ($::facts).

Mona ke karolo e amehang ea litokomane.

Liphetoho tse hahiloeng

Ntle le lintlha, ho boetse ho na le mefuta e meng, e fumanehang sebakeng sa mabitso sa lefatše.

  • lintlha tse tšeptjoang - mefuta e fapaneng e nkuoeng setifikeiting sa moreki (kaha setifikeiti hangata se fanoa ho seva sa poppet, moemeli a ke ke a nka feela le ho fetola setifikeiti sa sona, kahoo mefuta e "tšeptjoa"): lebitso la setifikeiti, lebitso la setifikeiti. host le domain, likeketso tse tsoang ho setifikeiti.
  • lintlha tsa seva - mefuta e fapaneng e amanang le tlhahisoleseling mabapi le mofuta oa seva, lebitso, aterese ea IP ea seva, tikoloho.
  • agent facts — mefuta e fapaneng e ekelitsoeng ka kotloloho ke moemeli oa lipopae, eseng ka 'nete - lebitso la setifikeiti, mofuta oa moemeli, mofuta oa lipopae.
  • mefuta e fapaneng - Mefuta e fapaneng ea Pappetmaster (sic!). E batla e tšoana le in lintlha tsa seva, le litekanyetso tsa paramethara ea tlhophiso lia fumaneha.
  • mefuta-futa ea mokopanyi - mefuta e fapaneng ea mohlophisi e fapaneng sebakeng se seng le se seng: lebitso la mojule oa hajoale le lebitso la mojule oo ntho ea hajoale e fihletsoeng ho eona. Li ka sebelisoa, mohlala, ho lekola hore na litlelase tsa hau tsa lekunutu ha li sebelisoe ka kotloloho ho tsoa ho li-module tse ling.

Keketso ea 1: mokhoa oa ho tsamaisa le ho lokisa lintho tsee kaofela?

Sengoliloeng sena se ne se na le mehlala e mengata ea lipopae, empa ha sea ka sa re bolella ho hang mokhoa oa ho tsamaisa khoutu ena. Ho lokile, kea itokisa.

Moemeli o lekane ho tsamaisa Puppet, empa maemong a mangata o tla hloka le seva.

Moemeli

Bonyane ho tloha ho mofuta oa XNUMX, liphutheloana tsa moemeli oa lipopae ho tloha polokelo ea semmuso ea Puppetlabs e na le litšepeho tsohle (ruby le mahakoe a tsamaisanang), kahoo ha ho na mathata a ho kenya (ke bua ka liphallelo tse thehiloeng ho Debian - ha re sebelise liphallelo tse thehiloeng ho RPM).

Boemong bo bonolo, ho sebelisa popi ea popi, ho lekane ho tsebisa moemeli ka mokhoa o se nang seva: ha feela khoutu ea popi e kopitsoa ho node, qala. 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

Ho molemo, ehlile, ho theha seva le ho tsamaisa li-agent ho li-node ka mokhoa oa daemon - hang hang ka halofo ea hora ba tla sebelisa tlhophiso e jarollotsoeng ho tsoa ho seva.

U ka etsisa mohlala oa push oa mosebetsi - ea ho node eo u e thahasellang 'me u qale sudo puppet agent -t. Senotlolo -t (--test) ha e le hantle e kenyelletsa likhetho tse 'maloa tse ka sebelisoang ka bonngoe. Likhetho tsena li kenyelletsa tse latelang:

  • se ke oa matha ka mokhoa oa daemon (ka ho sa feleng moemeli o qala ka mokhoa oa daemon);
  • koala ka mor'a ho sebelisa lethathamo la libuka (ka ho feletseng, moemeli o tla tsoela pele ho sebetsa le ho sebelisa tlhophiso hang ka halofo ea hora);
  • ngola lintlha tse qaqileng tsa mosebetsi;
  • hlahisa liphetoho lifaeleng.

Moemeli o na le mokhoa oa ho sebetsa ntle le liphetoho - o ka o sebelisa ha o sa tsebe hantle hore o ngotse tlhophiso e nepahetseng mme o batla ho hlahloba hore na hantle-ntle moemeli o tla fetola eng nakong ea ts'ebetso. Mokhoa ona o lumelloa ke parameter --noop moleng oa taelo: sudo puppet agent -t --noop.

Ho phaella moo, o ka khona ho nolofalletsa "log" ea "debugging" ea mosebetsi - ho eona, popi e ngola ka liketso tsohle tseo e li etsang: mabapi le mohloli oo o ntseng o sebetsa hona joale, ka mekhahlelo ea mohloli ona, mabapi le hore na o qala mananeo afe. Ha e le hantle, sena ke parameter --debug.

Seva

Nke ke ka nahana ka ho hlophisoa ka botlalo ha pappetserver le ho e romella khoutu ho eona sehloohong sena; Ke tla re feela ka ntle ho lebokose ho na le mofuta o sebetsang ka botlalo oa seva o sa hlokeng tlhophiso e eketsehileng ho sebetsa le palo e nyane ea nodes (ho re, ho fihla ho lekgolo). Palo e kholoanyane ea li-node e tla hloka tokiso - ka ho sa feleng, puppetserver e qala basebetsi ba sa feteng ba bane, bakeng sa ts'ebetso e kholo o hloka ho eketsa palo ea bona mme o seke oa lebala ho eketsa meeli ea mohopolo, ho seng joalo seva se tla bokella litšila hangata.

Ho romelloa ha khoutu - haeba u e hloka kapele le ha bonolo, sheba (ho r10k)[https://github.com/puppetlabs/r10k], bakeng sa lisebelisoa tse nyane e lokela ho lekana.

Sehlomathiso sa 2: Litaelo tsa Khoutu

  1. Beha mabaka ohle ka litlelase le litlhaloso.
  2. Boloka litlelase le litlhaloso ho li-module, eseng ho li-node tse hlalosang.
  3. Sebelisa lintlha.
  4. Se ke oa etsa li-ifs ho latela mabitso a baeti.
  5. Ikutloe u lokolohile ho kenya liparamente bakeng sa litlelase le litlhaloso - sena se betere ho feta mohopolo o hlakileng o patiloeng 'meleng oa sehlopha/tlhaloso.

Ke tla hlalosa hore na ke hobane'ng ha ke khothalletsa ho etsa sena sehloohong se latelang.

fihlela qeto e

Ha re phetheleng ka selelekela. Sehloohong se latelang ke tla u bolella ka Hiera, ENC le PuppetDB.

Ke basebelisi ba ngolisitsoeng feela ba ka kenyang letsoho phuputsong. kenaka kopo.

Ebile, ho na le lintho tse ling tse ngata - nka ngola lingoliloeng ka lihlooho tse latelang, khetha seo u ka ratang ho bala ka sona:

  • 59,1%Mehaho e tsoetseng pele ea lipopae - tse ling tsa boemo bo latelang: loops, 'mapa le lipolelo tse ling tsa lambda, babokelli ba lisebelisoa, lisebelisoa tse romelloang kantle ho naha le puisano ea batho ba bang ka Puppet, tags, providers, abstract data types.13
  • 31,8%"Ke 'na mookameli oa' mè oa ka" kapa kamoo re Avito re entseng metsoalle le li-server tse 'maloa tsa poppet tsa liphetolelo tse fapaneng,' me, ha e le hantle, karolo e mabapi le ho tsamaisa seva sa poppet.7
  • 81,8%Mokhoa oa ho ngola khoutu ea popi: lisebelisoa, litokomane, tlhahlobo, CI/CD.18

Basebelisi ba 22 ba ile ba khetha. Basebelisi ba 9 ba ile ba hana.

Source: www.habr.com