Ro-ràdh don Phupaidean

Is e siostam riaghlaidh rèiteachaidh a th’ ann am pupaidean. Tha e air a chleachdadh gus luchd-aoigheachd a thoirt chun staid a tha thu ag iarraidh agus an stàit seo a chumail suas.

Tha mi air a bhith ag obair le Puppet airson còrr air còig bliadhna a-nis. Tha an teacsa seo gu bunaiteach na chruinneachadh eadar-theangachadh agus ath-òrdachadh de phrìomh phuingean bhon phàipearan oifigeil, a leigeas le luchd-tòiseachaidh brìgh a’ phupaidean a thuigsinn gu sgiobalta.

Ro-ràdh don Phupaidean

Fiosrachadh bunaiteach

Tha siostam-obrachaidh Puppet na fhrithealaiche-cliant, ged a tha e cuideachd a' toirt taic do dh'obair gun fhrithealaiche le comas-gnìomh cuingealaichte.

Thathas a’ cleachdadh modal gnìomh tarraing: gu bunaiteach, aon uair gach leth uair a thìde, bidh teachdaichean a ’cur fios chun t-seirbheisiche airson rèiteachadh agus ga chuir an sàs. Ma tha thu air a bhith ag obair le Ansible, bidh iad a’ cleachdadh modal putaidh eadar-dhealaichte: bidh an rianaire a’ tòiseachadh a’ phròiseas a bhith a’ cur an rèiteachaidh an sàs, cha chuir an luchd-dèiligidh fhèin dad an sàs.

Rè conaltradh lìonra, bidh crioptachadh TLS dà-shligheach air a chleachdadh: tha na h-iuchraichean prìobhaideach aca fhèin agus na teisteanasan co-fhreagarrach aig an fhrithealaiche agus an neach-dèiligidh. Mar as trice bidh am frithealaiche a’ toirt seachad teisteanasan airson teachdaichean, ach ann am prionnsapal tha e comasach CA taobh a-muigh a chleachdadh.

Ro-ràdh do manifestos

Ann am briathrachas Puppet chun an fhrithealaiche phupaidean ceangail nodan (nodan). Tha an rèiteachadh airson na nodan sgrìobhte ann am manifestos ann an cànan prògramadh sònraichte - Puppet DSL.

Is e cànan dearbhach a th’ ann am pupaidean DSL. Tha e ag innse mu staid miannaichte an nód ann an cruth dearbhaidhean de ghoireasan fa leth, mar eisimpleir:

  • Tha am faidhle ann agus tha susbaint sònraichte ann.
  • Tha am pasgan air a stàladh.
  • Tha an t-seirbheis air tòiseachadh.

Faodaidh goireasan a bhith eadar-cheangailte:

  • Tha eisimeileachd ann, bheir iad buaidh air an òrdugh anns a bheil goireasan air an cleachdadh.
    Mar eisimpleir, “stàlaich am pasgan an-toiseach, an uairsin deasaich am faidhle rèiteachaidh, agus an uairsin tòisich an t-seirbheis.”
  • Tha fiosan ann - ma tha goireas air atharrachadh, bidh e a’ cur fiosan gu na goireasan a tha fo-sgrìobhadh dha.
    Mar eisimpleir, ma dh'atharraicheas am faidhle rèiteachaidh, faodaidh tu an t-seirbheis ath-thòiseachadh gu fèin-obrachail.

A bharrachd air an sin, tha gnìomhan agus caochladairean aig Puppet DSL, a bharrachd air aithrisean cumhach agus luchd-taghaidh. Thathas cuideachd a’ toirt taic do dhiofar uidheamachdan teamplaid - EPP agus ERB.

Tha pupaidean sgrìobhte ann an Ruby, agus mar sin tha mòran de na togalaichean agus na teirmean air an toirt às an sin. Leigidh Ruby leat Pupaidean a leudachadh - cuir loidsig iom-fhillte, seòrsachan ghoireasan ùra, gnìomhan.

Fhad ‘s a tha Puppet a’ ruith, tha comharran airson gach nód sònraichte air an fhrithealaiche air an cur ri chèile ann an eòlaire. eòlaire na liosta de ghoireasan agus na dàimhean aca an dèidh obrachadh a-mach luach gnìomhan, caochladairean agus leudachadh air aithrisean cumhach.

Syntax agus stoidhle còd

Seo earrannan de na sgrìobhainnean oifigeil a chuidicheas tu gus an co-chòrdadh a thuigsinn mura h-eil na h-eisimpleirean a chaidh a thoirt seachad gu leòr:

Seo eisimpleir de cò ris a tha am manifesto coltach:

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

Chan eil indentation agus briseadh loidhne mar phàirt riatanach den fhoillseachadh, ach tha moladh ann iùl stoidhle. Geàrr-chunntas:

  • Chan eilear a’ cleachdadh indents dà-fànais, tabaichean.
  • Tha beàrnan air an sgaradh le beàrnan; chan eil beàrnan air an sgaradh le beàrnan.
  • cromagan às deidh gach paramadair, a’ toirt a-steach am fear mu dheireadh. Tha gach paramadair air loidhne air leth. Tha eisgeachd air a dhèanamh airson a ’chùis gun pharamadairean agus aon paramadair: faodaidh tu sgrìobhadh air aon loidhne agus gun chromag (i.e. resource { 'title': } и resource { 'title': param => value }).
  • Bu chòir na saighdean air na paramadairean a bhith aig an aon ìre.
  • Tha saighdean dàimh stòrais air an sgrìobhadh air am beulaibh.

Àite nam faidhlichean air pappetserver

Airson tuilleadh mìneachaidh, bheir mi a-steach am bun-bheachd “root directory”. Is e an eòlaire freumh an eòlaire anns a bheil an rèiteachadh Pupaidean airson nód sònraichte.

