Ang puppet usa ka sistema sa pagdumala sa configuration. Gigamit kini aron madala ang mga host sa gusto nga estado ug mapadayon kini nga estado.
Kapin na sa lima ka tuig nga nagtrabaho ko sa Puppet. Kini nga teksto usa ka gihubad ug gi-reorder nga paghugpong sa mga yawe nga punto gikan sa opisyal nga dokumentasyon, nga magtugot sa mga nagsugod nga dali nga masabtan ang esensya sa Puppet.
Mga sukaranan nga kasayuran
Ang operating system sa Puppet kay client-server, bisan tuod nagsuporta usab kini sa walay server nga operasyon nga adunay limitado nga gamit.
Ang usa ka modelo sa pagbitad sa operasyon gigamit: sa default, kausa sa matag tunga sa oras, ang mga kliyente makontak sa server alang sa usa ka pagsumpo ug ipadapat kini. Kung nagtrabaho ka sa Ansible, unya mogamit sila usa ka lahi nga modelo sa pagduso: gisugdan sa tagdumala ang proseso sa pag-apply sa pagsumpo, ang mga kliyente mismo dili mag-aplay bisan unsa.
Atol sa komunikasyon sa network, ang duha ka paagi nga TLS encryption gigamit: ang server ug kliyente adunay ilang kaugalingong pribadong mga yawe ug katugbang nga mga sertipiko. Kasagaran ang server nag-isyu og mga sertipiko alang sa mga kliyente, apan sa prinsipyo posible nga gamiton ang usa ka eksternal nga CA.
Pasiuna sa mga manifesto
Sa Puppet terminolohiya sa puppet server magkonektar mga node (mga node). Ang pagsumpo alang sa mga node gisulat sa mga manifesto sa usa ka espesyal nga programming language - Puppet DSL.
Ang Puppet DSL usa ka deklaratibo nga pinulongan. Gihubit niini ang gitinguha nga kahimtang sa node sa porma sa mga deklarasyon sa indibidwal nga mga kahinguhaan, pananglitan:
Ang file anaa ug kini adunay piho nga sulod.
Gi-install ang package.
Nagsugod na ang serbisyo.
Ang mga kapanguhaan mahimong magkadugtong:
Adunay mga dependency, kini makaapekto sa han-ay diin ang mga kapanguhaan gigamit.
Pananglitan, "una nga i-install ang package, dayon i-edit ang configuration file, dayon sugdi ang serbisyo."
Adunay mga pahibalo - kung nabag-o ang usa ka kapanguhaan, nagpadala kini mga pahibalo sa mga kapanguhaan nga naka-subscribe niini.
Pananglitan, kung mausab ang configuration file, mahimo nimong awtomatiko nga i-restart ang serbisyo.
Dugang pa, ang Puppet DSL adunay mga function ug variables, ingon man mga conditional statement ug mga tigpili. Gisuportahan usab ang lainlaing mga mekanismo sa template - EPP ug ERB.
Ang puppet gisulat sa Ruby, daghan kaayo sa mga construct ug termino ang gikuha gikan didto. Gitugotan ka ni Ruby nga mapalapad ang Puppet - pagdugang komplikado nga lohika, bag-ong mga lahi sa mga kapanguhaan, mga gimbuhaton.
Samtang nagdagan ang Puppet, ang mga pagpakita alang sa matag piho nga node sa server gitipon sa usa ka direktoryo. Directory usa ka lista sa mga kahinguhaan ug ang ilang mga relasyon pagkahuman sa pagkalkulo sa kantidad sa mga gimbuhaton, mga variable ug pagpalapad sa mga kondisyon nga pahayag.
Syntax ug codestyle
Ania ang mga seksyon sa opisyal nga dokumentasyon nga makatabang kanimo nga masabtan ang syntax kung ang mga pananglitan nga gihatag dili igo:
Ania ang usa ka pananglitan kung unsa ang hitsura sa manifest:
# Комментарии пишутся, как и много где, после решётки.
#
# Описание конфигурации ноды начинается с ключевого слова node,
# за которым следует селектор ноды — хостнейм (с доменом или без)
# или регулярное выражение для хостнеймов, или ключевое слово default.
#
# После этого в фигурных скобках описывается собственно конфигурация ноды.
#
# Одна и та же нода может попасть под несколько селекторов. Про приоритет
# селекторов написано в статье про синтаксис описания нод.
node 'hostname', 'f.q.d.n', /regexp/ {
# Конфигурация по сути является перечислением ресурсов и их параметров.
#
# У каждого ресурса есть тип и название.
#
# Внимание: не может быть двух ресурсов одного типа с одинаковыми названиями!
#
# Описание ресурса начинается с его типа. Тип пишется в нижнем регистре.
# Про разные типы ресурсов написано ниже.
#
# После типа в фигурных скобках пишется название ресурса, потом двоеточие,
# дальше идёт опциональное перечисление параметров ресурса и их значений.
# Значения параметров указываются через т.н. hash rocket (=>).
resource { 'title':
param1 => value1,
param2 => value2,
param3 => value3,
}
}
Ang indentation ug line break dili kinahanglan nga bahin sa manifest, apan adunay girekomenda gabay sa estilo. Katingbanan:
Duha ka luna indents, tabs wala gigamit.
Ang mga kulot nga braces gibulag sa usa ka luna; ang mga colon dili gibulag sa usa ka luna.
Mga koma pagkahuman sa matag parameter, lakip ang katapusan. Ang matag parameter naa sa usa ka lahi nga linya. Ang usa ka eksepsiyon gihimo alang sa kaso nga walay mga parametro ug usa ka parametro: mahimo nimong isulat sa usa ka linya ug walay comma (ie. resource { 'title': } и resource { 'title': param => value }).
Ang mga pana sa mga parameter kinahanglan nga parehas nga lebel.
Ang mga pana sa relasyon sa kahinguhaan gisulat sa ilang atubangan.
Lokasyon sa mga file sa pappetserver
Alang sa dugang katin-awan, akong ipaila ang konsepto sa "root directory". Ang root directory mao ang direktoryo nga naglangkob sa Puppet configuration alang sa usa ka piho nga node.
Ang gamut nga direktoryo lainlain depende sa bersyon sa Puppet ug sa mga palibot nga gigamit. Ang mga palibot kay independente nga set sa configuration nga gitipigan sa separado nga mga direktoryo. Kasagaran gigamit sa kombinasyon sa git, diin ang mga palibot gihimo gikan sa mga sanga sa git. Busa, ang matag node nahimutang sa usa ka palibot o sa lain. Mahimo kini nga ma-configure sa node mismo, o sa ENC, nga akong hisgutan sa sunod nga artikulo.
Sa ikatulo nga bersyon ("daan nga Puppet") ang base nga direktoryo mao ang /etc/puppet. Opsyonal ang paggamit sa mga palibot - pananglitan, wala namo kini gamita sa karaang Puppet. Kung gigamit ang mga palibot, kasagaran kini gitipigan /etc/puppet/environments, ang root directory mao ang environment directory. Kung dili gamiton ang mga palibot, ang root directory mao ang base nga direktoryo.
Sugod sa ikaupat nga bersyon ("bag-ong Puppet"), ang paggamit sa mga palibot nahimong mandatory, ug ang base nga direktoryo gibalhin ngadto sa /etc/puppetlabs/code. Tungod niini, ang mga palibot gitipigan sa /etc/puppetlabs/code/environments, ang root directory mao ang environment directory.
Kinahanglang adunay subdirectory sa root directory manifests, nga adunay usa o daghan pa nga mga pagpakita nga naghulagway sa mga node. Dugang pa, kinahanglan adunay usa ka subdirectory modules, nga naglangkob sa mga module. Isulti ko kanimo kung unsa nga mga module ang ulahi. Dugang pa, ang daan nga Puppet mahimo usab nga adunay usa ka subdirektoryo files, nga adunay lainlaing mga file nga among gikopya sa mga node. Sa bag-ong Puppet, ang tanan nga mga file gibutang sa mga module.
Ang mga manifest file adunay extension .pp.
Pipila ka mga pananglitan sa panagsangka
Deskripsyon sa node ug kahinguhaan niini
Sa node server1.testdomain usa ka file kinahanglan nga buhaton /etc/issue uban sa sulod Debian GNU/Linux n l. Ang file kinahanglan nga gipanag-iya sa usa ka user ug grupo root, ang mga katungod sa pag-access kinahanglan 644.
Nagsulat kami usa ka 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 в начале будет воспринято как записанное в восьмеричной системе, и всё пойдёт не так, как задумано
}
}
Mga relasyon tali sa mga kahinguhaan sa usa ka node
Sa node server2.testdomain Ang nginx kinahanglan nga nagdagan, nagtrabaho uban ang usa ka giandam nga pag-configure kaniadto.
Atong wagtangon ang problema:
Kinahanglang i-install ang package nginx.
Kinahanglan nga kopyahon ang mga file sa pag-configure gikan sa server.
Ang serbisyo kinahanglan nga modagan nginx.
Kung gi-update ang pag-configure, kinahanglan nga i-restart ang serbisyo.
Nagsulat kami usa ka 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 получает уведомление,
# соответствующий сервис перезапускается.
}
Aron kini molihok, kinahanglan nimo ang gibana-bana nga mosunud nga lokasyon sa file sa puppet server:
/etc/puppetlabs/code/environments/production/ # (это для нового Паппета, для старого корневой директорией будет /etc/puppet)
├── manifests/
│ └── site.pp
└── modules/
└── example/
└── files/
└── nginx-conf/
├── nginx.conf
├── mime.types
└── conf.d/
└── some.conf
Mga Matang sa Kapanguhaan
Ang usa ka kompleto nga lista sa gisuportahan nga mga tipo sa kapanguhaan makit-an dinhi sa dokumentasyon, dinhi akong ihulagway ang lima ka sukaranan nga mga tipo, nga sa akong praktis igo na aron masulbad ang kadaghanan sa mga problema.
file
Nagdumala sa mga file, direktoryo, symlink, mga sulod niini, ug mga katungod sa pag-access.
Parameter:
ngalan sa kapanguhaan - dalan sa file (opsyonal)
dalan - agianan sa file (kung wala kini gipiho sa ngalan)
sa pagsiguro - tipo sa file:
absent - pagtangtang sa usa ka file
present — kinahanglan adunay usa ka file sa bisan unsang klase (kung wala’y file, usa ka regular nga file ang himuon)
file - regular nga file
directory - direktoryo
link - symlink
sulod — mga sulud sa file (angay ra alang sa regular nga mga file, dili magamit kauban ang tinubdan o target)
tinubdan — usa ka link sa dalan diin gusto nimong kopyahon ang mga sulud sa file (dili magamit kauban ang sulod o target). Mahimong ipiho nga usa ka URI nga adunay laraw puppet: (dayon ang mga file gikan sa puppet server gamiton), ug uban sa laraw http: (Naglaum ko nga klaro kung unsa ang mahitabo sa kini nga kaso), ug bisan sa diagram file: o ingon usa ka hingpit nga agianan nga wala’y schema (dayon ang file gikan sa lokal nga FS sa node gamiton)
target — diin ang symlink kinahanglan magpunting (dili magamit kauban ang sulod o tinubdan)
tag-iya — ang user nga kinahanglan tag-iya sa file
grupo — ang grupo diin ang file kinahanglan nga nahisakop
mode - mga pagtugot sa file (ingon usa ka hilo)
pagsubli - makapahimo sa recursive nga pagproseso sa direktoryo
limpyo - makapahimo sa pagtangtang sa mga file nga wala gihulagway sa Puppet
puwersa - makapahimo sa pagtangtang sa mga direktoryo nga wala gihulagway sa Puppet
Pakete
Pag-instalar ug pagtangtang sa mga pakete. Makadumala sa mga pahibalo - i-install pag-usab ang package kung ang parameter gitakda reinstall_on_refresh.
Parameter:
ngalan sa kapanguhaan - ngalan sa pakete (opsyonal)
ngalan - ngalan sa pakete (kung wala gipiho sa ngalan)
provider - tagdumala sa pakete nga gamiton
sa pagsiguro - gitinguha nga kahimtang sa pakete:
present, installed - bisan unsang bersyon nga na-install
latest - pinakabag-o nga bersyon nga na-install
absent - gitangtang (apt-get remove)
purged - gitangtang kauban ang mga file sa pag-configure (apt-get purge)
held - ang bersyon sa pakete gi-lock (apt-mark hold)
любая другая строка - ang gitakda nga bersyon gi-install
reinstall_on_refresh - kung true, unya sa pagkadawat sa pahibalo ang package i-install pag-usab. Mapuslanon alang sa mga pag-apod-apod nga nakabase sa gigikanan, kung diin kinahanglan ang mga pakete sa pagtukod pag-usab kung magbag-o sa mga parameter sa pagtukod. Default false.
nga pag-alagad
Nagdumala sa mga serbisyo. Makahimo sa pagproseso sa mga pahibalo - i-restart ang serbisyo.
Parameter:
ngalan sa kapanguhaan — serbisyo nga dumalahon (opsyonal)
ngalan — ang serbisyo nga kinahanglan madumala (kung wala gipiho sa ngalan)
sa pagsiguro — gitinguha nga kahimtang sa serbisyo:
running - gilusad
stopped - mihunong
makahimo — nagkontrol sa abilidad sa pagsugod sa serbisyo:
true — gipalihok ang autorun (systemctl enable)
mask - nagtakuban (systemctl mask)
false — ang autorun gi-disable (systemctl disable)
Pagsugod pag-usab - sugo nga i-restart ang serbisyo
status — sugo aron susihon ang kahimtang sa serbisyo
gi-restart — ipakita kung ang serbisyo initscript nagsuporta sa pagsugod pag-usab. Kung false ug ang parameter gitakda Pagsugod pag-usab - ang bili niini nga parameter gigamit. Kung false ug parameter Pagsugod pag-usab wala gipiho - ang serbisyo gipahunong ug gisugdan pag-usab (apan gigamit sa systemd ang command systemctl restart).
hasstatus — ipakita kung ang serbisyo initscript nagsuporta sa sugo status. Kon false, unya ang parameter value gigamit status. Default true.
exec
Nagdagan sa gawas nga mga sugo. Kung dili nimo ipiho ang mga parameter nagmugna, kung, gawas kon o refreshonly, ang command ipadagan sa matag Puppet nga ipadagan. Makahimo sa pagproseso sa mga pahibalo - nagpadagan sa usa ka sugo.
Parameter:
ngalan sa kapanguhaan - sugo nga ipatuman (opsyonal)
sugo — ang mando nga ipatuman (kung wala kini gipiho sa ngalan)
dalan — mga dalan diin pangitaon ang executable file
kung — kung ang mando nga gipiho sa kini nga parameter nakompleto sa usa ka zero return code, ang panguna nga mando ipatuman
gawas kon - kung ang mando nga gipiho sa kini nga parameter nahuman sa usa ka non-zero return code, ang panguna nga mando ipatuman
nagmugna - kung ang file nga gitakda sa kini nga parameter wala maglungtad, ang panguna nga mando ipatuman
refreshonly - kung true, unya ang sugo ipadagan lamang kung kini nga exec makadawat og pahibalo gikan sa ubang mga kapanguhaan
cwd — direktoryo nga gikan diin ipadagan ang mando
user — ang tiggamit gikan kang kinsa modagan sa sugo
provider - unsaon pagpadagan ang sugo:
posix — usa ka proseso sa bata ang gihimo ra, siguruha nga ipiho dalan
kabhang - ang sugo gilunsad sa kabhang /bin/sh, mahimong dili espesipiko dalan, mahimo nimong gamiton ang globbing, mga tubo ug uban pang mga bahin sa kabhang. Kasagaran nga awtomatikong makit-an kung adunay bisan unsang espesyal nga mga karakter (|, ;, &&, || ug uban pa).
cron
Gikontrol ang mga cronjob.
Parameter:
ngalan sa kapanguhaan - usa lang ka matang sa identifier
sa pagsiguro - estado sa korona:
present - paghimo kung wala
absent - delete kung naa
sugo - unsa nga sugo sa pagdagan
palibot — diin ang palibot ipadagan ang mando (lista sa mga variable sa palibot ug ang ilang mga kantidad pinaagi sa =)
user — diin gikan ang tiggamit nga modagan sa mando
minuto, oras, adlaw sa semana, bulan, adlaw sa bulan - kanus-a modagan ang cron. Kung ang bisan unsa niini nga mga hiyas wala gitino, ang kantidad niini sa crontab mahimong *.
Mga kinahanglanon alang sa pagkatalagsaon sa kahinguhaan
Ang kasagarang sayop nga atong masugatan mao Duplicate nga deklarasyon. Kini nga sayup mahitabo kung ang duha o daghang mga kapanguhaan sa parehas nga tipo nga adunay parehas nga ngalan makita sa direktoryo.
Busa, ako mosulat pag-usab: Ang mga pagpakita alang sa parehas nga node kinahanglan dili maglangkob sa mga kapanguhaan sa parehas nga tipo nga adunay parehas nga titulo!
Usahay adunay panginahanglan sa pag-instalar sa mga pakete nga adunay parehas nga ngalan, apan adunay lainlaing mga managers sa package. Sa kini nga kaso, kinahanglan nimo nga gamiton ang parameter namepara malikayan ang error:
Ang ubang mga tipo sa kahinguhaan adunay susama nga mga kapilian aron makatabang sa paglikay sa pagdoble - name у nga pag-alagad, command у exec, ug uban pa.
Metaparameter
Ang matag matang sa kapanguhaan adunay pipila ka espesyal nga mga parameter, bisan unsa pa ang kinaiyahan niini.
nagkinahanglan — kini nga parameter nagpaila kung unsang mga kapanguhaan ang gisaligan niini nga kapanguhaan.
sa atubangan sa - Kini nga parameter nagtino kung unsang mga kapanguhaan ang nagdepende niini nga kapanguhaan.
subscribe — kini nga parametro nagpiho gikan sa diin nga mga kapanguhaan kini nga kapanguhaan makadawat mga pahibalo.
pahibal-a — Kini nga parameter nagtino kung unsang mga kapanguhaan ang makadawat mga pahibalo gikan sa kini nga kapanguhaan.
Ang tanan nga nalista nga metaparameter modawat sa usa ka link sa kapanguhaan o usa ka han-ay sa mga link sa square bracket.
Mga link sa mga kapanguhaan
Ang usa ka sumpay sa kapanguhaan usa lamang ka paghisgot sa kapanguhaan. Kini kasagarang gigamit sa pagpaila sa mga dependency. Ang paghisgot sa usa ka wala-naglungtad nga kapanguhaan mahimong hinungdan sa usa ka sayup sa pagtipon.
Ang syntax sa link mao ang mosunod: resource type nga adunay kapital nga letra (kung ang type name adunay double colons, nan ang matag bahin sa ngalan tali sa colon kay gi-capitalize), unya ang resource name sa square brackets (ang kaso sa ngalan. dili mausab!). Kinahanglang walay mga luna; ang mga square bracket gisulat dayon human sa ngalan sa tipo.
Sama sa giingon sa sayo pa, ang yano nga mga dependency tali sa mga kahinguhaan kay transitive. Pinaagi sa dalan, pag-amping sa pagdugang sa mga dependency - mahimo ka nga maghimo cyclic dependencies, nga magpahinabog usa ka sayup sa pag-compile.
Dili sama sa mga dependency, ang mga pahibalo dili transitive. Ang mosunod nga mga lagda magamit alang sa mga pahibalo:
Kung ang kapanguhaan makadawat usa ka pahibalo, kini gi-update. Ang mga aksyon sa pag-update nagdepende sa tipo sa kapanguhaan − exec nagpadagan sa mando, nga pag-alagad i-restart ang serbisyo, Pakete i-install pag-usab ang package. Kung ang kapanguhaan walay gihubit nga aksyon sa pag-update, nan walay mahitabo.
Atol sa usa ka run sa Puppet, ang kahinguhaan gi-update dili labaw sa kausa. Posible kini tungod kay ang mga pahibalo naglakip sa mga dependency ug ang dependency graph walay mga siklo.
Kung ang Puppet magbag-o sa kahimtang sa usa ka kapanguhaan, ang kapanguhaan magpadala mga pahibalo sa tanan nga mga kapanguhaan nga naka-subscribe niini.
Kung ang usa ka kapanguhaan gi-update, nagpadala kini mga pahibalo sa tanan nga mga kapanguhaan nga naka-subscribe niini.
Pagdumala sa wala matino nga mga parameter
Ingon sa usa ka lagda, kung ang pipila ka parametro sa kahinguhaan walay default nga bili ug kini nga parameter wala gipiho sa manifest, nan ang Puppet dili mag-usab niini nga kabtangan alang sa katugbang nga kapanguhaan sa node. Pananglitan, kon ang usa ka kapanguhaan sa matang file wala gipiho ang parameter owner, unya ang Puppet dili mag-usab sa tag-iya sa katugbang nga file.
Pasiuna sa mga klase, mga variable ug mga kahulugan
Ibutang ta nga kita adunay daghang mga node nga adunay parehas nga bahin sa pagsumpo, apan adunay usab mga kalainan - kung dili mahimo naton ihulagway kini tanan sa usa ka bloke. node {}. Siyempre, mahimo nimong kopyahon ang parehas nga mga bahin sa pagsumpo, apan sa kinatibuk-an kini usa ka dili maayo nga solusyon - ang pag-configure motubo, ug kung imong usbon ang kinatibuk-ang bahin sa pagsumpo, kinahanglan nimo nga i-edit ang parehas nga butang sa daghang mga lugar. Sa samang higayon, sayon ang masayop, ug sa kinatibuk-an, ang DRY (ayaw pag-usab sa imong kaugalingon) nga prinsipyo giimbento alang sa usa ka rason.
Aron masulbad kini nga problema adunay usa ka disenyo sama sa класс.
Mga klase
Класс mao ang usa ka ginganlan block sa poppet code. Kinahanglan ang mga klase aron magamit pag-usab ang code.
Una kinahanglan nga ihulagway ang klase. Ang paghulagway mismo wala magdugang bisan unsang mga kahinguhaan bisan asa. Ang klase gihulagway sa mga pagpakita:
# Описание класса начинается с ключевого слова class и его названия.
# Дальше идёт тело класса в фигурных скобках.
class example_class {
...
}
Human niini ang klase mahimong gamiton:
# первый вариант использования — в стиле ресурса с типом class
class { 'example_class': }
# второй вариант использования — с помощью функции include
include example_class
# про отличие этих двух вариантов будет рассказано дальше
Usa ka pananglitan gikan sa miaging buluhaton - atong ibalhin ang pag-install ug pag-configure sa nginx sa usa ka klase:
Ang klase gikan sa miaging pananglitan dili gyud mabag-o tungod kay kanunay kini nagdala sa parehas nga pagsumpo sa nginx. Himoon nato ang dalan paingon sa configuration variable, unya kini nga klase mahimong gamiton sa pag-instalar sa nginx sa bisan unsang configuration.
Dugang pa, ang usa ka variable mahimo ra ma-access pagkahuman nga kini gideklarar, kung dili ang kantidad sa variable mahimong undef.
Pananglitan sa pagtrabaho sa mga variable:
# создание переменных
$variable = 'value'
$var2 = 1
$var3 = true
$var4 = undef
# использование переменных
$var5 = $var6
file { '/tmp/text': content => $variable }
# интерполяция переменных — раскрытие значения переменных в строках. Работает только в двойных кавычках!
$var6 = "Variable with name variable has value ${variable}"
Puppet adunay mga namespace, ug ang mga variable, sumala niana, adunay lugar nga makita: Ang usa ka variable nga adunay parehas nga ngalan mahimong ipasabut sa lainlaing mga namespaces. Kung gisulbad ang kantidad sa usa ka variable, ang variable gipangita sa karon nga namespace, dayon sa gilakip nga namespace, ug uban pa.
Mga pananglitan sa namespace:
global - ang mga variable sa gawas sa klase o paghulagway sa node moadto didto;
node namespace sa deskripsyon sa node;
namespace sa klase sa deskripsyon sa klase.
Aron malikayan ang kalabuan kung mag-access sa usa ka variable, mahimo nimong ipiho ang namespace sa variable nga ngalan:
# переменная без пространства имён
$var
# переменная в глобальном пространстве имён
$::var
# переменная в пространстве имён класса
$classname::var
$::classname::var
Mouyon kita nga ang dalan sa pag-configure sa nginx naa sa variable $nginx_conf_source. Dayon ang klase mahimong sama niini:
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
}
Bisan pa, ang gihatag nga pananglitan dili maayo tungod kay adunay pipila nga "tinago nga kahibalo" nga sa usa ka lugar sa sulod sa klase usa ka variable nga adunay ingon ug ingon nga ngalan ang gigamit. Mas husto nga himuon kini nga kahibalo nga kinatibuk-an - ang mga klase mahimong adunay mga parameter.
Mga parametro sa klase mga variable sa namespace sa klase, gipiho kini sa header sa klase ug mahimong magamit sama sa regular nga mga variable sa lawas sa klase. Ang mga kantidad sa parameter gitino kung gigamit ang klase sa manifest.
Ang parameter mahimong itakda sa usa ka default nga kantidad. Kung ang usa ka parameter walay default nga kantidad ug ang kantidad wala itakda kung gigamit, kini hinungdan sa usa ka sayup sa pag-compile.
Atong i-parameter ang klase gikan sa panig-ingnan sa ibabaw ug idugang ang duha ka mga parameter: ang una, gikinahanglan, mao ang dalan sa pag-configure, ug ang ikaduha, opsyonal, mao ang ngalan sa package nga adunay nginx (sa Debian, pananglitan, adunay mga pakete. 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', # задаём параметры класса точно так же, как параметры для других ресурсов
}
}
Sa Puppet, gi-type ang mga variable. Kaon daghang mga tipo sa datos. Ang mga tipo sa datos kasagarang gigamit aron ma-validate ang mga kantidad sa parameter nga gipasa sa mga klase ug mga kahulugan. Kung ang gipasa nga parameter dili motakdo sa gipiho nga tipo, mahitabo ang usa ka sayup sa pag-compile.
Ang tipo gisulat dayon sa wala pa ang ngalan sa parameter:
class example (
String $param1,
Integer $param2,
Array $param3,
Hash $param4,
Hash[String, String] $param5,
) {
...
}
Mga klase: iapil ang classname vs class{'classname':}
Ang matag klase usa ka kapanguhaan sa tipo klase. Sama sa bisan unsang lain nga matang sa kapanguhaan, dili mahimo nga duha ka mga higayon sa parehas nga klase sa parehas nga node.
Kung mosulay ka pagdugang usa ka klase sa parehas nga node kaduha gamit class { 'classname':} (walay kalainan, nga adunay lainlain o parehas nga mga parameter), adunay usa ka sayup sa pagtipon. Apan kung mogamit ka usa ka klase sa istilo sa kapanguhaan, mahimo nimo nga klaro nga itakda ang tanan nga mga parameter niini sa manifest.
Apan, kon imong gamiton include, unya ang klase mahimong idugang sa makadaghang higayon nga gusto. Ang kamatuoran mao kana include usa ka function nga idempotent nga nagsusi kung ang usa ka klase gidugang sa direktoryo. Kung ang klase wala sa direktoryo, idugang kini, ug kung naglungtad na kini, wala’y mahimo. Apan sa kaso sa paggamit include Dili nimo mahimo ang mga parameter sa klase sa panahon sa deklarasyon sa klase - ang tanan nga gikinahanglan nga mga parameter kinahanglan ibutang sa usa ka eksternal nga tinubdan sa datos - Hiera o ENC. Atong hisgotan sila sa sunod nga artikulo.
Nagpasabot
Sama sa giingon sa miaging block, ang parehas nga klase dili mahimong naa sa usa ka node labaw sa usa ka beses. Bisan pa, sa pipila ka mga kaso kinahanglan nimo nga magamit ang parehas nga bloke sa code nga adunay lainlaing mga parameter sa parehas nga node. Sa laing pagkasulti, adunay panginahanglan alang sa usa ka matang sa kapanguhaan sa iyang kaugalingon.
Pananglitan, aron ma-install ang PHP module, buhaton namo ang mosunod sa Avito:
I-install ang package gamit kini nga module.
Magbuhat ta ug configuration file para niini nga module.
Naghimo kami og symlink sa config para sa php-fpm.
Naghimo kami usa ka symlink sa config para sa php cli.
Sa maong mga kaso, usa ka disenyo sama sa ipasabot (paghubit, gihubit nga tipo, gipiho nga tipo sa kapanguhaan). Ang usa ka Define susama sa usa ka klase, apan adunay mga kalainan: una, ang matag Define usa ka tipo sa kapanguhaan, dili usa ka kapanguhaan; ikaduha, ang matag kahulugan adunay implicit nga parameter $title, diin ang ngalan sa kapanguhaan moadto kung kini gipahayag. Sama sa kaso sa mga klase, ang usa ka kahulugan kinahanglan una nga ihulagway, pagkahuman kini magamit.
Usa ka gipasimple nga pananglitan nga adunay usa ka module alang sa 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' }
}
Ang pinakasayon nga paagi sa pagdakop sa Duplicate nga deklarasyon nga sayop anaa sa Define. Mahitabo kini kung ang usa ka kahulugan adunay usa ka kapanguhaan nga adunay kanunay nga ngalan, ug adunay duha o daghan pa nga mga higayon sa kini nga kahulugan sa pila ka node.
Sayon ang pagpanalipod sa imong kaugalingon gikan niini: ang tanan nga mga kapanguhaan sa sulod sa kahulugan kinahanglan adunay usa ka ngalan depende sa $title. Ang usa ka alternatibo mao ang idempotent nga pagdugang sa mga kahinguhaan; sa pinakasimple nga kaso, igo na nga ibalhin ang mga kapanguhaan nga komon sa tanan nga mga higayon sa kahulugan ngadto sa usa ka lain nga klase ug ilakip kini nga klase sa kahulugan - function include idempotent.
Adunay uban nga mga paagi aron makab-ot ang idempotency kung magdugang mga kapanguhaan, nga mao ang paggamit sa mga gimbuhaton defined и ensure_resources, apan isulti ko kanimo ang bahin niini sa sunod nga yugto.
Dependencies ug mga pahibalo alang sa mga klase ug mga kahulugan
Ang mga klase ug mga kahulugan nagdugang sa mosunod nga mga lagda sa pagdumala sa mga dependency ug mga pahibalo:
dependency sa usa ka klase / define nagdugang dependencies sa tanan nga mga kapanguhaan sa klase / define;
ang usa ka klase/gihubit nga dependency nagdugang mga dependency sa tanan nga klase/gipasabut nga mga kapanguhaan;
class/define nga pahibalo nagpahibalo sa tanang kahinguhaan sa klase/define;
class/define subscription subscribes sa tanang resources sa class/define.
gawas kung usa ka kung baliskad: ang block sa code ipatuman kung ang ekspresyon bakak.
unless ВЫРАЖЕНИЕ {
...
}
kaso
Wala'y bisan unsa nga komplikado dinhi. Mahimo nimong gamiton ang mga regular nga kantidad (mga kuwerdas, numero, ug uban pa), regular nga mga ekspresyon, ug mga tipo sa datos ingon mga kantidad.
case ВЫРАЖЕНИЕ {
ЗНАЧЕНИЕ1: { ... }
ЗНАЧЕНИЕ2, ЗНАЧЕНИЕ3: { ... }
default: { ... }
}
Mga tigpili
Ang usa ka tigpili usa ka lengguwahe nga pagtukod nga susama sa case, apan imbis nga ipatuman ang usa ka bloke sa code, nagbalik kini usa ka kantidad.
Kung gamay ra ang pag-configure, dali kini matipigan sa usa ka pagpakita. Apan ang daghang mga pag-configure nga atong gihulagway, ang daghang mga klase ug mga node naa sa pagpakita, kini motubo, ug kini mahimong dili kombenyente sa pagtrabaho.
Dugang pa, adunay problema sa paggamit pag-usab sa code - kung ang tanan nga code naa sa usa ka manifest, lisud nga ipaambit kini nga code sa uban. Aron masulbad kining duha ka problema, ang Puppet adunay entidad nga gitawag og modules.
Mga Modulo - kini ang mga set sa mga klase, kahulugan ug uban pang Puppet entity nga gibutang sa usa ka lahi nga direktoryo. Sa laing pagkasulti, ang module kay independente nga piraso sa Puppet logic. Pananglitan, mahimo nga adunay usa ka module alang sa pagtrabaho sa nginx, ug kini adunay sulod kung unsa ug kung unsa lamang ang gikinahanglan aron magtrabaho sa nginx, o adunay usa ka module alang sa pagtrabaho sa PHP, ug uban pa.
Ang mga module gi-bersyon, ug ang mga dependency sa mga module sa usag usa gisuportahan usab. Adunay usa ka bukas nga repository sa mga module - Puppet Forge.
Sa puppet server, ang mga module nahimutang sa modules subdirectory sa root directory. Sa sulod sa matag module adunay usa ka sumbanan nga laraw sa direktoryo - mga pagpakita, mga file, mga template, lib, ug uban pa.
Ang istruktura sa file sa usa ka module
Ang gamut sa module mahimong adunay mga musunod nga mga direktoryo nga adunay mga deskriptibo nga ngalan:
manifests - kini adunay mga manifesto
files - kini adunay mga file
templates - kini adunay mga templates
lib - kini adunay Ruby code
Dili kini usa ka kompleto nga lista sa mga direktoryo ug mga file, apan igo na kini alang sa kini nga artikulo sa pagkakaron.
Mga ngalan sa mga kapanguhaan ug mga ngalan sa mga file sa module
Ang mga kapanguhaan (mga klase, mga kahulugan) sa usa ka module dili mahimong nganlan kung unsa ang gusto nimo. Dugang pa, adunay usa ka direkta nga sulat tali sa ngalan sa usa ka kapanguhaan ug ang ngalan sa file diin ang Puppet mangita alang sa usa ka paghulagway sa kana nga kapanguhaan. Kung gilapas nimo ang mga lagda sa pagngalan, nan ang Puppet dili gyud makit-an ang paghulagway sa kapanguhaan, ug makakuha ka usa ka sayup sa pag-compile.
Simple ra ang mga lagda:
Ang tanan nga mga kapanguhaan sa usa ka module kinahanglan nga naa sa namespace sa module. Kung ang module gitawag foo, unya ang tanan nga mga kapanguhaan niini kinahanglan nganlan foo::<anything>, o lang foo.
Ang kapanguhaan nga adunay ngalan sa module kinahanglan nga naa sa file init.pp.
Alang sa ubang mga kapanguhaan, ang laraw sa pagngalan sa file mao ang mosunod:
ang prefix nga adunay ngalan sa module gilabay
ang tanan nga doble nga colon, kung adunay, gipulihan sa mga laslas
gidugang ang extension .pp
Akong ipakita uban ang usa ka pananglitan. Ingnon ta nga nagsulat ko og module nginx. Kini naglangkob sa mosunod nga mga kapanguhaan:
класс nginx gihulagway sa manifest init.pp;
класс nginx::service gihulagway sa manifest service.pp;
ipasabot nginx::server gihulagway sa manifest server.pp;
ipasabot nginx::server::location gihulagway sa manifest server/location.pp.
Mga pattern
Sigurado nga nahibal-an nimo mismo kung unsa ang mga template; Dili ko kini ihulagway sa detalye dinhi. Pero biyaan ra nako link sa Wikipedia.
Giunsa paggamit ang mga template: Ang kahulugan sa usa ka template mahimong mapalapad gamit ang usa ka function template, nga gipasa sa agianan padulong sa template. Alang sa mga kapanguhaan sa tipo file gigamit kauban ang parameter content. Pananglitan, sama niini:
<% ВЫРАЖЕНИЕ %> — kuwentaha ang bili sa usa ka ekspresyon (nga walay pagsal-ot niini). Ang mga kondisyon nga pahayag (kung) ug mga galong (matag usa) kasagarang moadto dinhi.
<%# КОММЕНТАРИЙ %>
Ang mga ekspresyon sa ERB gisulat sa Ruby (Ang ERB sa tinuud nga Embedded Ruby).
Aron ma-access ang mga variable gikan sa manifest, kinahanglan nimo nga idugang @ ngadto sa variable nga ngalan. Aron matangtang ang linya sa linya nga makita pagkahuman sa usa ka kontrol nga pagtukod, kinahanglan nimo nga mogamit usa ka panapos nga tag -%>.
Pananglitan sa paggamit sa template
Ingnon ta nga nagsulat ako usa ka module aron makontrol ang ZooKeeper. Ang klase nga responsable sa paghimo sa config ingon niini:
<% 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 -%>
Mga Kamatuoran ug Gitukod nga mga Variable
Kasagaran ang piho nga bahin sa pagsumpo nagdepende sa kung unsa ang nahitabo karon sa node. Pananglitan, depende sa kung unsa ang pagpagawas sa Debian, kinahanglan nimo nga i-install ang usa o lain nga bersyon sa package. Mahimo nimong bantayan ang tanan niini nga mano-mano, pagsulat pag-usab sa mga pagpakita kung magbag-o ang mga node. Apan dili kini seryoso nga pamaagi; mas maayo ang automation.
Aron makakuha og impormasyon bahin sa mga node, ang Puppet adunay mekanismo nga gitawag og facts. Mga Kamatuoran - kini ang kasayuran bahin sa node, nga magamit sa mga pagpakita sa porma sa ordinaryong mga variable sa global nga namespace. Pananglitan, ngalan sa host, bersyon sa operating system, arkitektura sa processor, lista sa mga tiggamit, lista sa mga interface sa network ug ilang mga adres, ug daghan pa. Ang mga kamatuoran anaa sa mga manifests ug templates isip regular nga mga variable.
Usa ka pananglitan sa pagtrabaho sa mga kamatuoran:
notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# ресурс типа notify просто выводит сообщение в лог
Atol sa operasyon, una nga kopyahon sa ahente sa itoy ang tanan nga magamit nga mga kolektor sa kamatuoran gikan sa pappetserver hangtod sa node, pagkahuman gilunsad kini ug ipadala ang nakolekta nga mga kamatuoran sa server; Pagkahuman niini, ang server nagsugod sa pagtipon sa katalogo.
Mga kamatuoran sa porma sa mga executable nga mga file
Ang ingon nga mga kamatuoran gibutang sa mga module sa direktoryo facts.d. Siyempre, ang mga file kinahanglan nga ma-executable. Sa diha nga modagan, sila kinahanglan nga magpagawas sa impormasyon ngadto sa standard nga output sa YAML o key=value format.
Ayaw kalimti nga ang mga kamatuoran magamit sa tanan nga mga node nga kontrolado sa poppet server diin ang imong module gipakatap. Busa, sa script, pag-amping aron masusi nga ang sistema adunay tanan nga mga programa ug mga file nga gikinahanglan aron molihok ang imong kamatuoran.
#!/bin/sh
echo "testfact=success"
#!/bin/sh
echo '{"testyamlfact":"success"}'
Ruby kamatuoran
Ang ingon nga mga kamatuoran gibutang sa mga module sa direktoryo 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
Mga kamatuoran sa teksto
Ang ingon nga mga kamatuoran gibutang sa mga node sa direktoryo /etc/facter/facts.d sa karaang Puppet o /etc/puppetlabs/facts.d sa bag-ong Puppet.
kasaligan nga mga kamatuoran — mga variable nga gikuha gikan sa sertipiko sa kliyente (tungod kay ang sertipiko kasagarang gi-isyu sa usa ka poppet server, ang ahente dili lang makakuha ug magbag-o sa sertipiko niini, mao nga ang mga variable "gisaligan"): ngalan sa sertipiko, host ug ngalan sa domain, mga extension gikan sa sertipiko.
server kamatuoran —mga variable nga may kalabotan sa impormasyon bahin sa server—bersyon, ngalan, IP address sa server, palibot.
ahente nga kamatuoran — mga variable nga gidugang direkta sa puppet-agent, ug dili sa facter — ngalan sa sertipiko, bersyon sa ahente, bersyon sa papet.
master variables - Pappetmaster variables (sic!). Kini halos parehas sa sa server kamatuoran, dugang nga mga kantidad sa parameter sa pagsumpo anaa.
mga variable sa compiler — mga variable sa compiler nga lainlain sa matag sakup: ang ngalan sa karon nga module ug ang ngalan sa module diin ang karon nga butang gi-access. Mahimo kining gamiton, pananglitan, aron masusi nga ang imong pribadong mga klase wala gigamit direkta gikan sa ubang mga module.
Dugang 1: unsaon pagdagan ug pag-debug niining tanan?
Ang artikulo adunay daghang mga pananglitan sa papet nga kodigo, apan wala gyud kami gisultihan kung giunsa pagpadagan kini nga code. Aw, gitul-id ko ang akong kaugalingon.
Ang usa ka ahente igo na sa pagpadagan sa Puppet, apan sa kadaghanan nga mga kaso kinahanglan nimo usab ang usa ka server.
Ahente
Labing menos sukad sa bersyon XNUMX, puppet-agent packages gikan sa opisyal nga Puppetlabs repository naglangkob sa tanan nga mga dependency (ruby ug ang katugbang nga mga hiyas), mao nga walay mga kalisud sa pag-instalar (naghisgot ako mahitungod sa mga distribusyon nga nakabase sa Debian - wala kami naggamit sa mga distribusyon nga nakabase sa RPM).
Sa pinakasimple nga kaso, aron magamit ang pag-configure sa papet, igo na ang paglansad sa ahente sa mode nga wala’y server: basta ang papet nga code gikopya sa node, ilunsad 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
Mas maayo, siyempre, ang pag-set up sa server ug pagpadagan sa mga ahente sa mga node sa daemon mode - unya kausa sa matag tunga sa oras ilang ipadapat ang configuration nga na-download gikan sa server.
Mahimo nimong sundogon ang modelo sa pagduso sa trabaho - adto sa node nga interesado ka ug magsugod sudo puppet agent -t. yawe -t (--test) sa aktuwal naglakip sa pipila ka mga kapilian nga mahimo sa tagsa-tagsa. Kini nga mga opsyon naglakip sa mosunod:
ayaw pagdagan sa daemon mode (sa default ang ahente magsugod sa daemon mode);
pagsira human magamit ang katalogo (sa default, ang ahente magpadayon sa pagtrabaho ug ipadapat ang pagsumpo kausa matag tunga sa oras);
pagsulat sa usa ka detalyado nga log sa trabaho;
ipakita ang mga pagbag-o sa mga file.
Ang ahente adunay usa ka operating mode nga walay mga pagbag-o - mahimo nimo kini gamiton kung dili ka sigurado nga imong gisulat ang husto nga pag-configure ug gusto nga susihon kung unsa gyud ang pagbag-o sa ahente sa panahon sa operasyon. Kini nga mode gipalihok pinaagi sa parameter --noop sa command line: sudo puppet agent -t --noop.
Dugang pa, mahimo nimong palihokon ang pag-debug sa log sa trabaho - sa sulod niini, ang papet nagsulat bahin sa tanan nga mga aksyon nga gihimo niini: bahin sa kapanguhaan nga giproseso karon, bahin sa mga parameter sa kini nga kapanguhaan, kung unsang mga programa ang gilunsad niini. Siyempre kini usa ka parameter --debug.
Server
Dili nako ikonsiderar ang tibuuk nga pag-setup sa pappetserver ug pag-deploy sa code niini sa kini nga artikulo; Isulti ra nako nga sa gawas sa kahon adunay usa ka hingpit nga magamit nga bersyon sa server nga wala magkinahanglan dugang nga pag-configure aron magtrabaho sa gamay nga gidaghanon sa nodes (ingon, hangtod sa usa ka gatos). Ang usa ka mas dako nga gidaghanon sa mga node magkinahanglan og tuning - sa default, ang puppetserver maglunsad og dili molapas sa upat ka mga trabahante, alang sa mas dako nga pasundayag kinahanglan nimo nga dugangan ang ilang gidaghanon ug ayaw kalimti ang pagdugang sa mga limitasyon sa panumduman, kung dili ang server magkolekta og basura sa kadaghanan sa panahon.
Pag-deploy sa code - kung kinahanglan nimo kini nga dali ug dali, tan-awa (sa r10k)[https://github.com/puppetlabs/r10k], alang sa gagmay nga mga instalasyon kini kinahanglan nga igo na.
Addendum 2: Mga Giya sa Pag-coding
Ibutang ang tanan nga lohika sa mga klase ug mga kahulugan.
Ipadayon ang mga klase ug mga kahulugan sa mga module, dili sa mga pagpakita nga naghulagway sa mga node.
Gamita ang mga kamatuoran.
Ayaw paghimo og mga if base sa mga hostname.
Mobati nga gawasnon sa pagdugang sa mga parametro alang sa mga klase ug mga kahulugan - kini mas maayo kaysa implicit nga lohika nga gitago sa lawas sa klase/gihubit.
Isaysay ko kon nganong girekomendar nako ang pagbuhat niini sa sunod nga artikulo.
konklusyon
Tapuson nato sa introduksiyon. Sa sunod nga artikulo isulti ko kanimo ang bahin sa Hiera, ENC ug PuppetDB.
Ang mga rehistradong tiggamit lamang ang makaapil sa survey. Sign in, walay sapayan.
Sa tinuud, adunay daghan pa nga materyal - makasulat ako mga artikulo sa mga mosunud nga hilisgutan, pagboto kung unsa ang gusto nimo nga basahon bahin sa:
59,1%Mga advanced nga puppet constructs - pipila ka sunod-sunod nga level shit: loops, mapping ug uban pang lambda expressions, resource collectors, exported resources ug inter-host communication pinaagi sa Puppet, tags, providers, abstract data type.13
31,8%"Ako ang admin sa akong inahan" o kung giunsa namo sa Avito ang pagpakighigala sa pipila ka mga poppet server sa lain-laing mga bersyon, ug, sa prinsipyo, ang bahin mahitungod sa pagdumala sa poppet server.7
81,8%Giunsa nato pagsulat ang puppet code: instrumentasyon, dokumentasyon, pagsulay, CI/CD.18
22 ka tiggamit ang miboto. 9 ka tiggamit ang nag-abstain.