Mae pyped yn system rheoli cyfluniad. Fe'i defnyddir i ddod â gwesteiwyr i'r cyflwr dymunol a chynnal y cyflwr hwn.
Rwyf wedi bod yn gweithio gyda Puppet ers dros bum mlynedd bellach. Mae'r testun hwn yn ei hanfod yn gasgliad wedi'i gyfieithu a'i aildrefnu o bwyntiau allweddol o'r ddogfennaeth swyddogol, a fydd yn caniatáu i ddechreuwyr ddeall hanfod Pyped yn gyflym.
Gwybodaeth Sylfaenol
Mae system weithredu Pyped yn weinydd cleient, er ei fod hefyd yn cefnogi gweithrediad di-weinydd gyda swyddogaeth gyfyngedig.
Defnyddir model gweithredu tynnu: yn ddiofyn, unwaith bob hanner awr, mae cleientiaid yn cysylltu â'r gweinydd am ffurfweddiad a'i gymhwyso. Os ydych chi wedi gweithio gydag Ansible, yna maen nhw'n defnyddio model gwthio gwahanol: mae'r gweinyddwr yn cychwyn y broses o gymhwyso'r cyfluniad, ni fydd y cleientiaid eu hunain yn cymhwyso unrhyw beth.
Yn ystod cyfathrebu rhwydwaith, defnyddir amgryptio TLS dwy ffordd: mae gan y gweinydd a'r cleient eu bysellau preifat eu hunain a thystysgrifau cyfatebol. Yn nodweddiadol mae'r gweinydd yn rhoi tystysgrifau i gleientiaid, ond mewn egwyddor mae'n bosibl defnyddio CA allanol.
Cyflwyniad i faniffestos
Mewn terminoleg Pypedau i'r gweinydd pypedau cysylltu nodau (nodau). Mae'r ffurfweddiad ar gyfer y nodau wedi'i ysgrifennu mewn maniffestos mewn iaith raglennu arbennig - Pyped DSL.
Mae pyped DSL yn iaith ddatganiadol. Mae'n disgrifio cyflwr dymunol y nod ar ffurf datganiadau adnoddau unigol, er enghraifft:
- Mae'r ffeil yn bodoli ac mae ganddi gynnwys penodol.
- Mae'r pecyn wedi'i osod.
- Mae'r gwasanaeth wedi dechrau.
Gellir cydgysylltu adnoddau:
- Mae dibyniaethau, maent yn effeithio ar y drefn y defnyddir adnoddau.
Er enghraifft, “gosodwch y pecyn yn gyntaf, yna golygwch y ffeil ffurfweddu, yna dechreuwch y gwasanaeth.” - Mae yna hysbysiadau - os yw adnodd wedi newid, mae'n anfon hysbysiadau i'r adnoddau y tanysgrifiwyd iddo.
Er enghraifft, os bydd y ffeil ffurfweddu yn newid, gallwch ailgychwyn y gwasanaeth yn awtomatig.
Yn ogystal, mae gan y Pyped DSL swyddogaethau a newidynnau, yn ogystal â datganiadau amodol a detholwyr. Cefnogir amrywiol fecanweithiau templed hefyd - EPP ac ERB.
Mae pyped wedi'i ysgrifennu yn Ruby, felly mae llawer o'r lluniadau a'r termau wedi'u cymryd oddi yno. Mae Ruby yn caniatáu ichi ehangu Pyped - ychwanegu rhesymeg gymhleth, mathau newydd o adnoddau, swyddogaethau.
Tra bod Pyped yn rhedeg, mae maniffestau ar gyfer pob nod penodol ar y gweinydd yn cael eu crynhoi mewn cyfeiriadur. Каталог yn rhestr o adnoddau a'u perthnasoedd ar ôl cyfrifo gwerth ffwythiannau, newidynnau ac ehangiad datganiadau amodol.
Cystrawen a steil cod
Dyma adrannau o'r ddogfennaeth swyddogol a fydd yn eich helpu i ddeall y gystrawen os nad yw'r enghreifftiau a ddarperir yn ddigon:
Dyma enghraifft o sut olwg sydd ar y maniffest:
# Комментарии пишутся, как и много где, после решётки.
#
# Описание конфигурации ноды начинается с ключевого слова node,
# за которым следует селектор ноды — хостнейм (с доменом или без)
# или регулярное выражение для хостнеймов, или ключевое слово default.
#
# После этого в фигурных скобках описывается собственно конфигурация ноды.
#
# Одна и та же нода может попасть под несколько селекторов. Про приоритет
# селекторов написано в статье про синтаксис описания нод.
node 'hostname', 'f.q.d.n', /regexp/ {
# Конфигурация по сути является перечислением ресурсов и их параметров.
#
# У каждого ресурса есть тип и название.
#
# Внимание: не может быть двух ресурсов одного типа с одинаковыми названиями!
#
# Описание ресурса начинается с его типа. Тип пишется в нижнем регистре.
# Про разные типы ресурсов написано ниже.
#
# После типа в фигурных скобках пишется название ресурса, потом двоеточие,
# дальше идёт опциональное перечисление параметров ресурса и их значений.
# Значения параметров указываются через т.н. hash rocket (=>).
resource { 'title':
param1 => value1,
param2 => value2,
param3 => value3,
}
}
Nid yw mewnoliad a thoriadau llinell yn rhan ofynnol o'r maniffest, ond argymhellir
- Ni ddefnyddir indentau dau ofod, tabiau.
- Mae braces cyrliog yn cael eu gwahanu gan ofod; nid yw colon yn cael ei wahanu gan ofod.
- Comas ar ôl pob paramedr, gan gynnwys yr un olaf. Mae pob paramedr ar linell ar wahân. Gwneir eithriad ar gyfer yr achos heb baramedrau ac un paramedr: gallwch ysgrifennu ar un llinell a heb goma (h.y.
resource { 'title': }
иresource { 'title': param => value }
). - Dylai'r saethau ar y paramedrau fod ar yr un lefel.
- Ysgrifennir saethau perthynas adnoddau o'u blaenau.
Lleoliad y ffeiliau ar papetserver
Am esboniad pellach, byddaf yn cyflwyno'r cysyniad o "cyfeiriadur gwraidd". Y cyfeiriadur gwraidd yw'r cyfeiriadur sy'n cynnwys y ffurfweddiad Pyped ar gyfer nod penodol.
Mae'r cyfeiriadur gwraidd yn amrywio yn dibynnu ar y fersiwn o Pyped a'r amgylcheddau a ddefnyddir. Mae amgylcheddau yn setiau annibynnol o ffurfweddiadau sy'n cael eu storio mewn cyfeirlyfrau ar wahân. Fe'i defnyddir fel arfer mewn cyfuniad â git, ac os felly mae amgylcheddau'n cael eu creu o ganghennau git. Yn unol â hynny, mae pob nod wedi'i leoli mewn un amgylchedd neu'r llall. Gellir ffurfweddu hyn ar y nod ei hun, neu yn ENC, y byddaf yn siarad amdano yn yr erthygl nesaf.
- Yn y trydydd fersiwn ("hen Byped") oedd y cyfeiriadur sylfaen
/etc/puppet
. Mae'r defnydd o amgylcheddau yn ddewisol - er enghraifft, nid ydym yn eu defnyddio gyda'r hen Byped. Os defnyddir amgylcheddau, maent fel arfer yn cael eu storio ynddynt/etc/puppet/environments
, y cyfeiriadur gwraidd fydd y cyfeiriadur amgylchedd. Os na ddefnyddir amgylcheddau, y cyfeiriadur gwraidd fydd y cyfeiriadur sylfaenol. - Gan ddechrau o'r pedwerydd fersiwn (“Puppet newydd”), daeth y defnydd o amgylcheddau yn orfodol, a symudwyd y cyfeiriadur sylfaenol i
/etc/puppetlabs/code
. Yn unol â hynny, mae amgylcheddau'n cael eu storio ynddynt/etc/puppetlabs/code/environments
, cyfeiriadur gwraidd yw'r cyfeiriadur amgylchedd.
Rhaid bod is-gyfeiriadur yn y cyfeiriadur gwraidd manifests
, sy'n cynnwys un neu fwy o faniffestau sy'n disgrifio'r nodau. Yn ogystal, dylai fod is-gyfeiriadur modules
, sy'n cynnwys y modiwlau. Fe ddywedaf wrthych beth yw'r modiwlau ychydig yn ddiweddarach. Yn ogystal, efallai y bydd gan yr hen Byped hefyd is-gyfeiriadur files
, sy'n cynnwys ffeiliau amrywiol yr ydym yn eu copïo i'r nodau. Yn y Pyped newydd, gosodir pob ffeil mewn modiwlau.
Mae gan y ffeiliau maniffest yr estyniad .pp
.
Cwpl o enghreifftiau ymladd
Disgrifiad o'r nod a'r adnodd arno
Ar y nôd server1.testdomain
rhaid creu ffeil /etc/issue
gyda chynnwys Debian GNU/Linux n l
. Rhaid i'r ffeil fod yn eiddo i ddefnyddiwr a grŵp root
, rhaid i hawliau mynediad fod 644
.
Rydym yn ysgrifennu maniffesto:
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 в начале будет воспринято как записанное в восьмеричной системе, и всё пойдёт не так, как задумано
}
}
Perthynas rhwng adnoddau ar nod
Ar y nôd server2.testdomain
rhaid i nginx fod yn rhedeg, gan weithio gyda chyfluniad a baratowyd yn flaenorol.
Gadewch i ni ddadelfennu'r broblem:
- Mae angen gosod y pecyn
nginx
. - Mae angen copïo'r ffeiliau ffurfweddu o'r gweinydd.
- Mae angen i'r gwasanaeth fod yn rhedeg
nginx
. - Os caiff y cyfluniad ei ddiweddaru, rhaid ailgychwyn y gwasanaeth.
Rydym yn ysgrifennu maniffesto:
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 получает уведомление,
# соответствующий сервис перезапускается.
}
Er mwyn i hyn weithio, mae angen tua'r lleoliad ffeil canlynol arnoch ar y gweinydd pypedau:
/etc/puppetlabs/code/environments/production/ # (это для нового Паппета, для старого корневой директорией будет /etc/puppet)
├── manifests/
│ └── site.pp
└── modules/
└── example/
└── files/
└── nginx-conf/
├── nginx.conf
├── mime.types
└── conf.d/
└── some.conf
Mathau o Adnoddau
Mae rhestr gyflawn o'r mathau o adnoddau a gefnogir i'w gweld yma
file
Yn rheoli ffeiliau, cyfeiriaduron, dolenni syml, eu cynnwys, a hawliau mynediad.
Paramedrau:
- enw adnodd - llwybr i'r ffeil (dewisol)
- llwybr — llwybr i'r ffeil (os nad yw wedi'i nodi yn yr enw)
- sicrhau - math o ffeil:
absent
- dileu ffeilpresent
— rhaid cael ffeil o unrhyw fath (os nad oes ffeil, bydd ffeil reolaidd yn cael ei chreu)file
- ffeil rheolaidddirectory
- cyfeiriadurlink
- symlink
- cynnwys — cynnwys ffeil (yn addas ar gyfer ffeiliau arferol yn unig, ni ellir ei ddefnyddio ynghyd â ffynhonnell neu targed)
- ffynhonnell — dolen i'r llwybr yr ydych am gopïo cynnwys y ffeil ohono (ni ellir ei ddefnyddio ynghyd â cynnwys neu targed). Gellir ei nodi fel naill ai URI gyda chynllun
puppet:
(yna bydd ffeiliau o'r gweinydd pypedau yn cael eu defnyddio), a chyda'r cynllunhttp:
(Rwy'n gobeithio ei bod yn glir beth fydd yn digwydd yn yr achos hwn), a hyd yn oed gyda'r diagramfile:
neu fel llwybr absoliwt heb sgema (yna bydd y ffeil o'r FS lleol ar y nod yn cael ei ddefnyddio) - targed — lle dylai'r ddolen syml bwyntio (ni ellir ei ddefnyddio ynghyd â cynnwys neu ffynhonnell)
- perchennog — y defnyddiwr a ddylai fod yn berchen ar y ffeil
- grŵp — y grŵp y dylai'r ffeil berthyn iddo
- modd — caniatadau ffeil (fel llinyn)
- ail-ddigwydd - galluogi prosesu cyfeiriadur ailadroddus
- carthu - galluogi dileu ffeiliau nad ydynt yn cael eu disgrifio yn Pyped
- gorfodi - galluogi dileu cyfeiriaduron nad ydynt yn cael eu disgrifio yn Puppet
pecyn
Yn gosod ac yn dileu pecynnau. Yn gallu trin hysbysiadau - yn ailosod y pecyn os yw'r paramedr wedi'i nodi ailosod_on_refresh.
Paramedrau:
- enw adnodd — enw pecyn (dewisol)
- enw — enw pecyn (os nad yw wedi'i nodi yn yr enw)
- darparwr - rheolwr pecyn i'w ddefnyddio
- sicrhau - cyflwr dymunol y pecyn:
present
,installed
- unrhyw fersiwn wedi'i osodlatest
- fersiwn diweddaraf wedi'i osodabsent
- dileu (apt-get remove
)purged
— dileu ynghyd â ffeiliau ffurfweddu (apt-get purge
)held
- mae fersiwn pecyn wedi'i gloi (apt-mark hold
)любая другая строка
- mae'r fersiwn penodedig wedi'i osod
- ailosod_on_refresh - os
true
, yna ar ôl derbyn yr hysbysiad bydd y pecyn yn cael ei ailosod. Yn ddefnyddiol ar gyfer dosbarthiadau seiliedig ar ffynhonnell, lle gall fod angen pecynnau ailadeiladu wrth newid paramedrau adeiladu. Diofynfalse
.
gwasanaeth
Yn rheoli gwasanaethau. Yn gallu prosesu hysbysiadau - yn ailgychwyn y gwasanaeth.
Paramedrau:
- enw adnodd — gwasanaeth i'w reoli (dewisol)
- enw — y gwasanaeth sydd angen ei reoli (os nad yw wedi ei nodi yn yr enw)
- sicrhau — cyflwr dymunol y gwasanaeth:
running
- lansiostopped
- stopio
- alluogi — yn rheoli'r gallu i gychwyn y gwasanaeth:
true
— mae autorun wedi'i alluogi (systemctl enable
)mask
- cuddiedig (systemctl mask
)false
— mae autorun wedi ei analluogi (systemctl disable
)
- ail-gychwyn - gorchymyn i ailgychwyn y gwasanaeth
- statws - gorchymyn i wirio statws gwasanaeth
- wedi ailgychwyn - nodwch a yw'r initscript gwasanaeth yn cefnogi ailgychwyn. Os
false
ac mae'r paramedr wedi'i nodi ail-gychwyn — defnyddir gwerth y paramedr hwn. Osfalse
a pharamedr ail-gychwyn heb ei nodi - mae'r gwasanaeth yn cael ei stopio a dechrau ailgychwyn (ond mae systemd yn defnyddio'r gorchymynsystemctl restart
). - hasstatus - nodwch a yw'r initscript gwasanaeth yn cefnogi'r gorchymyn
status
. Osfalse
, yna defnyddir y gwerth paramedr statws. Diofyntrue
.
exec
Yn rhedeg gorchmynion allanol. Os nad ydych yn nodi paramedrau yn creu, unigif, oni bai neu adfywiol, bydd y gorchymyn yn cael ei redeg bob tro y bydd Pyped yn cael ei redeg. Yn gallu prosesu hysbysiadau - yn rhedeg gorchymyn.
Paramedrau:
- enw adnodd - gorchymyn i'w weithredu (dewisol)
- gorchymyn - y gorchymyn i'w weithredu (os nad yw wedi'i nodi yn yr enw)
- llwybr — llwybrau i chwilio am y ffeil gweithredadwy
- unigif - os yw'r gorchymyn a nodir yn y paramedr hwn wedi'i gwblhau gyda chod dychwelyd sero, bydd y prif orchymyn yn cael ei weithredu
- oni bai - os yw'r gorchymyn a nodir yn y paramedr hwn wedi'i gwblhau â chod dychwelyd nad yw'n sero, bydd y prif orchymyn yn cael ei weithredu
- yn creu — os nad yw'r ffeil a nodir yn y paramedr hwn yn bodoli, gweithredir y prif orchymyn
- adfywiol - os
true
, yna dim ond pan fydd y gweithredydd hwn yn derbyn hysbysiad gan adnoddau eraill y bydd y gorchymyn yn cael ei redeg - cwd - cyfeiriadur i redeg y gorchymyn ohono
- defnyddiwr - y defnyddiwr i redeg y gorchymyn ganddo
- darparwr - sut i redeg y gorchymyn:
- posix - proses plentyn yn cael ei greu yn syml, gofalwch eich bod yn nodi llwybr
- cragen - mae'r gorchymyn yn cael ei lansio yn y gragen
/bin/sh
, efallai na chaiff ei nodi llwybr, gallwch ddefnyddio globio, pibellau a nodweddion cregyn eraill. Fel arfer canfyddir yn awtomatig os oes unrhyw nodau arbennig (|
,;
,&&
,||
ac ati).
cron
Yn rheoli cronjobs.
Paramedrau:
- enw adnodd - dim ond rhyw fath o ddynodwr
- sicrhau - cyflwr swydd y goron:
present
- creu os nad yw'n bodoliabsent
- dileu os yw'n bodoli
- gorchymyn — pa orchymyn i'w redeg
- amgylchedd — ym mha amgylchedd i redeg y gorchymyn (rhestr o newidynnau amgylchedd a'u gwerthoedd trwyddynt
=
) - defnyddiwr - gan ba ddefnyddiwr i redeg y gorchymyn
- munud, awr, yn ystod yr wythnos, mis, mis — pryd i redeg cron. Os na nodir unrhyw un o'r priodoleddau hyn, ei werth yn y crontab fydd
*
.
Mewn Pyped 6.0 cron fel petai
Am adnoddau yn gyffredinol
Gofynion ar gyfer unigrywiaeth adnoddau
Y camgymeriad mwyaf cyffredin rydyn ni'n dod ar ei draws yw Datganiad dyblyg. Mae'r gwall hwn yn digwydd pan fydd dau neu fwy o adnoddau o'r un math gyda'r un enw yn ymddangos yn y cyfeiriadur.
Felly, ysgrifennaf eto: ni ddylai maniffestau ar gyfer yr un nod gynnwys adnoddau o'r un math gyda'r un teitl!
Weithiau mae angen gosod pecynnau gyda'r un enw, ond gyda gwahanol reolwyr pecynnau. Yn yr achos hwn, mae angen i chi ddefnyddio'r paramedr name
i osgoi'r gwall:
package { 'ruby-mysql':
ensure => installed,
name => 'mysql',
provider => 'gem',
}
package { 'python-mysql':
ensure => installed,
name => 'mysql',
provider => 'pip',
}
Mae gan fathau eraill o adnoddau opsiynau tebyg i helpu i osgoi dyblygu − name
у gwasanaeth, command
у exec, ac yn y blaen.
Metaparamedrau
Mae gan bob math o adnodd rai paramedrau arbennig, waeth beth fo'u natur.
Rhestr lawn o baramedrau meta
Rhestr fer:
- ei gwneud yn ofynnol — mae'r paramedr hwn yn nodi pa adnoddau y mae'r adnodd hwn yn dibynnu arnynt.
- cyn - Mae'r paramedr hwn yn nodi pa adnoddau sy'n dibynnu ar yr adnodd hwn.
- tanysgrifio — mae'r paramedr hwn yn nodi o ba adnoddau y mae'r adnodd hwn yn derbyn hysbysiadau.
- hysbysu — Mae'r paramedr hwn yn nodi pa adnoddau sy'n derbyn hysbysiadau o'r adnodd hwn.
Mae pob un o'r metaparamedrau rhestredig yn derbyn naill ai dolen adnodd sengl neu amrywiaeth o ddolenni mewn cromfachau sgwâr.
Dolenni i adnoddau
Dim ond sôn am yr adnodd yw dolen adnodd. Fe'u defnyddir yn bennaf i nodi dibyniaethau. Bydd cyfeirio at adnodd nad yw'n bodoli yn achosi gwall llunio.
Mae cystrawen y ddolen fel a ganlyn: math o adnodd gyda phrif lythyren (os yw enw'r math yn cynnwys colonau dwbl, yna priflythrennau yw pob rhan o'r enw rhwng y colonau), yna enw'r adnodd mewn cromfachau sgwâr (sef achos yr enw ddim yn newid!). Ni ddylai fod bylchau; ysgrifennir cromfachau sgwâr yn syth ar ôl enw'r teip.
Enghraifft:
file { '/file1': ensure => present }
file { '/file2':
ensure => directory,
before => File['/file1'],
}
file { '/file3': ensure => absent }
File['/file1'] -> File['/file3']
Dibyniaethau a hysbysiadau
Fel y nodwyd yn gynharach, mae dibyniaethau syml rhwng adnoddau yn drosiannol. Gyda llaw, byddwch yn ofalus wrth ychwanegu dibyniaethau - gallwch greu dibyniaethau cylchol, a fydd yn achosi gwall llunio.
Yn wahanol i ddibyniaethau, nid yw hysbysiadau yn drosiannol. Mae'r rheolau canlynol yn berthnasol ar gyfer hysbysiadau:
- Os bydd yr adnodd yn derbyn hysbysiad, caiff ei ddiweddaru. Mae'r camau diweddaru yn dibynnu ar y math o adnodd − exec yn rhedeg y gorchymyn, gwasanaeth yn ailgychwyn y gwasanaeth, pecyn yn ailosod y pecyn. Os nad oes gan yr adnodd weithred diweddaru wedi'i diffinio, yna nid oes dim yn digwydd.
- Yn ystod un rhediad o Bypedau, ni chaiff yr adnodd ei ddiweddaru fwy nag unwaith. Mae hyn yn bosibl oherwydd bod hysbysiadau yn cynnwys dibyniaethau ac nid yw'r graff dibyniaeth yn cynnwys cylchoedd.
- Os bydd Puppet yn newid cyflwr adnodd, mae'r adnodd yn anfon hysbysiadau i'r holl adnoddau sy'n tanysgrifio iddo.
- Os yw adnodd yn cael ei ddiweddaru, mae'n anfon hysbysiadau i'r holl adnoddau sydd wedi tanysgrifio iddo.
Trin paramedrau amhenodol
Fel rheol, os nad oes gan rai paramedr adnoddau werth diofyn ac nad yw'r paramedr hwn wedi'i nodi yn y maniffest, yna ni fydd Pyped yn newid yr eiddo hwn ar gyfer yr adnodd cyfatebol ar y nod. Er enghraifft, os yw adnodd o fath file paramedr heb ei nodi owner
, yna ni fydd Puppet yn newid perchennog y ffeil cyfatebol.
Cyflwyniad i ddosbarthiadau, newidynnau a diffiniadau
Tybiwch fod gennym nifer o nodau sydd â'r un rhan o'r ffurfweddiad, ond mae gwahaniaethau hefyd - fel arall gallem ddisgrifio'r cyfan mewn un bloc node {}
. Wrth gwrs, gallwch chi gopïo rhannau union yr un fath o'r cyfluniad, ond yn gyffredinol mae hwn yn ddatrysiad gwael - mae'r cyfluniad yn tyfu, ac os byddwch chi'n newid rhan gyffredinol y cyfluniad, bydd yn rhaid i chi olygu'r un peth mewn sawl man. Ar yr un pryd, mae'n hawdd gwneud camgymeriad, ac yn gyffredinol, dyfeisiwyd yr egwyddor SYCH (peidiwch ag ailadrodd eich hun) am reswm.
I ddatrys y broblem hon mae dyluniad o'r fath dosbarth.
Dosbarthiadau
Yn gyntaf mae angen disgrifio'r dosbarth. Nid yw'r disgrifiad ei hun yn ychwanegu unrhyw adnoddau yn unman. Disgrifir y dosbarth mewn maniffestau:
# Описание класса начинается с ключевого слова class и его названия.
# Дальше идёт тело класса в фигурных скобках.
class example_class {
...
}
Ar ôl hyn gellir defnyddio'r dosbarth:
# первый вариант использования — в стиле ресурса с типом class
class { 'example_class': }
# второй вариант использования — с помощью функции include
include example_class
# про отличие этих двух вариантов будет рассказано дальше
Enghraifft o'r dasg flaenorol - gadewch i ni symud gosodiad a ffurfwedd nginx i mewn i ddosbarth:
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
}
Newidynnau
Nid yw'r dosbarth o'r enghraifft flaenorol yn hyblyg o gwbl oherwydd ei fod bob amser yn dod â'r un ffurfwedd nginx. Gadewch i ni wneud y llwybr i'r newidyn cyfluniad, yna gellir defnyddio'r dosbarth hwn i osod nginx gydag unrhyw ffurfweddiad.
Gellir ei wneud
Sylw: mae newidynnau mewn Pyped yn ddigyfnewid!
Yn ogystal, dim ond ar ôl iddo gael ei ddatgan y gellir cyrchu newidyn, fel arall bydd gwerth y newidyn undef
.
Enghraifft o weithio gyda newidynnau:
# создание переменных
$variable = 'value'
$var2 = 1
$var3 = true
$var4 = undef
# использование переменных
$var5 = $var6
file { '/tmp/text': content => $variable }
# интерполяция переменных — раскрытие значения переменных в строках. Работает только в двойных кавычках!
$var6 = "Variable with name variable has value ${variable}"
Mae gan byped gofodau enwau, a'r newidynnau, yn unol â hynny, wedi maes gwelededd: Gellir diffinio newidyn gyda'r un enw mewn gofodau enwau gwahanol. Wrth ddatrys gwerth newidyn, chwilir y newidyn yn y gofod enw cyfredol, yna yn y gofod enw amgáu, ac ati.
Enghreifftiau gofod enw:
- global - mae newidynnau y tu allan i’r disgrifiad dosbarth neu nod yn mynd yno;
- gofod enw nodau yn y disgrifiad nod;
- gofod enw dosbarth yn nisgrifiad y dosbarth.
Er mwyn osgoi amwysedd wrth gyrchu newidyn, gallwch chi nodi'r gofod enw yn enw'r newidyn:
# переменная без пространства имён
$var
# переменная в глобальном пространстве имён
$::var
# переменная в пространстве имён класса
$classname::var
$::classname::var
Gadewch i ni gytuno bod y llwybr i'r cyfluniad nginx yn gorwedd yn y newidyn $nginx_conf_source
. Yna bydd y dosbarth yn edrych fel hyn:
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
}
Fodd bynnag, mae'r enghraifft a roddir yn ddrwg oherwydd bod rhywfaint o “wybodaeth gyfrinachol” bod newidyn ag enw o'r fath yn cael ei ddefnyddio rhywle y tu mewn i'r dosbarth. Mae'n llawer mwy cywir gwneud y wybodaeth hon yn gyffredinol - gall dosbarthiadau gael paramedrau.
Paramedrau dosbarth yn newidynnau yn y gofod enw dosbarth, maent wedi'u nodi ym mhennyn y dosbarth a gellir eu defnyddio fel newidynnau rheolaidd yng nghorff y dosbarth. Pennir gwerthoedd paramedr wrth ddefnyddio'r dosbarth yn y maniffest.
Gellir gosod y paramedr i werth diofyn. Os nad oes gan baramedr werth rhagosodedig ac nad yw'r gwerth wedi'i osod pan gaiff ei ddefnyddio, bydd yn achosi gwall llunio.
Gadewch i ni baramedroli'r dosbarth o'r enghraifft uchod ac ychwanegu dau baramedr: y cyntaf, sy'n ofynnol, yw'r llwybr i'r ffurfweddiad, a'r ail, dewisol, yw enw'r pecyn gyda nginx (yn Debian, er enghraifft, mae pecynnau 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', # задаём параметры класса точно так же, как параметры для других ресурсов
}
}
Mewn Pyped, mae newidynnau'n cael eu teipio. Bwyta
Ysgrifennir y math yn union cyn enw'r paramedr:
class example (
String $param1,
Integer $param2,
Array $param3,
Hash $param4,
Hash[String, String] $param5,
) {
...
}
Dosbarthiadau: cynnwys enw dosbarth yn erbyn dosbarth{'classname':}
Mae pob dosbarth yn adnodd o fath dosbarth. Fel gydag unrhyw fath arall o adnodd, ni all fod dau enghraifft o'r un dosbarth ar yr un nod.
Os ceisiwch ychwanegu dosbarth at yr un nod ddwywaith gan ddefnyddio class { 'classname':}
(dim gwahaniaeth, gyda pharamedrau gwahanol neu union yr un fath), bydd gwall llunio. Ond os ydych chi'n defnyddio dosbarth yn yr arddull adnoddau, gallwch chi osod ei holl baramedrau yn y maniffest ar unwaith.
Fodd bynnag, os ydych yn defnyddio include
, yna gellir ychwanegu'r dosbarth gymaint o weithiau ag y dymunir. Y ffaith yw bod include
yn swyddogaeth analluog sy'n gwirio a yw dosbarth wedi'i ychwanegu at y cyfeiriadur. Os nad yw'r dosbarth yn y cyfeiriadur, mae'n ei ychwanegu, ac os yw'n bodoli eisoes, nid yw'n gwneud dim. Ond rhag ofn defnyddio include
Ni allwch osod paramedrau dosbarth yn ystod datganiad dosbarth - rhaid gosod yr holl baramedrau gofynnol mewn ffynhonnell ddata allanol - Hiera neu ENC. Byddwn yn siarad amdanynt yn yr erthygl nesaf.
Yn diffinio
Fel y dywedwyd yn y bloc blaenorol, ni all yr un dosbarth fod yn bresennol ar nod fwy nag unwaith. Fodd bynnag, mewn rhai achosion mae angen i chi allu defnyddio'r un bloc o god gyda pharamedrau gwahanol ar yr un nod. Mewn geiriau eraill, mae angen ei fath o adnodd ei hun.
Er enghraifft, er mwyn gosod y modiwl PHP, rydym yn gwneud y canlynol yn Avito:
- Gosodwch y pecyn gyda'r modiwl hwn.
- Gadewch i ni greu ffeil ffurfweddu ar gyfer y modiwl hwn.
- Rydyn ni'n creu cyswllt syml i'r ffurfwedd ar gyfer php-fpm.
- Rydyn ni'n creu cyswllt syml i'r ffurfwedd ar gyfer php cli.
Mewn achosion o'r fath, mae dyluniad fel $title
, i ble mae enw'r adnodd yn mynd pan gaiff ei ddatgan. Yn union fel yn achos dosbarthiadau, rhaid disgrifio diffiniad yn gyntaf, ac ar ôl hynny gellir ei ddefnyddio.
Enghraifft symlach gyda modiwl ar gyfer 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' }
}
Y ffordd hawsaf i ddal y gwall datganiad Dyblyg yw Diffiniwch. Mae hyn yn digwydd os oes gan ddiffiniad adnodd ag enw cyson arno, a bod dau neu fwy o achosion o'r diffiniad hwn ar ryw nod.
Mae'n hawdd amddiffyn eich hun rhag hyn: rhaid i'r holl adnoddau y tu mewn i'r diffiniad fod ag enw yn dibynnu ar $title
. Dewis arall yw ychwanegu adnoddau yn ddiamwys; yn yr achos symlaf, mae'n ddigon symud yr adnoddau sy'n gyffredin i bob achos o'r diffiniad i ddosbarth ar wahân a chynnwys y dosbarth hwn yn y diffiniad - swyddogaeth include
analluog.
Mae ffyrdd eraill o gyflawni analluedd wrth ychwanegu adnoddau, sef defnyddio swyddogaethau defined
и ensure_resources
, ond dywedaf wrthych am y peth yn y bennod nesaf.
Dibyniaethau a hysbysiadau ar gyfer dosbarthiadau a diffiniadau
Mae dosbarthiadau a diffiniadau yn ychwanegu'r rheolau canlynol at drin dibyniaethau a hysbysiadau:
- mae dibyniaeth ar ddosbarth/diffiniad yn ychwanegu dibyniaeth ar holl adnoddau'r dosbarth/diffiniad;
- mae dibyniaeth dosbarth/diffiniad yn ychwanegu dibyniaethau at yr holl adnoddau dosbarth/diffiniad;
- hysbysiad dosbarth/diffiniad yn hysbysu'r holl adnoddau o'r dosbarth/diffiniad;
- tanysgrifiad dosbarth/diffiniad yn tanysgrifio i holl adnoddau'r dosbarth/diffiniad.
Datganiadau amodol a detholwyr
if
Mae'n syml yma:
if ВЫРАЖЕНИЕ1 {
...
} elsif ВЫРАЖЕНИЕ2 {
...
} else {
...
}
oni bai
oni bai ei fod yn wrthdroad: gweithredir y bloc o god os yw'r mynegiad yn ffug.
unless ВЫРАЖЕНИЕ {
...
}
achos
Does dim byd cymhleth yma chwaith. Gallwch ddefnyddio gwerthoedd rheolaidd (llinynnau, rhifau, ac ati), ymadroddion rheolaidd, a mathau o ddata fel gwerthoedd.
case ВЫРАЖЕНИЕ {
ЗНАЧЕНИЕ1: { ... }
ЗНАЧЕНИЕ2, ЗНАЧЕНИЕ3: { ... }
default: { ... }
}
Detholwyr
Mae dewisydd yn lluniad iaith tebyg i case
, ond yn lle gweithredu bloc o god, mae'n dychwelyd gwerth.
$var = $othervar ? { 'val1' => 1, 'val2' => 2, default => 3 }
Modiwlau
Pan fo'r cyfluniad yn fach, gellir ei gadw'n hawdd mewn un maniffest. Ond po fwyaf o gyfluniadau rydyn ni'n eu disgrifio, y mwyaf o ddosbarthiadau a nodau sydd yn y maniffest, mae'n tyfu, ac mae'n dod yn anghyfleus i weithio gyda nhw.
Yn ogystal, mae problem ailddefnyddio cod - pan fydd yr holl god mewn un maniffest, mae'n anodd rhannu'r cod hwn ag eraill. I ddatrys y ddwy broblem hyn, mae gan Puppet endid o'r enw modiwlau.
Modiwlau - mae'r rhain yn setiau o ddosbarthiadau, diffiniadau ac endidau Pypedau eraill wedi'u gosod mewn cyfeiriadur ar wahân. Mewn geiriau eraill, mae modiwl yn ddarn annibynnol o resymeg Pypedau. Er enghraifft, efallai y bydd modiwl ar gyfer gweithio gyda nginx, a bydd yn cynnwys yr hyn a dim ond yr hyn sydd ei angen i weithio gyda nginx, neu efallai y bydd modiwl ar gyfer gweithio gyda PHP, ac ati.
Caiff modiwlau eu fersiynau, a chefnogir dibyniaeth modiwlau ar ei gilydd hefyd. Mae ystorfa agored o fodiwlau -
Ar y gweinydd pypedau, mae modiwlau wedi'u lleoli yn is-gyfeiriadur modiwlau'r cyfeiriadur gwraidd. Y tu mewn i bob modiwl mae cynllun cyfeiriadur safonol - maniffestau, ffeiliau, templedi, lib, ac ati.
Strwythur ffeil mewn modiwl
Gall gwraidd y modiwl gynnwys y cyfeiriaduron canlynol gydag enwau disgrifiadol:
manifests
- mae'n cynnwys maniffestosfiles
- mae'n cynnwys ffeiliautemplates
- mae'n cynnwys templedilib
- mae'n cynnwys cod Ruby
Nid yw hon yn rhestr gyflawn o gyfeiriaduron a ffeiliau, ond mae'n ddigon ar gyfer yr erthygl hon am y tro.
Enwau adnoddau ac enwau ffeiliau yn y modiwl
Ni ellir enwi adnoddau (dosbarthiadau, diffiniadau) mewn modiwl beth bynnag y dymunwch. Yn ogystal, mae cyfatebiaeth uniongyrchol rhwng enw adnodd ac enw'r ffeil y bydd Pyped yn chwilio am ddisgrifiad o'r adnodd hwnnw ynddi. Os byddwch yn torri'r rheolau enwi, yna ni fydd Puppet yn dod o hyd i'r disgrifiad o'r adnodd, a byddwch yn cael gwall llunio.
Mae'r rheolau yn syml:
- Rhaid i holl adnoddau modiwl fod yng ngofod enw'r modiwl. Os gelwir y modiwl
foo
, yna dylid enwi pob adnodd ynddofoo::<anything>
, neu dim ondfoo
. - Rhaid i'r adnodd gydag enw'r modiwl fod yn y ffeil
init.pp
. - Ar gyfer adnoddau eraill, mae'r cynllun enwi ffeiliau fel a ganlyn:
- mae'r rhagddodiad gydag enw'r modiwl yn cael ei daflu
- gosodir slaes yn lle pob colon dwbl, os o gwbl
- estyniad yn cael ei ychwanegu
.pp
Byddaf yn arddangos gydag enghraifft. Gadewch i ni ddweud fy mod yn ysgrifennu modiwl nginx
. Mae’n cynnwys yr adnoddau canlynol:
- dosbarth
nginx
a ddisgrifir yn y maniffestinit.pp
; - dosbarth
nginx::service
a ddisgrifir yn y maniffestservice.pp
; - diffinio
nginx::server
a ddisgrifir yn y maniffestserver.pp
; - diffinio
nginx::server::location
a ddisgrifir yn y maniffestserver/location.pp
.
templedi
Siawns eich bod chi eich hun yn gwybod beth yw templedi; ni fyddaf yn eu disgrifio'n fanwl yma. Ond gadawaf hi rhag ofn
Sut i ddefnyddio templedi: Gellir ehangu ystyr templed gan ddefnyddio ffwythiant template
, sy'n cael ei basio y llwybr i'r templed. Am adnoddau o fath file ei ddefnyddio ynghyd â'r paramedr content
. Er enghraifft, fel hyn:
file { '/tmp/example': content => template('modulename/templatename.erb')
Gweld llwybr <modulename>/<filename>
yn awgrymu ffeil <rootdir>/modules/<modulename>/templates/<filename>
.
Yn ogystal, mae swyddogaeth inline_template
— mae'n derbyn testun y templed fel mewnbwn, nid enw'r ffeil.
O fewn templedi, gallwch ddefnyddio'r holl newidynnau Pypedau yn y cwmpas presennol.
Mae pyped yn cefnogi templedi mewn fformat ERB ac EPP:
Yn fyr am ERB
Strwythurau rheoli:
<%= ВЫРАЖЕНИЕ %>
— mewnosoder gwerth y mynegiad<% ВЫРАЖЕНИЕ %>
— cyfrifwch werth mynegiad (heb ei fewnosod). Mae datganiadau amodol (os) a dolenni (pob un) fel arfer yn mynd yma.<%# КОММЕНТАРИЙ %>
Mae mynegiadau mewn ERB wedi'u hysgrifennu yn Ruby (ERB yw Ruby Embedded mewn gwirionedd).
I gael mynediad at newidynnau o'r maniffest, mae angen ichi ychwanegu @
i'r enw newidyn. I gael gwared ar doriad llinell sy'n ymddangos ar ôl lluniad rheoli, mae angen i chi ddefnyddio tag cau -%>
.
Enghraifft o ddefnyddio'r templed
Gadewch i ni ddweud fy mod yn ysgrifennu modiwl i reoli ZooKeeper. Mae'r dosbarth sy'n gyfrifol am greu'r ffurfwedd yn edrych rhywbeth fel hyn:
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'),
}
}
A'r templed cyfatebol zoo.cfg.erb
- Felly:
<% 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 -%>
Ffeithiau a Newidynnau Adeiledig
Yn aml, mae rhan benodol y cyfluniad yn dibynnu ar yr hyn sy'n digwydd ar y nod ar hyn o bryd. Er enghraifft, yn dibynnu ar beth yw rhyddhau Debian, mae angen i chi osod un neu fersiwn arall o'r pecyn. Gallwch fonitro hyn i gyd â llaw, gan ailysgrifennu maniffestau os bydd nodau'n newid. Ond nid yw hwn yn ddull difrifol; mae awtomeiddio yn llawer gwell.
I gael gwybodaeth am nodau, mae gan Pyped fecanwaith o'r enw ffeithiau. Ffeithiau - dyma wybodaeth am y nod, sydd ar gael mewn maniffestau ar ffurf newidynnau cyffredin yn y gofod enwau byd-eang. Er enghraifft, enw gwesteiwr, fersiwn system weithredu, pensaernïaeth prosesydd, rhestr o ddefnyddwyr, rhestr o ryngwynebau rhwydwaith a'u cyfeiriadau, a llawer, llawer mwy. Mae ffeithiau ar gael mewn maniffestau a thempledi fel newidynnau rheolaidd.
Enghraifft o weithio gyda ffeithiau:
notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# ресурс типа notify просто выводит сообщение в лог
Yn ffurfiol, mae gan ffaith enw (llinyn) a gwerth (mae mathau amrywiol ar gael: llinynnau, araeau, geiriaduron). Bwyta
Yn ystod y llawdriniaeth, mae'r asiant pypedau yn gyntaf yn copïo'r holl gasglwyr ffeithiau sydd ar gael o'r gweinydd pap i'r nod, ac ar ôl hynny mae'n eu lansio ac yn anfon y ffeithiau a gasglwyd i'r gweinydd; Ar ôl hyn, mae'r gweinydd yn dechrau llunio'r catalog.
Ffeithiau ar ffurf ffeiliau gweithredadwy
Rhoddir ffeithiau o'r fath mewn modiwlau yn y cyfeiriadur facts.d
. Wrth gwrs, rhaid i'r ffeiliau fod yn weithredadwy. Wrth redeg, rhaid iddynt allbynnu gwybodaeth i allbwn safonol naill ai mewn fformat YAML neu allwedd = gwerth.
Peidiwch ag anghofio bod y ffeithiau'n berthnasol i bob nod sy'n cael ei reoli gan y gweinydd poppet y mae eich modiwl wedi'i ddefnyddio iddo. Felly, yn y sgript, gofalwch eich bod yn gwirio bod gan y system yr holl raglenni a ffeiliau sy'n angenrheidiol i'ch ffaith weithio.
#!/bin/sh
echo "testfact=success"
#!/bin/sh
echo '{"testyamlfact":"success"}'
Ffeithiau Ruby
Rhoddir ffeithiau o'r fath mewn modiwlau yn y cyfeiriadur 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
Ffeithiau testun
Rhoddir ffeithiau o'r fath ar nodau yn y cyfeiriadur /etc/facter/facts.d
mewn hen Byped neu /etc/puppetlabs/facts.d
yn y Pyped newydd.
examplefact=examplevalue
---
examplefact2: examplevalue2
anotherfact: anothervalue
Cyrraedd y Ffeithiau
Mae dwy ffordd o fynd at y ffeithiau:
- trwy'r geiriadur
$facts
:$facts['fqdn']
; - defnyddio'r enw ffaith fel yr enw newidyn:
$fqdn
.
Mae'n well defnyddio geiriadur $facts
, neu hyd yn oed yn well, nodwch y gofod enw byd-eang ($::facts
).
Newidynnau adeiledig
Heblaw am y ffeithiau, mae yna hefyd
- ffeithiau y gellir ymddiried ynddynt — newidynnau sy'n cael eu cymryd o dystysgrif y cleient (gan fod y dystysgrif fel arfer yn cael ei chyhoeddi ar weinydd poppet, ni all yr asiant gymryd a newid ei dystysgrif, felly mae'r newidynnau yn “ymddiried”): enw'r dystysgrif, gwesteiwr ac enw parth, estyniadau o'r dystysgrif.
- ffeithiau gweinydd —newidynnau yn ymwneud â gwybodaeth am y gweinydd — fersiwn, enw, cyfeiriad IP gweinydd, amgylchedd.
- ffeithiau asiant — newidynnau a ychwanegir yn uniongyrchol gan asiant-pypedau, ac nid trwy facter — enw tystysgrif, fersiwn asiant, fersiwn pypedau.
- newidynnau meistr - Newidynnau Papetmaster (sic!). Mae tua'r un peth ag yn ffeithiau gweinydd, ynghyd â gwerthoedd paramedr cyfluniad ar gael.
- newidynnau casglwr — newidynnau crynhoydd sy'n wahanol ym mhob cwmpas: enw'r modiwl cyfredol ac enw'r modiwl y cyrchwyd y gwrthrych cyfredol ynddo. Gellir eu defnyddio, er enghraifft, i wirio nad yw eich dosbarthiadau preifat yn cael eu defnyddio'n uniongyrchol o fodiwlau eraill.
Ychwanegiad 1: sut i redeg a dadfygio hyn i gyd?
Roedd yr erthygl yn cynnwys llawer o enghreifftiau o god pypedau, ond ni ddywedodd wrthym o gwbl sut i redeg y cod hwn. Wel, dwi'n cywiro fy hun.
Mae asiant yn ddigon i redeg Puppet, ond yn y rhan fwyaf o achosion bydd angen gweinydd arnoch chi hefyd.
Asiant
O leiaf ers fersiwn XNUMX, pecynnau asiant pypedau o
Yn yr achos symlaf, i ddefnyddio'r cyfluniad pyped, mae'n ddigon i lansio'r asiant yn y modd di-weinydd: ar yr amod bod y cod pyped yn cael ei gopïo i'r nod, lansio 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
Mae'n well, wrth gwrs, sefydlu'r gweinydd a rhedeg asiantau ar y nodau yn y modd daemon - yna unwaith bob hanner awr byddant yn cymhwyso'r cyfluniad a lawrlwythwyd o'r gweinydd.
Gallwch chi efelychu'r model gwaith gwthio - ewch i'r nod y mae gennych ddiddordeb ynddo a dechreuwch sudo puppet agent -t
. Allwedd -t
(--test
) mewn gwirionedd yn cynnwys nifer o opsiynau y gellir eu galluogi yn unigol. Mae'r opsiynau hyn yn cynnwys y canlynol:
- peidiwch â rhedeg yn y modd daemon (yn ddiofyn mae'r asiant yn dechrau yn y modd daemon);
- cau i lawr ar ôl cymhwyso'r catalog (yn ddiofyn, bydd yr asiant yn parhau i weithio a chymhwyso'r cyfluniad unwaith bob hanner awr);
- ysgrifennu log gwaith manwl;
- dangos newidiadau mewn ffeiliau.
Mae gan yr asiant fodd gweithredu heb newidiadau - gallwch ei ddefnyddio pan nad ydych yn siŵr eich bod wedi ysgrifennu'r ffurfweddiad cywir ac eisiau gwirio beth yn union y bydd yr asiant yn ei newid yn ystod y llawdriniaeth. Mae'r modd hwn wedi'i alluogi gan y paramedr --noop
ar y llinell orchymyn: sudo puppet agent -t --noop
.
Yn ogystal, gallwch chi alluogi log dadfygio'r gwaith - ynddo, mae pyped yn ysgrifennu am yr holl gamau y mae'n eu cyflawni: am yr adnodd y mae'n ei brosesu ar hyn o bryd, am baramedrau'r adnodd hwn, pa raglenni y mae'n eu lansio. Wrth gwrs mae hwn yn baramedr --debug
.
Gweinydd
Ni fyddaf yn ystyried gosodiad llawn y gweinydd pappet a defnyddio cod iddo yn yr erthygl hon; Ni fyddaf ond yn dweud bod allan o'r blwch fersiwn gwbl weithredol o'r gweinydd nad oes angen cyfluniad ychwanegol arno i weithio gyda nifer fach o nodau (dyweder, hyd at gant). Bydd angen tiwnio nifer fwy o nodau - yn ddiofyn, nid yw gweinydd pypedau yn lansio mwy na phedwar gweithiwr, er mwyn cael mwy o berfformiad mae angen i chi gynyddu eu nifer a pheidiwch ag anghofio cynyddu'r terfynau cof, fel arall bydd y gweinydd yn casglu sbwriel y rhan fwyaf o'r amser.
Defnyddio cod - os oes ei angen arnoch yn gyflym ac yn hawdd, yna edrychwch (ar r10k)[
Atodiad 2: Canllawiau Codio
- Rhowch yr holl resymeg mewn dosbarthiadau a diffiniadau.
- Cadwch ddosbarthiadau a diffiniadau mewn modiwlau, nid mewn maniffestau sy'n disgrifio nodau.
- Defnyddiwch y ffeithiau.
- Peidiwch â gwneud ifs yn seiliedig ar enwau gwesteiwr.
- Mae croeso i chi ychwanegu paramedrau ar gyfer dosbarthiadau a diffiniadau - mae hyn yn well na rhesymeg ymhlyg sydd wedi'i chuddio yng nghorff y dosbarth/diffiniad.
Byddaf yn esbonio pam yr wyf yn argymell gwneud hyn yn yr erthygl nesaf.
Casgliad
Gadewch i ni orffen gyda'r cyflwyniad. Yn yr erthygl nesaf byddaf yn dweud wrthych am Hiera, ENC a PuppetDB.
Dim ond defnyddwyr cofrestredig all gymryd rhan yn yr arolwg.
Yn wir, mae llawer mwy o ddeunydd - gallaf ysgrifennu erthyglau ar y pynciau canlynol, pleidleisio ar yr hyn y byddai gennych ddiddordeb mewn darllen amdano:
- 59,1%Lluniadau pyped uwch - rhywfaint o cachu lefel nesaf: dolenni, mapio ac ymadroddion lambda eraill, casglwyr adnoddau, adnoddau wedi'u hallforio a chyfathrebu rhyng-westeiwr trwy gyfrwng Pyped, tagiau, darparwyr, mathau data haniaethol.13
- 31,8%“Gweinyddwr fy mam ydw i” neu sut y gwnaethon ni yn Avito ffrindiau â sawl gweinydd poppet o wahanol fersiynau, ac, mewn egwyddor, y rhan am weinyddu'r gweinydd poppet.7
- 81,8%Sut rydym yn ysgrifennu cod pyped: offeryniaeth, dogfennaeth, profi, CI/CD.18
Pleidleisiodd 22 o ddefnyddwyr. Ymataliodd 9 o ddefnyddwyr.
Ffynhonnell: hab.com