Bidh an eòlaire freumha ag atharrachadh a rèir an dreach de Phupaidean agus na h-àrainneachdan a thathar a’ cleachdadh. Tha àrainneachdan nan seataichean rèiteachaidh neo-eisimeileach a tha air an stòradh ann an clàran fa leth. Mar as trice air a chleachdadh ann an co-bhonn ri git, agus sa chùis sin bidh àrainneachdan air an cruthachadh bho mheuran git. Mar sin, tha gach nód suidhichte ann an aon àrainneachd no eile. Faodar seo a rèiteachadh air an nód fhèin, no ann an ENC, air am bi mi a’ bruidhinn san ath artaigil.

  • Anns an treas dreach ("seann Phupaid") bha am bun-eòlaire /etc/puppet. Tha cleachdadh àrainneachdan roghainneil - mar eisimpleir, cha bhith sinn gan cleachdadh leis an t-seann Phupaidean. Ma thèid àrainneachdan a chleachdadh, mar as trice bidh iad air an stòradh a-staigh /etc/puppet/environments, bidh am freumh-eòlaire na chlàr àrainneachd. Mura tèid àrainneachdan a chleachdadh, bidh an eòlaire freumha mar an eòlaire bunaiteach.
  • A’ tòiseachadh bhon cheathramh dreach (“Puppet ùr”), dh’ fhàs cleachdadh àrainneachdan èigneachail, agus chaidh an eòlaire bunaiteach a ghluasad gu /etc/puppetlabs/code. A rèir sin, tha àrainneachdan air an stòradh a-staigh /etc/puppetlabs/code/environments, is e eòlaire freumh an eòlaire àrainneachd.

Feumaidh fo-eòlaire a bhith anns an eòlaire root manifests, anns a bheil aon no barrachd thaisbeanaidhean a’ toirt cunntas air na nodan. A bharrachd air an sin, bu chòir fo-sgrìobhadh a bhith ann modules, anns a bheil na modalan. Innsidh mi dhut dè na modalan a th 'ann beagan nas fhaide air adhart. A bharrachd air an sin, is dòcha gu bheil fo-sgrìobhadh aig an t-seann Phupaidean cuideachd files, anns a bheil diofar fhaidhlichean a nì sinn leth-bhreac gu na nodan. Anns a 'Puppet ùr, tha na faidhlichean uile air an cur ann am modalan.

Tha an leudachadh aig na faidhlichean follaiseach .pp.

Eisimpleir no dhà de sabaid

Tuairisgeul air an nód agus an goireas air

Air an nód server1.testdomain feumar faidhle a chruthachadh /etc/issue le susbaint Debian GNU/Linux n l. Feumaidh am faidhle a bhith le neach-cleachdaidh agus buidheann root, feumaidh còraichean-slighe a bhith 644.

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

Dàimhean eadar goireasan air nód

Air an nód server2.testdomain feumaidh nginx a bhith a 'ruith, ag obair le rèiteachadh a chaidh ullachadh roimhe.

Leig leinn an duilgheadas a mhilleadh:

  • Feumaidh am pasgan a bhith air a stàladh nginx.
  • Tha e riatanach na faidhlichean rèiteachaidh a chopaigeadh bhon fhrithealaiche.
  • Feumaidh an t-seirbheis a bhith a’ ruith nginx.
  • Ma thèid an rèiteachadh ùrachadh, feumar an t-seirbheis ath-thòiseachadh.

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

Airson seo a dhèanamh, feumaidh tu timcheall air an àite faidhle a leanas air an fhrithealaiche phupaidean:

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

Seòrsaichean Goireasan

Gheibhear liosta iomlan de na seòrsaichean ghoireasan le taic an seo anns na sgrìobhainnean, an seo bheir mi cunntas air còig seòrsaichean bunaiteach, a tha nam chleachdadh gu leòr airson a’ mhòr-chuid de dhuilgheadasan fhuasgladh.

faidhl

A’ riaghladh fhaidhlichean, seòlaidhean, symlinks, na th’ annta, agus còraichean-slighe.

Paramadairean:

  • ainm stòrais - slighe chun fhaidhle (roghainneil)
  • slighe - slighe chun fhaidhle (mura h-eil e air a shònrachadh san ainm)
  • dèanamh cinnteach - seòrsa faidhle:
    • absent - sguab às faidhle
    • present - feumaidh faidhle de sheòrsa sam bith a bhith ann (mura h-eil faidhle ann, thèid faidhle cunbhalach a chruthachadh)
    • file - faidhle cunbhalach
    • directory - eòlaire
    • link - ceangal
  • clàr na làraich - susbaint faidhle (freagarrach a-mhàin airson faidhlichean àbhaisteach, chan urrainnear a chleachdadh còmhla ri an tùs no targaid)
  • an tùs - ceangal ris an t-slighe às a bheil thu airson lethbhreac a dhèanamh de shusbaint an fhaidhle (cha ghabh a chleachdadh còmhla ri clàr na làraich no targaid). Faodar a shònrachadh mar an dàrna cuid URI le sgeama puppet: (an uairsin thèid faidhlichean bhon fhrithealaiche phupaidean a chleachdadh), agus leis an sgeama http: (Tha mi an dòchas gu bheil e soilleir dè a thachras sa chùis seo), agus eadhon leis an diagram file: no mar shlighe iomlan às aonais sgeama (an uairsin thèid am faidhle bhon FS ionadail air an nód a chleachdadh)
  • targaid - far am bu chòir don symlink comharrachadh (cha ghabh a chleachdadh còmhla ri clàr na làraich no an tùs)
  • sealbhadair - an neach-cleachdaidh aig am bu chòir am faidhle a bhith aige
  • buidheann - a’ bhuidheann dham bu chòir am faidhle a bhith
  • modh - ceadan faidhle (mar shreang)
  • ath-ghairm - a’ comasachadh giollachd eòlaire ath-chuairteach
  • purge - a’ comasachadh cuir às do fhaidhlichean nach eil air am mìneachadh ann am Puppet
  • feachd - a’ comasachadh clàran a dhubhadh às nach eil air am mìneachadh ann am Puppet

Pasgan

A 'stàladh agus a' toirt air falbh pacaidean. Comasach air fiosan a làimhseachadh - ath-shuidheachadh a’ phacaid ma tha am paramadair air a shònrachadh reinstall_on_refresh.

Paramadairean:

  • ainm stòrais - ainm pacaid (roghainneil)
  • ainm - ainm pacaid (mura h-eil e air a shònrachadh san ainm)
  • solaraiche - manaidsear pacaid ri chleachdadh
  • dèanamh cinnteach - staid pacaid a tha thu ag iarraidh:
    • present, installed - dreach sam bith air a chuir a-steach
    • latest - an tionndadh as ùire air a chuir a-steach
    • absent - air a sguabadh às (apt-get remove)
    • purged - air a sguabadh às còmhla ri faidhlichean rèiteachaidh (apt-get purge)
    • held - tha dreach pacaid glaiste (apt-mark hold)
    • любая другая строка - tha an dreach ainmichte air a chuir a-steach
  • reinstall_on_refresh - ma tha true, an uairsin nuair a gheibhear am fios thèid am pasgan ath-shuidheachadh. Feumail airson sgaoilidhean stèidhichte air stòr, far am bi feum air pasganan ath-thogail nuair a dh’ atharraicheas tu crìochan togail. Deònach false.

seirbheis

A 'riaghladh sheirbheisean. Comasach air fiosan a phròiseasadh - ath-thòiseachadh an t-seirbheis.

Paramadairean:

  • ainm stòrais - seirbheis ri riaghladh (roghainneil)
  • ainm - an t-seirbheis a dh’ fheumar a riaghladh (mura h-eil e air a shònrachadh san ainm)
  • dèanamh cinnteach - an staid seirbheis a tha thu ag iarraidh:
    • running - air bhog
    • stopped - stad
  • cothrom a thoirt do - a’ cumail smachd air comas an t-seirbheis a thòiseachadh:
    • true - tha autorun air a chomasachadh (systemctl enable)
    • mask - falaichte (systemctl mask)
    • false - tha autorun à comas (systemctl disable)
  • ath-thòisich - àithne gus an t-seirbheis ath-thòiseachadh
  • inbhe - àithne sùil a thoirt air inbhe seirbheis
  • air tòiseachadh - comharraich a bheil initscript na seirbheis a’ toirt taic do ath-thòiseachadh. Ma tha false agus tha am paramadair air a shònrachadh ath-thòisich - luach am paramadair seo air a chleachdadh. Ma tha false agus paramadair ath-thòisich chan eil e air a shònrachadh - tha an t-seirbheis air a stad agus air tòiseachadh air ath-thòiseachadh (ach tha systemd a’ cleachdadh an àithne systemctl restart).
  • inbhe - comharraich a bheil initscript na seirbheis a’ toirt taic don àithne status. Ma tha false, an uairsin thèid an luach paramadair a chleachdadh inbhe. Deònach true.

exec

A’ ruith òrdughan bhon taobh a-muigh. Mura sònraich thu paramadairean a 'cruthachadh, ach ma, mura no a-rithist, thèid an àithne a ruith a h-uile uair a thèid Puppet a ruith. Comasach air fiosan a phròiseasadh - a’ ruith àithne.

Paramadairean:

  • ainm stòrais - òrdugh ri chur an gnìomh (roghainneil)
  • an àithne - an àithne ri chur an gnìomh (mura h-eil e air a shònrachadh san ainm)
  • slighe - slighean anns am faicear am faidhle so-ghnìomhaichte
  • ach ma - ma chaidh an àithne a tha air a shònrachadh sa pharamadair seo a chrìochnachadh le còd tilleadh neoni, thèid am prìomh àithne a chuir gu bàs
  • mura - ma tha an àithne a tha air a shònrachadh sa pharamadair seo air a chrìochnachadh le còd tilleadh neo-neoni, thèid am prìomh àithne a chuir gu bàs
  • a 'cruthachadh - mura h-eil am faidhle a chaidh a shònrachadh sa pharamadair seo ann, thèid am prìomh àithne a chuir gu bàs
  • a-rithist - ma tha true, an uairsin cha tèid an àithne a ruith ach nuair a gheibh an exec seo fios bho ghoireasan eile
  • cwd - eòlaire às an ruith thu an àithne
  • -cleachdaidh - an neach-cleachdaidh bhon a ruitheas an àithne
  • solaraiche - mar a ruitheas tu an àithne:
    • suidheachadh - tha pròiseas cloinne dìreach air a chruthachadh, bi cinnteach gun sònraich thu slighe
    • sligean - tha an àithne air a chuir air bhog san t-slige /bin/sh, chan fhaodar a shònrachadh slighe, faodaidh tu globbing, pìoban agus feartan slige eile a chleachdadh. Mar as trice lorgar gu fèin-ghluasadach ma tha caractaran sònraichte ann (|, ;, &&, || msaa).

cron

A 'cumail smachd air cronjobs.

Paramadairean:

  • ainm stòrais - dìreach seòrsa de dh'aithnichear
  • dèanamh cinnteach - staid a 'chrùin:
    • present - cruthaich mura h-eil e ann
    • absent - cuir às ma tha e ann
  • an àithne — ciod an àithne a ruith
  • àrainneachd - anns an àrainneachd airson an àithne a ruith (liosta de chaochladairean àrainneachd agus na luachan aca tro =)
  • -cleachdaidh - bhon neach-cleachdaidh a ruitheas an àithne
  • mionaid, uair, tron t-seachdain, mìos, mìos - cuin a ruitheas tu cron. Mura h-eil gin de na buadhan seo air a shònrachadh, bidh a luach sa chrontab *.

Ann am Puppet 6.0 cron mar gum biodh air a thoirt air falbh bhon bhogsa ann am puppetserver, agus mar sin chan eil sgrìobhainnean sam bith air an làrach choitcheann. Ach esan tha anns a' bhogsa ann an àidseant phupaidean, agus mar sin chan eil feum air a stàladh air leth. Chì thu na sgrìobhainnean air a shon anns na sgrìobhainnean airson a’ chòigeamh dreach de Phupaidean, no air GitHub.

Mu dheidhinn goireasan san fharsaingeachd

Riatanasan airson goireas sònraichte

Is e am mearachd as cumanta a choinnicheas sinn Dearbhadh dùblaichte. Bidh a’ mhearachd seo a’ tachairt nuair a nochdas dà ghoireas no barrachd den aon sheòrsa leis an aon ainm san eòlaire.

Mar sin, sgrìobhaidh mi a-rithist: cha bu chòir goireasan den aon sheòrsa leis an aon tiotal a bhith ann am manifests airson an aon nód!

Aig amannan feumar pacaidean leis an aon ainm a chuir a-steach, ach le manaidsearan pacaid eadar-dhealaichte. Anns a 'chùis seo, feumaidh tu am paramadair a chleachdadh namegus am mearachd a sheachnadh:

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

Tha roghainnean co-chosmhail aig seòrsachan ghoireasan eile gus cuideachadh le dùblachadh a sheachnadh - name у seirbheis, command у exec, Agus mar sin air adhart.

Metaparameters

Tha cuid de pharaimearan sònraichte aig gach seòrsa goireas, ge bith dè an nàdar a th’ ann.

Liosta slàn de pharaimearan meta ann an sgrìobhainnean a’ Phupaidean.

Liosta ghoirid:

  • a dhìth - tha am paramadair seo a’ nochdadh dè na goireasan a tha an urra ris a’ ghoireas seo.
  • mus - Tha am paramadair seo a’ sònrachadh dè na goireasan a tha an urra ris a’ ghoireas seo.
  • fo-sgrìobhadh - tha am paramadair seo a’ sònrachadh dè na goireasan a gheibh an goireas seo fiosan.
  • fios a chuir thuca - Tha am paramadair seo a’ sònrachadh dè na goireasan a gheibh fios bhon ghoireas seo.

Gabhaidh a h-uile metaparameters clàraichte an dàrna cuid ri aon cheangal stòrais no ri sreath de cheanglaichean eadar camagan ceàrnach.

Ceanglaichean gu goireasan

Chan eil ann an ceangal stòrais ach iomradh air a’ ghoireas. Tha iad air an cleachdadh sa mhòr-chuid gus eisimeileachd a chomharrachadh. Ma bheir thu iomradh air goireas nach eil ann, thig mearachd cruinneachaidh.

Tha co-chòrdadh a’ cheangail mar a leanas: seòrsa stòrais le prìomh litir (ma tha dà-choloin anns an t-seòrsa ainm, tha gach pàirt den ainm eadar na coloinidhean air a chalpachadh), an uairsin ainm a’ ghoireas eadar camagan ceàrnagach (cùis an ainm chan eil e ag atharrachadh!). Cha bu chòir beàrnan a bhith ann; tha camagan ceàrnagach air an sgrìobhadh dìreach às deidh ainm an t-seòrsa.

Eisimpleir:

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

eisimeileachd agus brathan

Sgrìobhainnean an seo.

Mar a chaidh a ràdh roimhe, tha eisimeileachd sìmplidh eadar goireasan tar-ghluasadach. Air an t-slighe, bi faiceallach nuair a chuireas tu eisimeileachd ris - faodaidh tu eisimeileachd cearcallach a chruthachadh, a dh ’adhbhraicheas mearachd cruinneachaidh.

Eu-coltach ri eisimeileachd, chan eil fiosan gluasadach. Tha na riaghailtean a leanas an sàs airson fiosan:

  • Ma gheibh an goireas fios, thèid ùrachadh. Tha na gnìomhan ùrachaidh an urra ris an t-seòrsa stòrais - exec ruith an àithne, seirbheis ath-thòisich an t-seirbheis, Pasgan ath-shuidheachadh a 'phacaid. Mura h-eil gnìomh ùrachaidh air a mhìneachadh aig a’ ghoireas, cha tachair dad.
  • Rè aon ruith de Phupaidean, chan eil an goireas air ùrachadh barrachd air aon uair. Tha seo comasach leis gu bheil fiosan a’ toirt a-steach eisimeileachd agus nach eil cearcallan anns a’ ghraf eisimeileachd.
  • Ma dh’ atharraicheas Puppet staid goireas, bidh an goireas a’ cur fiosan chun a h-uile goireas a tha fo-sgrìobhadh ann.
  • Ma thèid goireas ùrachadh, cuiridh e fios chun a h-uile goireas air a bheil ballrachd ann.

A 'làimhseachadh paramadairean neo-ainmichte

Mar riaghailt, mura h-eil luach bunaiteach aig cuid de paramadair stòrais agus nach eil am paramadair seo air a shònrachadh anns an fhoillseachadh, cha atharraich Puppet an togalach seo airson an goireas co-fhreagarrach air an nód. Mar eisimpleir, ma tha goireas de sheòrsa faidhl paramadair nach eil air a shònrachadh owner, an uairsin chan atharraich Puppet sealbhadair an fhaidhle fhreagarrach.

Ro-ràdh do chlasaichean, caochladairean agus mìneachaidhean

Seach gu bheil grunn nodan againn aig a bheil an aon phàirt den rèiteachadh, ach tha eadar-dhealachaidhean ann cuideachd - air neo dh'fhaodadh sinn a mhìneachadh ann an aon bhloc node {}. Gu dearbh, faodaidh tu dìreach pàirtean co-ionann den rèiteachadh a chopaigeadh, ach san fharsaingeachd is e droch fhuasgladh a tha seo - bidh an rèiteachadh a ’fàs, agus ma dh’ atharraicheas tu am pàirt coitcheann den rèiteachadh, feumaidh tu an aon rud a dheasachadh ann an iomadh àite. Aig an aon àm, tha e furasta mearachd a dhèanamh, agus san fharsaingeachd, chaidh am prionnsapal DRY (na dèan a-rithist thu fhèin) a chruthachadh airson adhbhar.

Gus an duilgheadas seo fhuasgladh tha leithid de dhealbhadh ann класс.

Clasaichean

Clas tha e na bhloc ainmichte de chòd poppet. Tha feum air clasaichean gus còd ath-chleachdadh.

An toiseach feumar cunntas a thoirt air a’ chlas. Chan eil an tuairisgeul fhèin a’ cur goireasan sam bith an àite sam bith. Tha an clas air a mhìneachadh ann an taisbeanaidhean:

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

Às deidh seo faodar an clas a chleachdadh:

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

Eisimpleir bhon obair roimhe - gluaisidh sinn stàladh agus rèiteachadh nginx gu clas:

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
}

Caochlaidhean

Chan eil an clas bhon eisimpleir roimhe sùbailte idir oir bidh e an-còmhnaidh a’ toirt an aon rèiteachadh nginx. Dèanamaid an t-slighe gu caochladair rèiteachaidh, an uairsin faodar an clas seo a chleachdadh gus nginx a stàladh le rèiteachadh sam bith.

Faodar a dhèanamh cleachdadh caochladairean.

An aire: tha caochladairean ann am Puppet do-ruigsinneach!

A bharrachd air an sin, chan fhaighear cothrom air caochladair ach às deidh dha a bhith air ainmeachadh, air neo bidh luach an caochlaideach undef.

Eisimpleir de bhith ag obair le caochladairean:

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

Tha pupaidean àiteachan ainmean, agus tha na caochladairean, a rèir sin, aig raon faicsinneachd: Faodar caochladair leis an aon ainm a mhìneachadh ann an ainmean eadar-dhealaichte. Nuair a thathar a’ rèiteach luach caochladair, thèid an caochladair a sgrùdadh anns an àrainn ainmean gnàthach, an uairsin anns an ainmspàs cuairteachaidh, agus mar sin air adhart.

Eisimpleirean de dh'ainm-àite:

  • cruinneil - bidh caochladairean taobh a-muigh a 'chlas no tuairisgeul nòtaichean a' dol ann;
  • node namespace anns an tuairisgeul nód;
  • ainm clas ann an tuairisgeul a’ chlas.

Gus mì-chinnt a sheachnadh nuair a gheibh thu cothrom air caochladair, faodaidh tu an t-ainm-àite a shònrachadh anns an ainm caochlaideach:

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

Aontaichidh sinn gu bheil an t-slighe gu rèiteachadh nginx na laighe anns a’ chaochladair $nginx_conf_source. An uairsin seallaidh an clas mar seo:

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
}

Ach, tha an eisimpleir a chaidh a thoirt seachad dona leis gu bheil beagan “eòlas dìomhair” ann gu bheil caochladair le leithid agus ainm air a chleachdadh an àiteigin taobh a-staigh a’ chlas. Tha e tòrr nas ceart an t-eòlas seo a dhèanamh coitcheann - faodaidh crìochan a bhith aig clasaichean.

Paramadairean clas nan caochladairean ann an ainm a’ chlas, tha iad air an sònrachadh ann am bann-cinn a’ chlas agus faodar an cleachdadh mar chaochladairean cunbhalach ann am bodhaig a’ chlas. Tha luachan paramadair air an sònrachadh nuair a thathar a’ cleachdadh a’ chlas anns an fhoillseachadh.

Faodar am paramadair a shuidheachadh gu luach bunaiteach. Mura h-eil luach bunaiteach aig paramadair agus mura tèid an luach a shuidheachadh nuair a thèid a chleachdadh, adhbharaichidh e mearachd cruinneachaidh.

Nach dèan sinn parameterize a’ chlas bhon eisimpleir gu h-àrd agus cuir dà pharamadair ris: is e a ’chiad fhear, a tha riatanach, an t-slighe gu rèiteachadh, agus an dàrna fear, roghainneil, is e ainm a’ phacaid le nginx (ann an Debian, mar eisimpleir, tha pasganan ann 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',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

Ann am Puppet, tha caochladairean air an sgrìobhadh. Ith iomadh seòrsa dàta. Mar as trice bidh seòrsaichean dàta air an cleachdadh gus luachan paramadair a chaidh a thoirt do chlasaichean agus mhìneachaidhean a dhearbhadh. Mura h-eil am paramadair a chaidh seachad a’ freagairt ris an t-seòrsa ainmichte, bidh mearachd cruinneachaidh a’ tachairt.

Tha an seòrsa air a sgrìobhadh dìreach ron ainm paramadair:

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

Clasaichean: cuir a-steach ainm clas vs clas{ 'classname':}

Tha gach clas na ghoireas de sheòrsa clas. Coltach ri seòrsa sam bith eile de ghoireas, chan fhaod dà eisimpleir den aon chlas a bhith air an aon nód.

Ma dh'fheuchas tu ri clas a chur ris an aon nód dà uair a 'cleachdadh class { 'classname':} (gun eadar-dhealachadh, le crìochan eadar-dhealaichte no co-ionann), bidh mearachd cruinneachaidh ann. Ach ma chleachdas tu clas anns an stoidhle stòrais, faodaidh tu a h-uile paramadair aige a shuidheachadh gu soilleir anns an fhollaiseach.

Ge-tà, ma chleachdas tu include, an uairsin faodar an clas a chuir ris cho tric ‘s a thogras tu. Is e an fhìrinn gu bheil include na ghnìomh neo-chomasach a nì sgrùdadh a bheil clas air a chur ris an eòlaire. Mura h-eil an clas san eòlaire, cuiridh e ris, agus ma tha e ann mu thràth, cha dèan e dad. Ach ann an cùis cleachdadh include Chan urrainn dhut paramadairean clas a shuidheachadh rè dearbhadh clas - feumaidh a h-uile paramadair riatanach a bhith air a shuidheachadh ann an stòr dàta taobh a-muigh - Hiera no ENC. Bruidhnidh sinn mun deidhinn san ath artaigil.

A’ mìneachadh

Mar a chaidh a ràdh sa bhloc roimhe, chan urrainn don aon chlas a bhith an làthair air nód barrachd air aon uair. Ach, ann an cuid de chùisean feumaidh tu a bhith comasach air an aon bhloc de chòd a chleachdadh le diofar pharaimearan air an aon nód. Ann am faclan eile, tha feum air goireas den t-seòrsa fhèin.

Mar eisimpleir, gus am modal PHP a stàladh, nì sinn na leanas ann an Avito:

  1. Stàlaich am pasgan leis a 'mhodal seo.
  2. Nach cruthaich sinn faidhle rèiteachaidh airson a’ mhodal seo.
  3. Bidh sinn a’ cruthachadh symlink ris an config airson php-fpm.
  4. Bidh sinn a’ cruthachadh symlink ris an config airson php cli.

Ann an leithid de chùisean, leithid dealbhadh mìneachadh (mìnich, seòrsa comharraichte, seòrsa stòrais comharraichte). Tha A Define coltach ri clas, ach tha eadar-dhealachaidhean ann: an toiseach, is e seòrsa stòrais a th’ anns gach Define, chan e goireas; san dàrna àite, tha paramadair so-thuigsinn aig gach mìneachadh $title, far a bheil ainm an stòrais a’ dol nuair a thèid fhoillseachadh. Dìreach mar a tha ann an clasaichean, feumar mìneachadh a dhèanamh an toiseach, agus an dèidh sin faodar a chleachdadh.

Eisimpleir nas sìmplidhe le modal airson 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' }
}

Tha an dòigh as fhasa air a’ mhearachd dearbhaidh dùblaichte a ghlacadh ann an Define. Bidh seo a’ tachairt ma tha goireas aig a’ mhìneachadh le ainm seasmhach, agus tha dhà no barrachd eisimpleirean den mhìneachadh seo air nód air choireigin.

Tha e furasta thu fhèin a dhìon bho seo: feumaidh ainm a bhith aig a h-uile goireas taobh a-staigh a’ mhìneachaidh a rèir $title. Mar roghainn eile, cuir goireasan ris gu neo-chomasach; anns a 'chùis as sìmplidh, tha e gu leòr na goireasan a tha cumanta anns a h-uile suidheachadh den mhìneachadh a ghluasad gu clas air leth agus an clas seo a thoirt a-steach don mhìneachadh - gnìomh include neo-chomasach.

Tha dòighean eile ann gus neo-chomasachd a choileanadh nuair a chuireas tu goireasan ris, is e sin a bhith a’ cleachdadh ghnìomhan defined и ensure_resources, ach innsidh mi sin dhut anns an ath phrògram.

eisimeileachd agus fiosan airson clasaichean agus mìneachaidhean

Bidh clasaichean agus mìneachaidhean a’ cur na riaghailtean a leanas ri làimhseachadh eisimeileachd agus brathan:

  • tha eisimeileachd air clas/sònrachadh a’ cur eisimeileachd air goireasan a’ chlas/a’ mìneachadh;
  • clas/sònraich eisimeileachd a’ cur eisimeileachd ris a h-uile goireas clas/mìneachaidh;
  • fios clas/mìneachaidh a’ cur fios gu goireasan uile a’ chlas/mhìneachaidh;
  • bidh ballrachd clas/mìnich a’ gabhail ris a h-uile goireas den chlas/mhìnich.

Aithrisean cumhach agus luchd-taghaidh

Sgrìobhainnean an seo.

if

Tha e sìmplidh an seo:

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

mura

mura h-eil e air ais: thèid am bloc còd a chuir gu bàs ma tha an abairt meallta.

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

chùis

Chan eil dad iom-fhillte an seo idir. Faodaidh tu luachan cunbhalach (sreangan, àireamhan, msaa), abairtean cunbhalach, agus seòrsachan dàta a chleachdadh mar luachan.

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

Luchd-taghaidh

Tha roghnaichear na thogail cànain coltach ri case, ach an àite bloc còd a chur an gnìomh, tillidh e luach.

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

Modalan

Nuair a tha an rèiteachadh beag, faodar a chumail gu furasta ann an aon fhoillseachadh. Ach mar as motha de rèiteachaidhean a tha sinn a’ toirt cunntas, is ann as motha de chlasaichean agus nodan a tha san fhoillseachadh, bidh e a’ fàs, agus bidh e mì-ghoireasach obrachadh leis.

A bharrachd air an sin, tha duilgheadas ath-chleachdadh còd ann - nuair a tha an còd gu lèir ann an aon fhoillseachadh, tha e duilich an còd seo a cho-roinn le feadhainn eile. Gus an dà dhuilgheadas seo fhuasgladh, tha eintiteas aig Puppet ris an canar modalan.

Modalan - is iad sin seataichean de chlasaichean, mhìneachaidhean agus buidhnean Pupaidean eile air an cur ann an eòlaire air leth. Ann am faclan eile, tha modal na phìos neo-eisimeileach de loidsig Pupaidean. Mar eisimpleir, is dòcha gu bheil modal ann airson a bhith ag obair le nginx, agus bidh e a’ toirt a-steach na tha agus dìreach na tha a dhìth gus obrachadh le nginx, no dh’ fhaodadh modal a bhith ann airson a bhith ag obair le PHP, agus mar sin air adhart.

Tha modalan air an tionndadh, agus tha eisimeileachd mhodalan air a chèile cuideachd a’ faighinn taic. Tha stòr fosgailte de mhodalan ann - Ceàrdach Phupaidean.

Air an fhrithealaiche phupaidean, tha modalan suidhichte ann am fo-eòlaire mhodalan an eòlaire freumh. Taobh a-staigh gach modal tha sgeama eòlaire àbhaisteach - manifests, faidhlichean, teamplaidean, lib, agus mar sin air adhart.

Structar faidhle ann am modal

Faodaidh na seòlaidhean a leanas a bhith ann am freumh a’ mhodal le ainmean tuairisgeulach:

  • manifests - tha manifestos ann
  • files - tha faidhlichean ann
  • templates - tha teamplaidean ann
  • lib - tha còd Ruby ann

Chan e liosta iomlan de chlàran is fhaidhlichean a tha seo, ach tha e gu leòr airson an artaigil seo airson a-nis.

Ainmean ghoireasan agus ainmean fhaidhlichean sa mhodal

Sgrìobhainnean an seo.

Chan urrainnear goireasan (clasaichean, mìneachaidhean) ann am modal ainmeachadh ge bith dè as toil leat. A bharrachd air an sin, tha conaltradh dìreach eadar ainm goireas agus ainm an fhaidhle anns am bi Puppet a’ coimhead airson tuairisgeul air a’ ghoireas sin. Ma bhriseas tu na riaghailtean ainmeachaidh, an uairsin chan fhaigh Puppet tuairisgeul a’ ghoireas, agus gheibh thu mearachd cruinneachaidh.

Tha na riaghailtean sìmplidh:

  • Feumaidh a h-uile goireas ann am modal a bhith ann an ainm a’ mhodal. Ma thèid am modal a ghairm foo, an uairsin bu chòir a h-uile goireas a tha ann a bhith air ainmeachadh foo::<anything>, no dìreach foo.
  • Feumaidh an goireas le ainm a’ mhodal a bhith san fhaidhle init.pp.
  • Airson goireasan eile, tha an sgeama ainmeachadh faidhle mar a leanas:
    • tha an ro-leasachan le ainm a’ mhodal air a thoirt air falbh
    • thèid slashes a chuir nan àite a h-uile coloin dùbailte, ma tha gin ann
    • leudachadh air a chur ris .pp

Seallaidh mi le eisimpleir. Canaidh sinn gu bheil mi a’ sgrìobhadh modal nginx. Tha na goireasan a leanas ann:

  • класс nginx air a mhìneachadh anns an fhoillseachadh init.pp;
  • класс nginx::service air a mhìneachadh anns an fhoillseachadh service.pp;
  • mìneachadh nginx::server air a mhìneachadh anns an fhoillseachadh server.pp;
  • mìneachadh nginx::server::location air a mhìneachadh anns an fhoillseachadh server/location.pp.

Templates

Gu cinnteach tha fios agad fhèin dè a th’ ann an teamplaidean; cha toir mi cunntas mionaideach orra an seo. Ach fàgaidh mi e dìreach gun fhios ceangal gu Wikipedia.

Mar a chleachdas tu teamplaidean: Faodar brìgh teamplaid a leudachadh a’ cleachdadh gnìomh template, a thèid seachad air an t-slighe chun an teamplaid. Airson goireasan seòrsa faidhl air a chleachdadh còmhla ri paramadair content. Mar eisimpleir, mar seo:

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

Seall an t-slighe <modulename>/<filename> a' ciallachadh file <rootdir>/modules/<modulename>/templates/<filename>.

A bharrachd air an sin, tha gnìomh ann inline_template - gheibh e teacsa an teamplaid mar chur-a-steach, chan e ainm an fhaidhle.

Taobh a-staigh teamplaidean, faodaidh tu a h-uile caochladair Pupaidean a chleachdadh san raon làithreach.

Bidh pupaidean a’ toirt taic do theamplaidean ann an cruth ERB agus EPP:

Beagan mu ERB

Structaran smachd:

  • <%= ВЫРАЖЕНИЕ %> - cuir a-steach luach an abairt
  • <% ВЫРАЖЕНИЕ %> - obraich a-mach luach abairt (gun a chuir a-steach). Mar as trice bidh aithrisean cumhach (ma tha) agus lùban (gach fear) a’ dol an seo.
  • <%# КОММЕНТАРИЙ %>

Tha abairtean ann an ERB sgrìobhte ann an Ruby (Is e Ruby Embedded a th’ ann an ERB).

Gus faighinn gu caochladairean bhon fhoillseachadh, feumaidh tu cuir ris @ ris an ainm caochlaideach. Gus briseadh loidhne a thoirt air falbh a nochdas às deidh togail smachd, feumaidh tu taga dùnaidh a chleachdadh -%>.

Eisimpleir de bhith a 'cleachdadh an teamplaid

Canaidh sinn gu bheil mi a’ sgrìobhadh modal airson smachd a chumail air ZooKeeper. Tha an clas le uallach airson an rèiteachadh a chruthachadh a’ coimhead rudeigin mar seo:

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

Agus an teamplaid co-fhreagarrach zoo.cfg.erb - Mar sin:

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

Fìrinnean agus caochlaidhean togte

Gu tric bidh am pàirt sònraichte den rèiteachadh an urra ris na tha a ’tachairt an-dràsta air an nód. Mar eisimpleir, a rèir dè a th’ ann an sgaoileadh Debian, feumaidh tu dreach no dreach eile den phacaid a stàladh. Faodaidh tu sùil a chumail air a h-uile càil seo le làimh, ag ath-sgrìobhadh nochdaidhean ma dh’ atharraicheas nodan. Ach chan e fìor dhòigh-obrach a tha seo; tha fèin-ghluasad mòran nas fheàrr.

Gus fiosrachadh fhaighinn mu nodan, tha inneal aig Puppet ris an canar fìrinnean. Fiosrachadh - is e seo fiosrachadh mun nód, a tha ri fhaighinn ann an taisbeanairean ann an cruth caochladairean àbhaisteach ann an àite ainmean cruinne. Mar eisimpleir, ainm aoigheachd, dreach siostam obrachaidh, ailtireachd pròiseasar, liosta luchd-cleachdaidh, liosta de eadar-aghaidh lìonra agus na seòlaidhean aca, agus mòran a bharrachd. Tha fìrinnean rim faighinn ann am manifestos agus teamplaidean mar chaochladairean cunbhalach.

Eisimpleir de bhith ag obair le fìrinnean:

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

Gu foirmeil, tha ainm (sreang) agus luach aig fìrinn (tha diofar sheòrsaichean rim faighinn: sreangan, arrays, faclairean). Ith seata de fhìrinnean togte. Faodaidh tu do chuid fhèin a sgrìobhadh cuideachd. Tha luchd-cruinneachaidh fiosrachaidh air am mìneachadh coltach ri gnìomhan ann an Rubyan dara cuid mar faidhlichean so-ghnìomhaichte. Faodar fìrinnean a thaisbeanadh anns an fhoirm cuideachd faidhlichean teacsa le dàta air na nodan.

Rè an obrachaidh, bidh an neach-ionaid pupaidean an-toiseach a ’dèanamh leth-bhreac den a h-uile neach-cruinneachaidh fiosrachaidh a tha ri fhaighinn bhon t-seirbheisiche pappet chun nód, às deidh sin bidh e gan cur air bhog agus a’ cur na fìrinnean cruinnichte chun t-seirbheisiche; Às deidh seo, tòisichidh am frithealaiche a’ cur ri chèile a’ chatalog.

Fìrinnean ann an cruth faidhlichean so-ghnìomhaichte

Tha fìrinnean mar seo air an cur ann am modalan san eòlaire facts.d. Gu dearbh, feumaidh na faidhlichean a bhith so-ghnìomhaichte. Nuair a thèid an ruith, feumaidh iad fiosrachadh a chuir a-mach gu toradh àbhaisteach ann an cruth YAML no key = luach.

Na dìochuimhnich gu bheil an fhìrinn a’ buntainn ris a h-uile nod a tha fo smachd an fhrithealaiche poppet dha bheil am modal agad air a chleachdadh. Mar sin, anns an sgriobt, bi faiceallach dèanamh cinnteach gu bheil na prògraman agus na faidhlichean uile a tha riatanach airson do fhìrinn obrachadh.

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

fìrinnean Ruby

Tha fìrinnean mar seo air an cur ann am modalan san eòlaire 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

Fìrinn teacsa

Tha fìrinnean mar seo air an cur air nodan san eòlaire /etc/facter/facts.d ann an seann Phupaid no /etc/puppetlabs/facts.d anns a' Phupaid ùr.

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

A 'faighinn gu na fìrinnean

Tha dà dhòigh air dèiligeadh ris na fìrinnean:

  • tron fhaclair $facts: $facts['fqdn'];
  • a’ cleachdadh an ainm fìrinn mar an t-ainm caochlaideach: $fqdn.

Tha e nas fheàrr faclair a chleachdadh $facts, no eadhon nas fheàrr, comharraich an t-ainm-àite cruinne ($::facts).

Seo an earrann iomchaidh de na sgrìobhainnean.

Caochlaidhean togte

A bharrachd air na fìrinnean, tha cuideachd cuid de chaochladairean, ri fhaighinn anns an ainm-àite cruinneil.

  • fìrinnean earbsach - caochladairean a thèid a thoirt bho theisteanas an neach-dèiligidh (leis gu bheil an teisteanas mar as trice air a thoirt seachad air frithealaiche poppet, chan urrainn don àidseant dìreach an teisteanas aige a ghabhail agus atharrachadh, agus mar sin tha na caochladairean “earbsach”): ainm an teisteanais, ainm an aoigheachd agus àrainn, leudachaidhean bhon teisteanas.
  • fìrinnean an fhrithealaiche - caochlaidhean co-cheangailte ri fiosrachadh mun fhrithealaiche - dreach, ainm, seòladh IP an fhrithealaiche, àrainneachd.
  • fìrinnean àidseant - caochladairean air an cur ris gu dìreach le àidseant phupaidean, agus chan ann le facter - ainm teisteanais, dreach àidseant, dreach pupaidean.
  • caochladairean maighstir - caochladairean Pappetmaster (sic!). Tha e mu dheidhinn an aon rud ri ann an fìrinnean an fhrithealaiche, a bharrachd air luachan paramadair rèiteachaidh rim faighinn.
  • caochladairean compiler - caochladairean cruinneachaidh a tha eadar-dhealaichte anns gach raon: ainm a’ mhodal gnàthach agus ainm a’ mhodal anns an deach inntrigeadh dhan nì làithreach. Faodar an cleachdadh, mar eisimpleir, gus dèanamh cinnteach nach eil na clasaichean prìobhaideach agad gan cleachdadh gu dìreach bho mhodalan eile.

Cur-ris 1: ciamar a ruitheas tu agus dì-bhugaich seo uile?

Anns an artaigil bha mòran eisimpleirean de chòd pupaidean, ach cha do dh'innis e dhuinn idir mar a ruitheas tu an còd seo. Uill, tha mi gam cheartachadh fhìn.

Tha àidseant gu leòr airson Puppet a ruith, ach sa mhòr-chuid de chùisean bidh feum agad air frithealaiche cuideachd.

Àidseant

Co-dhiù bho dhreach XNUMX, pasganan àidseant phupaidean bho ionad-tasgaidh oifigeil Puppetlabs cuir a-steach a h-uile eisimeileachd (ruby agus na seudan co-fhreagarrach), agus mar sin chan eil duilgheadasan stàlaidh ann (tha mi a’ bruidhinn mu sgaoilidhean stèidhichte air Debian - cha bhith sinn a ’cleachdadh sgaoilidhean stèidhichte air RPM).

Anns a ’chùis as sìmplidh, gus an rèiteachadh pupaidean a chleachdadh, tha e gu leòr an neach-ionaid a chuir air bhog ann am modh gun fhrithealaiche: fhad‘ s a thèid an còd pupaidean a chopaigeadh chun nód, cuir air bhog 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

Tha e nas fheàrr, gu dearbh, am frithealaiche a stèidheachadh agus riochdairean a ruith air na nodan ann am modh daemon - an uairsin aon uair gach leth uair a thìde cuiridh iad an rèiteachadh a chaidh a luchdachadh sìos bhon fhrithealaiche.

Faodaidh tu atharrais a dhèanamh air a’ mhodail obrach putadh - rachaibh chun nód anns a bheil ùidh agad agus tòisich sudo puppet agent -t. iuchair -t (--test) gu dearbh a’ toirt a-steach grunn roghainnean a dh’ fhaodar a chomasachadh leotha fhèin. Tha na roghainnean sin a’ toirt a-steach na leanas:

  • na ruith ann am modh deamhan (gu gnàthach bidh an neach-ionaid a’ tòiseachadh ann am modh deamhan);
  • dùin sìos às deidh dhut a ’chatalog a chuir an sàs (gu gnàthach, cumaidh an neach-ionaid ag obair agus a’ cur an gnìomh an rèiteachadh aon uair gach leth uair a thìde);
  • sgrìobh clàr-obrach mionaideach;
  • seall atharrachaidhean ann am faidhlichean.

Tha modh obrachaidh aig an neach-ionaid gun atharrachaidhean - faodaidh tu a chleachdadh nuair nach eil thu cinnteach gu bheil thu air an rèiteachadh ceart a sgrìobhadh agus gu bheil thu airson faighinn a-mach dè dìreach a dh’ atharraicheas an neach-ionaid rè obrachadh. Tha am modh seo air a chomasachadh leis a’ pharamadair --noop air an loidhne-àithne: sudo puppet agent -t --noop.

A bharrachd air an sin, is urrainn dhut log debugging na h-obrach a chomasachadh - ann, bidh pupaidean a ’sgrìobhadh mu na gnìomhan a bhios e a’ coileanadh: mun ghoireas a tha e an-dràsta a ’giullachd, mu pharaimearan a’ ghoireas seo, mu na prògraman a bhios e a ’cur air bhog. Gu dearbh, is e paramadair a tha seo --debug.

Freiceadan

Cha bheachdaich mi air làn shuidheachadh an fhrithealaiche pappet agus cleachdadh còd thuige san artaigil seo; Cha bhith mi ag ràdh ach a-mach às a ’bhogsa gu bheil dreach làn-ghnìomhach den fhrithealaiche nach eil feumach air rèiteachadh a bharrachd gus obrachadh le àireamh bheag de nodan (can, suas ri ceud). Feumaidh àireamh nas motha de nodan gleusadh - gu gnàthach, bidh puppetserver a’ cur air bhog gun a bhith nas fhaide na ceathrar luchd-obrach, airson barrachd coileanaidh feumaidh tu an àireamh aca àrdachadh agus na dìochuimhnich na crìochan cuimhne àrdachadh, air neo bidh am frithealaiche a’ cruinneachadh sgudal a’ mhòr-chuid den ùine.

Cleachdadh còd - ma tha feum agad air gu sgiobalta agus gu furasta, thoir sùil (aig r10k)[https://github.com/puppetlabs/r10k], airson ionadan beaga bu chòir dha a bhith gu math gu leòr.

Adendum 2: Stiùireadh Còdaidh

  1. Cuir a h-uile loidsig ann an clasaichean agus mìneachaidhean.
  2. Cùm clasaichean agus mìneachaidhean ann am modalan, chan ann ann am manifestos a’ toirt cunntas air nodan.
  3. Cleachd na fìrinnean.
  4. Na dèan ifs stèidhichte air ainmean aoigheachd.
  5. Faodaidh tu crìochan a chuir ris airson clasaichean agus mìneachaidhean - tha seo nas fheàrr na loidsig a tha falaichte ann am bodhaig a’ chlas / mìneachadh.

Mìnichidh mi carson a tha mi a’ moladh seo a dhèanamh san ath artaigil.

co-dhùnadh

Crìochnaich sinn leis an ro-ràdh. Anns an ath artaigil innsidh mi dhut mu Hiera, ENC agus PuppetDB.

Chan fhaod ach luchd-cleachdaidh clàraichte pàirt a ghabhail san sgrùdadh. Soidhnig a-steach, mas e do thoil e.

Gu dearbh, tha tòrr a bharrachd stuth ann - is urrainn dhomh artaigilean a sgrìobhadh air na cuspairean a leanas, bhòtadh air na bhiodh ùidh agad ann a bhith leughadh mu dheidhinn:

  • 59,1%Togail phupaidean adhartach - cuid de shit aig an ath ìre: lùban, mapadh agus abairtean lambda eile, luchd-cruinneachaidh ghoireasan, goireasan às-mhalairt agus conaltradh eadar-aoigheachd tro Phupaidean, tagaichean, solaraichean, seòrsachan dàta eas-chruthach.13
  • 31,8%“Is mise rianadair mo mhàthar” no mar a rinn sinn ann an Avito caraidean le grunn luchd-frithealaidh poppet de dhiofar dhreachan, agus, ann am prionnsapal, am pàirt mu bhith a’ rianachd an fhrithealaiche poppet.7
  • 81,8%Mar a sgrìobhas sinn còd pupaidean: ionnstramaid, sgrìobhainnean, deuchainn, CI/CD.18

Bhòt 22 neach-cleachdaidh. Sheall 9 neach-cleachdaidh.

Source: www.habr.com