ʻO ka Puppet kahi ʻōnaehana hoʻonohonoho hoʻonohonoho. Hoʻohana ʻia ia e lawe i nā pūʻali i ka mokuʻāina i makemake ʻia a mālama i kēia mokuʻāina.
Ua hana au me Puppet no ʻelima mau makahiki i kēia manawa. ʻO kēia kikokikona he unuhi a hoʻonohonoho hou ʻia o nā kumu nui mai ka palapala kūhelu, e hiki ai i nā poʻe hoʻomaka ke hoʻomaopopo koke i ke ʻano o ka Puppet.
ʻIke ʻike
ʻO ka ʻōnaehana hana ʻo Puppet ka mea kūʻai aku, ʻoiai ke kākoʻo nei i ka hana serverless me nā hana liʻiliʻi.
Hoʻohana ʻia kahi hiʻohiʻona huki: ma ka maʻamau, hoʻokahi manawa i kēlā me kēia hapalua hola, hoʻopili nā mea kūʻai aku i ke kikowaena no kahi hoʻonohonoho a hoʻohana iā ia. Inā ʻoe i hana pū me Ansible, a laila hoʻohana lākou i kahi ʻano hoʻohālike ʻē aʻe: hoʻomaka ka luna hoʻomalu i ke kaʻina hana o ka hoʻopili ʻana, ʻaʻole pili nā mea kūʻai aku i kekahi mea.
I ka wā o ke kamaʻilio pūnaewele, hoʻohana ʻia ka hoʻopunipuni TLS ʻelua: ʻo ke kikowaena a me ka mea kūʻai aku i kā lākou mau kī ponoʻī a me nā palapala hōʻoia. Hoʻopuka maʻamau ka server i nā palapala hōʻoia no nā mea kūʻai aku, akā ma ke kumu hiki ke hoʻohana i kahi CA waho.
Introduction to manifestos
Ma ka hua'ōlelo Puppet i ke kikowaena papeti hoʻohui nodes (nodes). Ua kākau ʻia ka hoʻonohonoho no nā nodes ma nā hōʻike ma kahi ʻōlelo hoʻolālā kūikawā - Puppet DSL.
ʻO ka Puppet DSL he ʻōlelo hoʻolaha. Hōʻike ia i ke kūlana i makemake ʻia o ka node ma ke ʻano o ka hoʻolaha ʻana o nā kumuwaiwai pākahi, no ka laʻana:
- Aia ka faila a loaʻa iā ia kahi kikoʻī kikoʻī.
- Hoʻokomo ʻia ka pūʻolo.
- Ua hoʻomaka ka lawelawe.
Hiki ke hoʻohui i nā kumuwaiwai:
- Aia nā hilinaʻi, pili lākou i ke ʻano o ka hoʻohana ʻana i nā kumuwaiwai.
No ka laʻana, "hoʻokomo mua i ka pūʻolo, a laila hoʻoponopono i ka faila hoʻonohonoho, a laila hoʻomaka i ka lawelawe." - Aia nā leka hoʻomaopopo - inā hoʻololi ʻia kahi kumuwaiwai, hoʻouna ʻo ia i nā leka hoʻomaopopo i nā kumuwaiwai i kau inoa ʻia.
No ka laʻana, inā hoʻololi ka faila hoʻonohonoho, hiki iā ʻoe ke hoʻomaka hou i ka lawelawe.
Eia kekahi, he mau hana a me nā ʻano like ka Puppet DSL, a me nā ʻōlelo kūlana a me nā mea koho. Kākoʻo ʻia nā ʻano hana hoʻohālike like ʻole - EPP a me ERB.
Ua kākau ʻia ka Puppet ma Ruby, no laila ua lawe ʻia nā mea hana a me nā huaʻōlelo mai laila. ʻAe ʻo Ruby iā ʻoe e hoʻonui i ka Puppet - hoʻohui i ka loiloi paʻakikī, nā ʻano kumu waiwai hou, nā hana.
ʻOiai e holo ana ʻo Puppet, ua hōʻuluʻulu ʻia nā hōʻike no kēlā me kēia node kikoʻī ma ke kikowaena i kahi papa kuhikuhi. papa kuhikuhi he papa inoa o nā kumuwaiwai a me ko lākou mau pilina ma hope o ka helu ʻana i ka waiwai o nā hana, nā ʻano like ʻole a me ka hoʻonui ʻana i nā ʻōlelo kūlana.
Syntax a me ke codestyle
Eia nā ʻāpana o ka palapala kūhelu e kōkua iā ʻoe e hoʻomaopopo i ka syntax inā ʻaʻole lawa nā hiʻohiʻona i hāʻawi ʻia:
Eia kekahi laʻana o ke ʻano o ka hōʻike:
# Комментарии пишутся, как и много где, после решётки.
#
# Описание конфигурации ноды начинается с ключевого слова node,
# за которым следует селектор ноды — хостнейм (с доменом или без)
# или регулярное выражение для хостнеймов, или ключевое слово default.
#
# После этого в фигурных скобках описывается собственно конфигурация ноды.
#
# Одна и та же нода может попасть под несколько селекторов. Про приоритет
# селекторов написано в статье про синтаксис описания нод.
node 'hostname', 'f.q.d.n', /regexp/ {
# Конфигурация по сути является перечислением ресурсов и их параметров.
#
# У каждого ресурса есть тип и название.
#
# Внимание: не может быть двух ресурсов одного типа с одинаковыми названиями!
#
# Описание ресурса начинается с его типа. Тип пишется в нижнем регистре.
# Про разные типы ресурсов написано ниже.
#
# После типа в фигурных скобках пишется название ресурса, потом двоеточие,
# дальше идёт опциональное перечисление параметров ресурса и их значений.
# Значения параметров указываются через т.н. hash rocket (=>).
resource { 'title':
param1 => value1,
param2 => value2,
param3 => value3,
}
}
ʻAʻole koi ʻia ka hoʻopaʻa ʻana a me ka hoʻokaʻawale ʻana i nā laina, akā aia kahi ʻōlelo aʻoaʻo
- ʻAʻole hoʻohana ʻia nā ʻāpana ʻelua, ʻaʻole i hoʻohana ʻia nā pā.
- Hoʻokaʻawale ʻia nā pale pale e kahi ākea; ʻaʻole hoʻokaʻawale ʻia nā kolone e kahi ākea.
- Koma ma hope o kēlā me kēia ʻāpana, me ka mea hope. Aia kēlā me kēia ʻāpana ma kahi laina ʻokoʻa. Hana ʻia kahi ʻokoʻa no ka hihia me ka ʻole o nā ʻāpana a me hoʻokahi ʻāpana: hiki iā ʻoe ke kākau ma ka laina hoʻokahi a ʻaʻohe koma (i.e.
resource { 'title': }
иresource { 'title': param => value }
). - Pono nā pua ma nā ʻāpana i ka pae like.
- Ua kākau ʻia nā pua pili waiwai ma mua o lākou.
Kahi o nā faila ma ka pappetserver
No ka wehewehe hou aku, e hoʻolauna wau i ka manaʻo o ka "papa kuhikuhi kumu". ʻO ka papa kuhikuhi kumu ka papa kuhikuhi i loaʻa ka hoʻonohonoho Puppet no kahi node kikoʻī.
ʻOkoʻa ka papa kuhikuhi kumu ma muli o ka mana o ka Puppet a me nā kaiapuni i hoʻohana ʻia. ʻO nā kaiapuni nā pūʻulu kūʻokoʻa o ka hoʻonohonoho i mālama ʻia i loko o nā papa kuhikuhi kaʻawale. Hoʻohana pinepine ʻia me ka git, kahi i hana ʻia ai nā kaiapuni mai nā lālā git. No laila, aia kēlā me kēia node i kahi kaiapuni a i ʻole. Hiki ke hoʻonohonoho ʻia kēia ma ka node ponoʻī, a i ʻole ma ENC, aʻu e kamaʻilio ai ma ka ʻatikala aʻe.
- Ma ke kolu o ka mana ("old Puppet") ka papa kuhikuhi kumu
/etc/puppet
. He koho ka hoʻohana ʻana i nā kaiapuni - no ka laʻana, ʻaʻole mākou e hoʻohana me ka Puppet kahiko. Inā hoʻohana ʻia nā kaiapuni, mālama mau ʻia lākou i loko/etc/puppet/environments
, ʻo ka papa kuhikuhi kumu ka papa kuhikuhi kaiapuni. Inā ʻaʻole hoʻohana ʻia nā kaiapuni, ʻo ka papa kuhikuhi kumu ka papa kuhikuhi kumu. - E hoʻomaka ana mai ka mana ʻehā ("Puppet hou"), lilo ka hoʻohana ʻana i nā kaiapuni i mea koi, a ua hoʻoneʻe ʻia ka papa kuhikuhi kumu i
/etc/puppetlabs/code
. No laila, mālama ʻia nā kaiapuni i loko/etc/puppetlabs/code/environments
, ʻo ka papa kuhikuhi kumu ka papa kuhikuhi kaiapuni.
Pono e loaʻa kahi papa kuhikuhi ma ka papa kuhikuhi kumu manifests
, i loaʻa hoʻokahi a ʻoi aku paha nā hōʻike e wehewehe ana i nā nodes. Eia kekahi, pono e loaʻa kahi subdirectory modules
, aia nā modula. E haʻi wau iā ʻoe i nā modules ma hope iki. Eia kekahi, hiki i ka Puppet kahiko ke loaʻa i kahi papa kuhikuhi files
, aia nā faila like ʻole a mākou e kope ai i nā nodes. I ka Puppet hou, waiho ʻia nā faila a pau i nā modules.
Aia nā faila Manifest i ka hoʻonui .pp
.
ʻO kekahi mau hiʻohiʻona hakakā
ʻO ka wehewehe ʻana i ka node a me ka waiwai ma luna
Ma ka node server1.testdomain
pono e hana i kahi faila /etc/issue
me ka maʻiʻo Debian GNU/Linux n l
. Pono ka faila e ka mea hoʻohana a me ka hui root
, pono ke kuleana komo 644
.
Kākau mākou i kahi 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 в начале будет воспринято как записанное в восьмеричной системе, и всё пойдёт не так, как задумано
}
}
Nā pilina ma waena o nā kumuwaiwai ma kahi node
Ma ka node server2.testdomain
Pono e holo ʻo nginx, e hana me kahi hoʻonohonoho i hoʻomākaukau mua ʻia.
E hoʻopau kākou i ka pilikia:
- Pono e hoʻokomo i ka pūʻolo
nginx
. - Pono e kope ʻia nā faila hoʻonohonoho mai ke kikowaena.
- Pono e holo ka lawelawe
nginx
. - Inā hōʻano hou ka hoʻonohonoho, pono e hoʻomaka hou ka lawelawe.
Kākau mākou i kahi 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 получает уведомление,
# соответствующий сервис перезапускается.
}
No ka hana ʻana, pono ʻoe e pili ana i kēia wahi faila ma ka server puppet:
/etc/puppetlabs/code/environments/production/ # (это для нового Паппета, для старого корневой директорией будет /etc/puppet)
├── manifests/
│ └── site.pp
└── modules/
└── example/
└── files/
└── nginx-conf/
├── nginx.conf
├── mime.types
└── conf.d/
└── some.conf
Nā ʻano waiwai
Hiki ke ʻike ʻia kahi papa inoa piha o nā ʻano kumuwaiwai i kākoʻo ʻia ma aneʻi
AEI
Mālama i nā faila, nā papa kuhikuhi, nā symlinks, nā mea i loko, a me nā kuleana komo.
Nā Pālākiō:
- inoa waiwai — ala i ka faila (koho)
- Ala - ala i ka faila (inā ʻaʻole i kuhikuhi ʻia ma ka inoa)
- hamama ai - ʻano waihona:
absent
- holoi i kahi failapresent
- pono e loaʻa kahi faila o kēlā me kēia ʻano (inā ʻaʻohe faila, e hana ʻia kahi faila maʻamau)file
- waihona maʻamaudirectory
- papa kuhikuhilink
- hoʻopaʻa inoa
- maʻiʻo - nā waihona waihona (kūpono wale no nā faila maʻamau, ʻaʻole hiki ke hoʻohana pū me kahi ai ole ia, polokalamu)
- kahi - he loulou i ke ala āu e makemake ai e kope i nā mea o ka faila (ʻaʻole hiki ke hoʻohana pū me maʻiʻo ai ole ia, polokalamu). Hiki ke kuhikuhi ʻia ma ke ʻano he URI me kahi hoʻolālā
puppet:
(a laila e hoʻohana ʻia nā faila mai ka server puppet), a me ka hoʻolālāhttp:
(Manaʻo wau ua maopopo ka mea e hiki mai ana ma kēia hihia), a me ke kiʻifile:
a i ʻole ma ke ʻano he ala paʻa ʻole me ka schema (a laila e hoʻohana ʻia ka faila mai ka FS kūloko ma ka node) - polokalamu - kahi e kuhikuhi ai ka symlink (ʻaʻole hiki ke hoʻohana pū me maʻiʻo ai ole ia, kahi)
- ka mea nāna - ka mea hoʻohana nona ka faila
- hui - ka hui e pono ai ka faila
- ano - nā ʻae faila (ma ke ʻano he string)
- hoʻohoihoi hou - hiki ke hana i ka papa kuhikuhi recursive
- ka holoi - hiki ke holoi i nā faila i wehewehe ʻole ʻia ma ka Puppet
- ikaika - hiki ke holoi i nā papa kuhikuhi ʻaʻole i wehewehe ʻia ma ka Puppet
'ōpili
Hoʻokomo a wehe i nā pūʻolo. Hiki iā ia ke mālama i nā leka hoʻomaopopo - hoʻokomo hou i ka pūʻolo inā ʻōlelo ʻia ka ʻāpana reinstall_on_refresh.
Nā Pālākiō:
- inoa waiwai - inoa pūʻolo (koho)
- inoa - inoa pūʻolo (inā ʻaʻole i kuhikuhi ʻia ma ka inoa)
- pūnaewele - ka luna pūʻolo e hoʻohana ai
- hamama ai — kūlana makemake o ka pūʻolo:
present
,installed
- hoʻokomo ʻia kekahi manalatest
- hoʻokomo ʻia ka mana hou loaabsent
- holoi ʻia (apt-get remove
)purged
- holoi ʻia me nā faila hoʻonohonoho (apt-get purge
)held
- laka ʻia ka mana pūʻolo (apt-mark hold
)любая другая строка
- ua hoʻokomo ʻia ka mana i ʻōlelo ʻia
- reinstall_on_refresh - inā a
true
, a laila ma ka loaʻa ʻana o ka leka hoʻomaopopo e hoʻokomo hou ʻia ka pūʻolo. Maikaʻi no ka hāʻawi ʻana i kumu, kahi e pono ai ke kūkulu hou ʻana i nā pūʻolo i ka wā e hoʻololi ai i nā ʻāpana kūkulu. Defaultfalse
.
hana
Mālama i nā lawelawe. Hiki ke hana i nā leka hoʻomaopopo - hoʻomaka hou i ka lawelawe.
Nā Pālākiō:
- inoa waiwai - lawelawe ʻia e mālama ʻia (koho)
- inoa - ka lawelawe e pono e mālama ʻia (inā ʻaʻole i kuhikuhi ʻia ma ka inoa)
- hamama ai - kūlana makemake o ka lawelawe:
running
- hoʻokuʻu ʻiastopped
- kū
- ho'ā — hoʻomalu i ka hiki ke hoʻomaka i ka lawelawe:
true
- ua hoʻohana ʻia ka autorun (systemctl enable
)mask
- hoʻonalohelohe (systemctl mask
)false
— ua pio ka autorun (systemctl disable
)
- e hoʻomaka hou - kauoha e hoʻomaka hou i ka lawelawe
- kūlana — kauoha e nānā i ke kūlana lawelawe
- hoʻomaka hou - e hōʻike inā kākoʻo ka initscript lawelawe i ka hoʻomaka hou ʻana. Ina
false
a ua kuhikuhi ʻia ka ʻāpana e hoʻomaka hou - hoʻohana ʻia ka waiwai o kēia ʻāpana. Inafalse
a me ka palena e hoʻomaka hou ʻaʻole i kuhikuhi ʻia - ua hoʻopau ʻia ka lawelawe a hoʻomaka hou (akā hoʻohana ʻo systemd i ke kauohasystemctl restart
). - hasstatus - hōʻike inā kākoʻo ka initscript lawelawe i ke kauoha
status
. ^ E Ha yM. Ināfalse
, a laila hoʻohana ʻia ka waiwai hoʻohālikelike kūlana. Defaulttrue
.
exec
Holo i nā kauoha waho. Inā ʻaʻole ʻoe e kuhikuhi i nā ʻāpana hana, wale ina, koe ai ole ia, hōʻoluʻolu, e holo ana ke kauoha i na manawa a pau e holo ai ka Puppet. Hiki ke hana i nā leka hoʻomaopopo - holo i kahi kauoha.
Nā Pālākiō:
- inoa waiwai — kauoha e hoʻokō ʻia (koho)
- kauoha - ke kauoha e hoʻokō ʻia (inā ʻaʻole i kuhikuhi ʻia ma ka inoa)
- Ala - nā ala e ʻimi ai i ka faila hiki ke hoʻokō
- wale ina - inā ua hoʻopau ʻia ke kauoha i hōʻike ʻia ma kēia ʻāpana me kahi helu hoʻihoʻi ʻole, e hoʻokō ʻia ke kauoha nui
- koe - inā ua hoʻopau ʻia ke kauoha i hōʻike ʻia ma kēia ʻāpana me kahi code hoʻihoʻi ʻole, e hoʻokō ʻia ke kauoha nui.
- hana - inā ʻaʻole i loaʻa ka faila i ʻōlelo ʻia ma kēia ʻāpana, e hoʻokō ʻia ke kauoha nui
- hōʻoluʻolu - inā a
true
, a laila e holo wale ʻia ke kauoha ke loaʻa i kēia exec ka leka hoʻomaopopo mai nā kumuwaiwai ʻē aʻe - cwd — papa kuhikuhi kahi e holo ai ke kauoha
- mea hoʻohana - ka mea hoʻohana e holo ai ke kauoha
- pūnaewele - pehea e holo ai i ke kauoha:
- pono - ua hana wale ʻia kahi kaʻina hana keiki, e hōʻoia e kuhikuhi Ala
- iwi - hoʻokuʻu ʻia ke kauoha ma ka pūpū
/bin/sh
, ʻaʻole hiki ke kuhikuhi ʻia Ala, hiki iā ʻoe ke hoʻohana i ka globbing, nā paipu a me nā hiʻohiʻona ʻē aʻe. ʻIke ʻia maʻamau inā loaʻa kekahi mau huaʻōlelo kūikawā (|
,;
,&&
,||
a pēlā aku).
cron
Kāohi i nā cronjobs.
Nā Pālākiō:
- inoa waiwai - kekahi ʻano mea hōʻike
- hamama ai - kūlana crownjob:
present
- hana inā ʻaʻole i loaʻaabsent
- holoi inā loaʻa
- kauoha - he aha ke kauoha e holo ai
- 'ia - ma kahi e holo ai ke kauoha (papa inoa o nā ʻano hoʻololi a me kā lākou mau waiwai ma o
=
) - mea hoʻohana - mai ka mea hoʻohana e holo i ke kauoha
- minuke, hola, lā pule, mahina, lā mahina - i ka manawa e holo ai cron. Inā ʻaʻole i kuhikuhi ʻia kekahi o kēia mau ʻano, ʻo kona waiwai ma ka crontab
*
.
Ma ka Puppet 6.0 cron me he mea lā
E pili ana i nā kumuwaiwai ma ka laulā
Nā koi no ka ʻokoʻa waiwai
ʻO ka hewa maʻamau a mākou e hālāwai ai Hoʻolaha pālua. Loaʻa kēia hewa ke ʻike ʻia ʻelua a ʻoi aku paha nā kumuwaiwai o ka ʻano like me ka inoa like i ka papa kuhikuhi.
No laila, e kākau hou wau: ʻAʻole pono nā hōʻike no ka node hoʻokahi i nā kumuwaiwai o ke ʻano like me ka inoa like!
I kekahi manawa pono e hoʻokomo i nā pūʻolo me ka inoa hoʻokahi, akā me nā mana hoʻokele ʻokoʻa. I kēia hihia, pono ʻoe e hoʻohana i ka parameter name
e pale i ka hewa:
package { 'ruby-mysql':
ensure => installed,
name => 'mysql',
provider => 'gem',
}
package { 'python-mysql':
ensure => installed,
name => 'mysql',
provider => 'pip',
}
Loaʻa i nā ʻano kumuwaiwai ʻē aʻe nā koho like e kōkua i ka pale ʻana i ka hoʻopālua − name
у hana, command
у exec, a laila.
Metaparameters
Loaʻa i kēlā me kēia ʻano kumuwaiwai kekahi mau palena kūikawā, me ka nānā ʻole i kona ʻano.
Papa inoa piha o nā ʻāpana meta
Papa inoa pōkole:
- makemake — hōʻike kēia ʻāpana i nā kumuwaiwai e hilinaʻi nei kēia kumuwaiwai.
- imua o - Hōʻike kēia ʻāpana i nā kumuwaiwai e pili ana i kēia kumuwaiwai.
- kakau - ke kuhikuhi nei kēia ʻāpana i nā kumuwaiwai e loaʻa ai nā leka hoʻomaopopo.
- hoʻokaʻaʻike — Hōʻike kēia ʻāpana i nā kumuwaiwai e loaʻa i nā leka mai kēia kumuwaiwai.
ʻO nā metaparameters a pau i helu ʻia e ʻae i ka loulou punawai hoʻokahi a i ʻole ka pūʻulu o nā loulou i nā bracket square.
Nā loulou i nā kumuwaiwai
ʻO ka loulou punawai kahi ʻōlelo wale nō o ka punawai. Hoʻohana nui ʻia lākou e hōʻike i nā hilinaʻi. ʻO ka hoʻopaʻa ʻana i kahi punawai ʻaʻole i loaʻa ke kumu i kahi hewa hōʻuluʻulu.
Penei ka syntax o ka loulou: ʻano punawai me kahi hua nui (inā loaʻa i ka inoa ʻano nā ʻāpana ʻelua, a laila ua hoʻopaʻa ʻia kēlā me kēia ʻāpana o ka inoa ma waena o nā kolonā), a laila ka inoa kumu i nā bracket square (ʻo ka hihia o ka inoa. ʻaʻole loli!). ʻAʻole pono nā hakahaka; kākau ʻia nā bracket square ma hope koke o ka inoa ʻano.
Pākuhi:
file { '/file1': ensure => present }
file { '/file2':
ensure => directory,
before => File['/file1'],
}
file { '/file3': ensure => absent }
File['/file1'] -> File['/file3']
Nā hilinaʻi a me nā hoʻolaha
E like me ka mea i ʻōlelo ʻia ma mua, ʻo nā hilinaʻi maʻalahi ma waena o nā kumuwaiwai he transitive. Ma ke ala, e makaʻala i ka hoʻohui ʻana i nā hilinaʻi - hiki iā ʻoe ke hana i nā hilinaʻi cyclic, kahi e hoʻopiʻi hewa ai.
ʻAʻole like me nā hilinaʻi, ʻaʻole transitive nā leka hoʻomaopopo. Hoʻopili kēia mau lula no ka hoʻolaha ʻana:
- Inā loaʻa i ka punawai kahi leka hoʻomaopopo, hoʻonui ʻia ia. ʻO nā hana hou e pili ana i ke ʻano kumu waiwai − exec holo i ke kauoha, hana hoʻomaka hou i ka lawelawe, 'ōpili hoʻouka hou i ka pūʻolo. Inā ʻaʻole i wehewehe ʻia kahi hana hoʻohou i ka punawai, a laila ʻaʻohe mea e hana.
- I ka holo ʻana o ka Puppet, hoʻonui hou ʻia ka punawai ma mua o hoʻokahi manawa. Hiki kēia no ka mea aia nā hoʻolaha i nā hilinaʻi a ʻaʻole i loko o ka pakuhi hilinaʻi nā pōʻai.
- Inā hoʻololi ʻo Puppet i ke kūlana o kahi kumuwaiwai, hoʻouna ka punawai i nā leka hoʻomaopopo i nā kumuwaiwai āpau i kākau inoa ʻia.
- Inā hōʻano hou ʻia kahi kumuwaiwai, hoʻouna ʻo ia i nā leka hoʻomaopopo i nā kumuwaiwai āpau i kau inoa iā ia.
Ka mālama ʻana i nā ʻāpana i ʻike ʻole ʻia
Ma ke ʻano maʻamau, inā ʻaʻole i loaʻa ka waiwai paʻa i kekahi ʻāpana waiwai a ʻaʻole i kuhikuhi ʻia kēia ʻāpana i ka hōʻike, a laila ʻaʻole e hoʻololi ʻo Puppet i kēia waiwai no ka waiwai pili ma ka node. No ka laʻana, inā he kumuwaiwai o ke ʻano AEI ʻaʻole i kuhikuhi ʻia ka ʻāpana owner
, a laila ʻaʻole e hoʻololi ʻo Puppet i ka mea nona ka faila pili.
Introduction to classes, variables and definitions
Inā paha he nui kā mākou mau node i ka ʻāpana like o ka hoʻonohonoho, akā aia kekahi mau ʻokoʻa - inā ʻaʻole hiki iā mākou ke wehewehe i nā mea āpau i hoʻokahi poloka. node {}
. ʻOiaʻiʻo, hiki iā ʻoe ke kope kope i nā ʻāpana like o ka hoʻonohonoho, akā ma ka laulā he hopena maikaʻi ʻole kēia - ke ulu nei ka hoʻonohonoho, a inā ʻoe e hoʻololi i ka ʻāpana nui o ka hoʻonohonoho, pono ʻoe e hoʻoponopono i ka mea like ma nā wahi he nui. I ka manawa like, ua maʻalahi ke kuhi hewa, a ma ke ʻano nui, ua hoʻokumu ʻia ke kumu DRY (mai hana hou iā ʻoe iho) no kahi kumu.
No ka hoʻoponopono i kēia pilikia aia kahi hoʻolālā e like me класс.
Nā Palapala
Pono e wehewehe mua i ka papa. ʻAʻole hoʻohui ka wehewehe ponoʻī i nā kumuwaiwai ma nā wahi āpau. Hōʻike ʻia ka papa ma nā hōʻike:
# Описание класса начинается с ключевого слова class и его названия.
# Дальше идёт тело класса в фигурных скобках.
class example_class {
...
}
Ma hope o kēia hiki ke hoʻohana ʻia ka papa:
# первый вариант использования — в стиле ресурса с типом class
class { 'example_class': }
# второй вариант использования — с помощью функции include
include example_class
# про отличие этих двух вариантов будет рассказано дальше
He laʻana mai ka hana mua - e hoʻoneʻe i ka hoʻonohonoho a me ka hoʻonohonoho ʻana o nginx i kahi papa:
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
}
Nā Loli
ʻAʻole maʻalahi ka papa mai ka hiʻohiʻona mua no ka mea lawe mau ia i ka hoʻonohonoho nginx like. E hana i ke ala i ka hoʻololi hoʻonohonoho, a laila hiki ke hoʻohana ʻia kēia papa e hoʻokomo i ka nginx me kekahi hoʻonohonoho.
Hiki ke hana
Nānā: ʻaʻole hiki ke hoʻololi ʻia nā ʻano like ʻole i ka Puppet!
Eia kekahi, hiki ke kiʻi wale ʻia kahi mea hoʻololi ma hope o ka haʻi ʻia ʻana, inā ʻaʻole e lilo ka waiwai o ka mea hoʻololi undef
.
Ka laʻana o ka hana ʻana me nā mea hoʻololi:
# создание переменных
$variable = 'value'
$var2 = 1
$var3 = true
$var4 = undef
# использование переменных
$var5 = $var6
file { '/tmp/text': content => $variable }
# интерполяция переменных — раскрытие значения переменных в строках. Работает только в двойных кавычках!
$var6 = "Variable with name variable has value ${variable}"
Ua loaʻa i ka Puppet nā papa inoa, a ua loaʻa nā mea hoʻololi wahi ʻike maka: Hiki ke wehewehe ʻia kahi ʻano like me ka inoa like ʻole ma nā inoa inoa like ʻole. I ka hoʻoholo ʻana i ka waiwai o kahi mea hoʻololi, ʻimi ʻia ka mea hoʻololi ma ka inoa inoa o kēia manawa, a laila ma ka inoa inoa hoʻopili, a pēlā aku.
Nā hiʻohiʻona namespace:
- honua - nā ʻokoʻa ma waho o ka papa a i ʻole ka wehewehe node e hele i laila;
- node namespace ma ka wehewehe node;
- papa inoa ma ka wehewehe papa.
I mea e pale aku ai i ka pohihihi i ke komo ʻana i kahi ʻano hoʻololi, hiki iā ʻoe ke kuhikuhi i ka inoa inoa ma ka inoa hoʻololi:
# переменная без пространства имён
$var
# переменная в глобальном пространстве имён
$::var
# переменная в пространстве имён класса
$classname::var
$::classname::var
E ʻae kākou ʻo ke ala i ka hoʻonohonoho nginx aia i ka loli $nginx_conf_source
. A laila e nānā ka papa penei:
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
}
Eia nō naʻe, hewa ka laʻana i hāʻawi ʻia no ka mea aia kekahi "ʻike huna" ma kahi o ka papa i hoʻohana ʻia kahi ʻano me kēlā a me kēlā inoa. ʻOi aku ka pololei o ka hana ʻana i kēia ʻike ākea - hiki i nā papa ke loaʻa nā ʻāpana.
Nā palena papa he mau loli i ka papa inoa papa, ua kuhikuhi ʻia lākou ma ke poʻo papa a hiki ke hoʻohana ʻia e like me nā ʻano maʻamau i ke kino papa. Hōʻike ʻia nā waiwai o ka palena i ka wā e hoʻohana ai i ka papa ma ka hōʻike.
Hiki ke hoʻonohonoho ʻia ka ʻāpana i kahi waiwai paʻamau. Inā ʻaʻole i loaʻa ka waiwai paʻamau a ʻaʻole i hoʻonohonoho ʻia ka waiwai i ka wā i hoʻohana ʻia ai, e hoʻopiʻi ʻia ka hewa.
E hoʻohālikelike i ka papa mai ka laʻana ma luna a hoʻohui i ʻelua mau ʻāpana: ʻo ka mua, koi ʻia, ke ala i ka hoʻonohonoho ʻana, a ʻo ka lua, koho, ʻo ia ka inoa o ka pōʻai me ka nginx (ma Debian, no ka laʻana, aia nā pūʻulu. 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', # задаём параметры класса точно так же, как параметры для других ресурсов
}
}
Ma ka Puppet, ua kikokiko ʻia nā ʻano like ʻole. ʻAi
Kākau ʻia ke ʻano ma mua o ka inoa ʻāpana:
class example (
String $param1,
Integer $param2,
Array $param3,
Hash $param4,
Hash[String, String] $param5,
) {
...
}
Nā papa: hoʻokomo i ka inoa papa vs papa{'classname':}
He kumu waiwai kēlā me kēia papa papa. E like me nā ʻano kumuwaiwai ʻē aʻe, ʻaʻole hiki ke loaʻa ʻelua mau manawa o ka papa hoʻokahi ma ka node hoʻokahi.
Inā ʻoe e hoʻāʻo e hoʻohui i kahi papa i ka node hoʻokahi i ʻelua hoʻohana class { 'classname':}
(ʻaʻohe ʻokoʻa, me nā ʻāpana ʻokoʻa a i ʻole like ʻole), e loaʻa kahi hewa compilation. Akā inā ʻoe e hoʻohana i kahi papa ma ke ʻano kumu waiwai, hiki iā ʻoe ke hoʻonohonoho koke i kāna mau ʻāpana āpau i ka hōʻike.
Eia naʻe, inā hoʻohana ʻoe include
, a laila hiki ke hoʻohui ʻia ka papa i nā manawa he nui e like me ka makemake. ʻO ka mea ʻoiaʻiʻo include
he hana idempotent e nānā inā ua hoʻohui ʻia kahi papa i ka papa kuhikuhi. Inā ʻaʻole ka papa i loko o ka papa kuhikuhi, hoʻohui ia, a inā i loaʻa ia, ʻaʻohe hana. Akā inā hoʻohana include
ʻAʻole hiki iā ʻoe ke hoʻonohonoho i nā ʻāpana papa i ka wā o ka hoʻolaha ʻana o ka papa - pono e hoʻonohonoho ʻia nā ʻāpana āpau i makemake ʻia ma kahi kumu ʻikepili waho - Hiera a i ʻole ENC. E kamaʻilio mākou e pili ana iā lākou ma ka ʻatikala aʻe.
wehewehe
E like me ka mea i ʻōlelo ʻia ma ka poloka ma mua, ʻaʻole hiki ke loaʻa ka papa like ma kahi node ma mua o hoʻokahi manawa. Eia nō naʻe, i kekahi mau hihia, pono ʻoe e hoʻohana i ka poloka like o ke code me nā ʻāpana like ʻole ma ka node hoʻokahi. I nā huaʻōlelo ʻē aʻe, pono kahi ʻano waiwai nona ponoʻī.
No ka laʻana, no ka hoʻokomo ʻana i ka module PHP, hana mākou i kēia ma Avito:
- E hoʻouka i ka pūʻolo me kēia module.
- E hana kākou i faila hoʻonohonoho no kēia module.
- Hana mākou i kahi symlink i ka config no php-fpm.
- Hana mākou i kahi symlink i ka config no php cli.
Ma ia mau hihia, he hoʻolālā e like me $title
, kahi e hele ai ka inoa waiwai i ka wā i haʻi ʻia ai. E like me ka hihia o nā papa, pono e wehewehe mua ʻia kahi wehewehe, a laila hiki ke hoʻohana ʻia.
He laʻana maʻalahi me kahi module no PHP:
define php74::module (
$php_module_name = $title,
$php_package_name = "php7.4-${title}",
$version = 'installed',
$priority = '20',
$data = "extension=${title}.son",
$php_module_path = '/etc/php/7.4/mods-available',
) {
package { $php_package_name:
ensure => $version,
install_options => ['-o', 'DPkg::NoTriggers=true'], # триггеры дебиановских php-пакетов сами создают симлинки и перезапускают сервис php-fpm - нам это не нужно, так как и симлинками, и сервисом мы управляем с помощью Puppet
}
-> file { "${php_module_path}/${php_module_name}.ini":
ensure => $ensure,
content => $data,
}
file { "/etc/php/7.4/cli/conf.d/${priority}-${php_module_name}.ini":
ensure => link,
target => "${php_module_path}/${php_module_name}.ini",
}
file { "/etc/php/7.4/fpm/conf.d/${priority}-${php_module_name}.ini":
ensure => link,
target => "${php_module_path}/${php_module_name}.ini",
}
}
node server3.testdomain {
php74::module { 'sqlite3': }
php74::module { 'amqp': php_package_name => 'php-amqp' }
php74::module { 'msgpack': priority => '10' }
}
ʻO ke ala maʻalahi loa e hopu i ka hewa ʻōlelo Duplicate aia ma Define. Hana ʻia kēia inā loaʻa kahi wehewehe me ka inoa mau, a ʻelua a ʻoi aku paha nā manawa o kēia wehewehe ʻana ma kekahi node.
He mea maʻalahi ka pale ʻana iā ʻoe iho mai kēia: pono e loaʻa i nā kumuwaiwai āpau i loko o ka wehewehe ka inoa ma muli o $title
. ʻO kahi mea ʻē aʻe he hoʻohui iidempotent o nā kumuwaiwai; i ka hihia maʻalahi, ua lawa ka neʻe ʻana i nā kumuwaiwai maʻamau i nā manawa āpau o ka wehewehe ʻana i kahi papa ʻokoʻa a hoʻokomo i kēia papa i ka wehewehe - hana. include
manaʻo manaʻo.
Aia kekahi mau ala ʻē aʻe e hoʻokō ai i ka idempotency i ka hoʻohui ʻana i nā kumuwaiwai, ʻo ia hoʻi ka hoʻohana ʻana i nā hana defined
и ensure_resources
, akā e haʻi aku wau iā ʻoe e pili ana iā ia ma ka ʻāpana aʻe.
Nā hilinaʻi a me nā hoʻolaha no nā papa a me nā wehewehe
Hoʻohui nā papa a me nā wehewehe i nā lula e pili ana i ka lawelawe ʻana i nā hilinaʻi a me nā hoʻolaha:
- ʻO ka hilinaʻi ma kahi papa / wehewehe e hoʻohui i nā hilinaʻi ma nā kumuwaiwai āpau o ka papa / wehewehe;
- ka papa/define dependency e hoʻohui i nā hilinaʻi i nā papa a pau/define resources;
- Hoʻolaha ka papa/define i nā kumuwaiwai āpau o ka papa/define;
- papa inoa/define kau inoa i nā kumuwaiwai āpau o ka papa/define.
Nā ʻōlelo kūlana a me nā mea koho
if
He maʻalahi maʻaneʻi:
if ВЫРАЖЕНИЕ1 {
...
} elsif ВЫРАЖЕНИЕ2 {
...
} else {
...
}
koe
inā ʻaʻole he inā i hoʻohuli: e hoʻokō ʻia ka poloka o ke code inā he wahaheʻe ka ʻōlelo.
unless ВЫРАЖЕНИЕ {
...
}
hihia
ʻAʻohe mea paʻakikī ma ʻaneʻi. Hiki iā ʻoe ke hoʻohana i nā waiwai maʻamau (nā kaula, nā helu, a me nā mea ʻē aʻe), nā ʻōlelo maʻamau, a me nā ʻano ʻikepili e like me nā waiwai.
case ВЫРАЖЕНИЕ {
ЗНАЧЕНИЕ1: { ... }
ЗНАЧЕНИЕ2, ЗНАЧЕНИЕ3: { ... }
default: { ... }
}
Nā mea koho
ʻO ka mea koho he kūkulu ʻōlelo e like me case
, akā ma kahi o ka hoʻokō ʻana i kahi poloka code, hoʻihoʻi ia i kahi waiwai.
$var = $othervar ? { 'val1' => 1, 'val2' => 2, default => 3 }
Nā Modula
Ke liʻiliʻi ka hoʻonohonoho, hiki ke maʻalahi ke mālama ʻia i hoʻokahi hōʻike. Akā ʻoi aku ka nui o nā hoʻonohonoho a mākou e wehewehe ai, ʻoi aku ka nui o nā papa a me nā nodes i loko o ka hōʻike, ulu ia, a lilo ia i mea paʻakikī ke hana pū me.
Eia kekahi, aia ka pilikia o ka hoʻohana hou ʻana i ke code - inā aia nā code āpau i hoʻokahi hōʻike, paʻakikī ke kaʻana like i kēia code me nā poʻe ʻē aʻe. No ka hoʻoponopono ʻana i kēia mau pilikia ʻelua, loaʻa i ka Puppet kahi hui i kapa ʻia ʻo modules.
Nā Modula - he mau papa kēia, wehewehe a me nā hui Puppet ʻē aʻe i waiho ʻia ma kahi papa kuhikuhi kaʻawale. I nā huaʻōlelo ʻē aʻe, ʻo kahi module kahi ʻāpana kūʻokoʻa o Puppet logic. Eia kekahi laʻana, aia kekahi module no ka hanaʻana me ka nginx, a aia i loko o ka mea a me ka mea wale nō e pono ai ke hana me ka nginx, aiʻole he module no ka hanaʻana me PHP, a pēlā aku.
Hoʻololi ʻia nā modula, a kākoʻo pū ʻia nā hilinaʻi o nā modula i kekahi. Aia kahi waihona wehe o nā modula -
Ma ke kikowaena papeti, aia nā modules i loko o ka subdirectory modules o ka papa kuhikuhi kumu. Aia i loko o kēlā me kēia module kahi papa kuhikuhi maʻamau - hōʻike, faila, templates, lib, a pēlā aku.
Hoʻolālā waihona i loko o kahi module
Aia i loko o ke kumu o ka module kēia mau papa kuhikuhi me nā inoa wehewehe:
manifests
- aia nā manifestosfiles
- aia nā failatemplates
- aia i loko o nā laʻanalib
— loaʻa iā ia ke code Ruby
ʻAʻole kēia he papa inoa piha o nā papa kuhikuhi a me nā faila, akā lawa ia no kēia ʻatikala no kēia manawa.
Nā inoa o nā kumuwaiwai a me nā inoa o nā faila ma ka module
ʻAʻole hiki ke kapa ʻia nā kumuwaiwai (nā papa, wehewehe) i loko o kahi module i nā mea āu e makemake ai. Eia kekahi, aia kahi leka pololei ma waena o ka inoa o kahi kumuwaiwai a me ka inoa o ka faila kahi e ʻimi ai ʻo Puppet i kahi wehewehe o ia kumuwaiwai. Inā hōʻole ʻoe i nā lula inoa, a laila ʻaʻole ʻike ʻo Puppet i ka wehewehe kumu, a loaʻa iā ʻoe kahi hewa compilation.
He maʻalahi nā lula:
- Pono nā kumuwaiwai a pau i loko o kahi module i loko o ka namespace module. Inā kāhea ʻia ka module
foo
, a laila e kapa ʻia nā kumuwaiwai a pau i lokofoo::<anything>
, a i ole walefoo
. - Pono ka waihona me ka inoa o ka module i loko o ka faila
init.pp
. - No nā kumuwaiwai ʻē aʻe, penei ka papa inoa o ka faila:
- hoolei ia ka prefix me ka inoa module
- ʻO nā kolonā pālua a pau, inā he, ua hoʻololi ʻia me nā ʻoki
- hoʻonui ʻia
.pp
E hōʻike aku au me kahi laʻana. E ʻōlelo kākou ke kākau nei au i modula nginx
. Loaʻa iā ia nā kumuwaiwai penei:
- класс
nginx
i wehewehe ʻia ma ka hōʻikeinit.pp
; - класс
nginx::service
i wehewehe ʻia ma ka hōʻikeservice.pp
; - wehewehe
nginx::server
i wehewehe ʻia ma ka hōʻikeserver.pp
; - wehewehe
nginx::server::location
i wehewehe ʻia ma ka hōʻikeserver/location.pp
.
Nā pola
ʻOiaʻiʻo, ua ʻike ʻoe i ke ʻano o nā mamana; ʻAʻole wau e wehewehe kikoʻī iā lākou ma aneʻi. Akā, e haʻalele wau i ka hihia
Pehea e hoʻohana ai i nā templates: Hiki ke hoʻonui ʻia ke ʻano o kahi template me ka hoʻohana ʻana i kahi hana template
, ka mea i hala i ke ala i ka template. No nā kumuwaiwai o ke ʻano AEI hoʻohana pū ʻia me ka ʻāpana content
. No ka laʻana, e like me kēia:
file { '/tmp/example': content => template('modulename/templatename.erb')
Nānā ala <modulename>/<filename>
hōʻike waihona <rootdir>/modules/<modulename>/templates/<filename>
.
Hoʻohui, aia kahi hana inline_template
- loaʻa iā ia ke kikokikona ma ke ʻano he hoʻokomo, ʻaʻole ka inoa faila.
I loko o nā hiʻohiʻona, hiki iā ʻoe ke hoʻohana i nā ʻano hoʻololi Puppet āpau i ka pae o kēia manawa.
Kākoʻo ʻo Puppet i nā laʻana ma ka format ERB a me EPP:
ʻO ka pōkole e pili ana iā ERB
Nā hale hoʻomalu:
<%= ВЫРАЖЕНИЕ %>
— hookomo i ka waiwai o ka olelo<% ВЫРАЖЕНИЕ %>
— E helu i ka waiwai o ka olelo (me ka hookomo ole ia). ʻO nā ʻōlelo kūlana (inā) a me nā puka lou (kēlā me kēia) hele maʻamau maanei.<%# КОММЕНТАРИЙ %>
Ua kākau ʻia nā ʻōlelo ma ERB ma Ruby (Embedded Ruby maoli ʻo ERB).
No ke komo ʻana i nā mea hoʻololi mai ka hōʻike, pono ʻoe e hoʻohui @
i ka inoa hoololi. No ka wehe ʻana i kahi hoʻomaha laina i ʻike ʻia ma hope o kahi kūkulu mana, pono ʻoe e hoʻohana i kahi hōʻailona pani -%>
.
Ka laʻana o ka hoʻohana ʻana i ka laʻana
E ʻōlelo kākou ke kākau nei au i module e hoʻomalu iā ZooKeeper. ʻO ka papa kuleana no ka hana ʻana i ka config e like me kēia:
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 me ka la'ana pili zoo.cfg.erb
- No laila:
<% 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 -%>
Nā ʻoiaʻiʻo a me nā mea hoʻololi i kūkulu ʻia
ʻO ka manawa pinepine ka ʻāpana kikoʻī o ka hoʻonohonoho ʻana e pili ana i ka mea e hana nei ma ka node. No ka laʻana, e pili ana i ka mea i hoʻokuʻu ʻia ʻo Debian, pono ʻoe e hoʻokomo i hoʻokahi a i ʻole kekahi mana o ka pōʻai. Hiki iā ʻoe ke nānā pono i kēia mau mea āpau, kākau hou i nā hōʻike inā loli nā nodes. Akā ʻaʻole kēia he ala koʻikoʻi; ʻoi aku ka maikaʻi o ka automation.
No ka loaʻa ʻana o ka ʻike e pili ana i nā nodes, loaʻa i ka Puppet kahi hana i kapa ʻia ʻo facts. Nā mea pololei - ʻo kēia ka ʻike e pili ana i ka node, i loaʻa i nā hōʻike ma ke ʻano o nā mea hoʻololi maʻamau i ka inoa inoa honua. No ka laʻana, ka inoa hoʻokipa, ka mana o ka ʻōnaehana hana, ka papa hana ʻōnaehana, ka papa inoa o nā mea hoʻohana, ka papa inoa o nā mea hoʻohana pūnaewele a me kā lākou mau helu wahi, a ʻoi aku ka nui. Loaʻa nā ʻoiaʻiʻo ma nā hōʻike a me nā templates e like me nā loli maʻamau.
ʻO kahi laʻana o ka hana ʻana me nā ʻoiaʻiʻo:
notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# ресурс типа notify просто выводит сообщение в лог
ʻO ka ʻōlelo maʻamau, loaʻa i kahi ʻoiaʻiʻo kahi inoa (kuai) a me kahi waiwai (loaʻa nā ʻano ʻano like ʻole: nā kaula, arrays, nā puke wehewehe ʻōlelo). ʻAi
I ka wā o ka hana ʻana, kope mua ka luna pappet i nā mea hōʻiliʻili ʻoiaʻiʻo a pau mai ka pappetserver a i ka node, a laila hoʻokuʻu iā lākou a hoʻouna i nā ʻike i hōʻiliʻili ʻia i ke kikowaena; Ma hope o kēia, hoʻomaka ke kikowaena e hōʻuluʻulu i ka catalog.
ʻO nā ʻike ma ke ʻano o nā faila hiki ke hoʻokō
Hoʻokomo ʻia ia mau ʻike i loko o nā modules i ka papa kuhikuhi facts.d
. ʻOiaʻiʻo, pono e hoʻokō ʻia nā faila. I ka wā e holo ai, pono lākou e hoʻopuka i ka ʻike i ka hoʻopuka maʻamau i ka YAML a i ʻole ke kī = ka waiwai.
Mai poina e pili ana nā ʻoiaʻiʻo i nā node a pau i mālama ʻia e ka poppet server kahi i kau ʻia ai kāu module. No laila, ma ka palapala, e mālama pono i ka ʻōnaehana i nā polokalamu a me nā faila e pono ai no kāu ʻoiaʻiʻo e hana.
#!/bin/sh
echo "testfact=success"
#!/bin/sh
echo '{"testyamlfact":"success"}'
Ruby ʻike
Hoʻokomo ʻia ia mau ʻike i loko o nā modules i ka papa kuhikuhi 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
Nā ʻike kikokikona
Hoʻokomo ʻia kēlā mau ʻike ma nā nodes i ka papa kuhikuhi /etc/facter/facts.d
i ka Puppet kahiko a i ʻole /etc/puppetlabs/facts.d
i ka Puppet hou.
examplefact=examplevalue
---
examplefact2: examplevalue2
anotherfact: anothervalue
E kiʻi i nā ʻoiaʻiʻo
ʻElua ala e hoʻokokoke ai i ka ʻoiaʻiʻo:
- ma o ka puke wehewehe'ōlelo
$facts
:$facts['fqdn']
; - me ka hoʻohana ʻana i ka inoa ʻoiaʻiʻo e like me ka inoa hoʻololi:
$fqdn
.
ʻOi aku ka maikaʻi e hoʻohana i ka puke wehewehe ʻōlelo $facts
, a ʻoi aku ka maikaʻi, e hōʻike i ka inoa inoa honua ($::facts
).
Nā mea hoʻololi i kūkulu ʻia
Ma waho aʻe o nā ʻoiaʻiʻo, aia kekahi
- ʻoiaʻiʻo hilinaʻi - nā ʻano like ʻole i lawe ʻia mai ka palapala hōʻoia o ka mea kūʻai aku (no ka mea e hoʻopuka pinepine ʻia ka palapala hōʻoia ma kahi kikowaena poppet, ʻaʻole hiki i ka ʻelele ke lawe a hoʻololi i kāna palapala hōʻoia, no laila ua "hilinaʻi ʻia" nā mea hoʻololi): ka inoa o ka palapala hōʻoia, ka inoa o ka host and domain, nā hoʻonui mai ka palapala hōʻoia.
- ʻike kikowaena —nā hoʻololi e pili ana i ka ʻike e pili ana i ke kikowaena—version, name, server IP address, environment.
- nā ʻike kikoʻī - nā ʻano hoʻololi i hoʻohui pololei ʻia e ka ʻelele-puppet, ʻaʻole ma ka factor - inoa palapala, mana ʻelele, mana papeti.
- nā mea hoʻololi haku - Nā hoʻololi Pappetmaster (sic!). Ua like ia me ka in ʻike kikowaena, loaʻa nā waiwai hoʻonohonoho hoʻonohonoho.
- nā mea hoʻololi hōʻuluʻulu — nā ʻokoʻa ʻokoʻa o ka hui pū ʻana i kēlā me kēia ʻāpana: ka inoa o ka module o kēia manawa a me ka inoa o ka module i komo ai ka mea o kēia manawa. Hiki iā lākou ke hoʻohana, no ka laʻana, e nānā ʻaʻole hoʻohana pololei ʻia kāu mau papa pilikino mai nā modula ʻē aʻe.
Hoʻohui 1: pehea e holo ai a debug i kēia mau mea āpau?
Aia i loko o ka ʻatikala nā laʻana he nui o ke code papeti, akā ʻaʻole i haʻi iki iā mākou pehea e holo ai i kēia code. ʻAe, ke hoʻoponopono nei au iaʻu iho.
Ua lawa ka luna e holo i ka Puppet, akā no ka nui o nā hihia, pono ʻoe i kahi kikowaena.
Hoʻonohonoho
Ma ka liʻiliʻi mai ka mana XNUMX, nā pūʻolo puppet-agent mai
Ma ka hihia maʻalahi, e hoʻohana i ka hoʻonohonoho pappet, ua lawa ia e hoʻomaka i ka ʻelele ma ke ʻano serverless: inā ua kope ʻia ke code papeti i ka node, hoʻomaka. 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
ʻOi aku ka maikaʻi, ʻoiaʻiʻo, e hoʻonohonoho i ka kikowaena a holo i nā ʻelele ma nā nodes ma ke ʻano daemon - a laila hoʻokahi manawa i kēlā me kēia hapalua hola e hoʻopili lākou i ka hoʻonohonoho i hoʻoiho ʻia mai ka kikowaena.
Hiki iā ʻoe ke hoʻohālike i ke kumu hoʻohālikelike o ka hana - hele i ka node āu e makemake ai a hoʻomaka sudo puppet agent -t
. Ki -t
(--test
) ʻoiaʻiʻo e komo pū kekahi mau koho i hiki ke hoʻohana i kēlā me kēia. Aia kēia mau koho i kēia mau mea:
- mai holo i ke ʻano daemon (ma ke ʻano maʻamau e hoʻomaka ka ʻelele ma ke ʻano daemon);
- pani ʻia ma hope o ka hoʻohana ʻana i ka catalog (ma ka maʻamau, e hoʻomau ka luna i ka hana a hoʻopili i ka hoʻonohonoho hoʻokahi i kēlā me kēia hapalua hola);
- kākau i kahi moʻolelo hana kikoʻī;
- hōʻike i nā loli i nā faila.
He ʻano hana ka ʻelele me ka ʻole o nā loli - hiki iā ʻoe ke hoʻohana inā ʻaʻole ʻoe maopopo ua kākau ʻoe i ka hoʻonohonoho kūpono a makemake ʻoe e nānā i ka mea e hoʻololi ai ka ʻelele i ka wā o ka hana. Hoʻohana ʻia kēia ʻano e ka ʻāpana --noop
ma ka laina kauoha: sudo puppet agent -t --noop
.
Eia hou, hiki iā ʻoe ke hoʻololi i ka log debugging o ka hana - i loko o ia mea, kākau ʻo puppet e pili ana i nā hana āpau āna e hana ai: e pili ana i ka kumuwaiwai e hana nei i kēia manawa, e pili ana i nā ʻāpana o kēia kumuwaiwai, e pili ana i nā papahana e hoʻomaka ai. ʻOiaʻiʻo he parameter kēia --debug
.
Server
ʻAʻole wau e noʻonoʻo i ka hoʻonohonoho piha o ka pappetserver a me ka hoʻopili ʻana i ke code iā ia ma kēia ʻatikala; E ʻōlelo wale wau aia ma waho o ka pahu aia kahi mana holoʻokoʻa o ka server ʻaʻole koi i kahi hoʻonohonoho hou e hana me kahi helu liʻiliʻi. nā nodes (e ʻōlelo, a hiki i ka haneli). ʻO ka nui o nā nodes e koi i ke kani - ma ke ʻano maʻamau, hoʻomaka ka puppetserver ma mua o ʻehā mau limahana, no ka hana ʻoi aku ka pono e hoʻonui i kā lākou helu a mai poina e hoʻonui i nā palena hoʻomanaʻo, i ʻole e hōʻiliʻili ka server i ka hapa nui o ka manawa.
Hoʻopuka code - inā makemake ʻoe iā ia me ka wikiwiki a me ka maʻalahi, a laila e nānā (ma r10k)[
Pākuʻi 2: Nā Kūlana Coding
- E kau i nā loina a pau i nā papa a me nā wehewehe.
- E mālama i nā papa a me nā wehewehe i loko o nā modula, ʻaʻole i nā hōʻike e wehewehe ana i nā nodes.
- E hoʻohana i nā ʻike.
- Mai hana i nā ifs ma muli o nā inoa hoʻokipa.
- E ʻoluʻolu e hoʻohui i nā ʻāpana no nā papa a me nā wehewehe - ʻoi aku ka maikaʻi ma mua o ka loiloi implicit huna ʻia i loko o ke kino o ka papa/define.
E wehewehe wau i ke kumu aʻu e paipai ai e hana i kēia ma ka ʻatikala aʻe.
hopena
E hoʻopau kākou me ka hoʻolauna. Ma ka ʻatikala aʻe e haʻi wau iā ʻoe e pili ana iā Hiera, ENC a me PuppetDB.
Hiki i nā mea hoʻohana i hoʻopaʻa inoa ʻia ke komo i ka noiʻi.
ʻOiaʻiʻo, ʻoi aku ka nui o nā mea - hiki iaʻu ke kākau i nā ʻatikala e pili ana i nā kumuhana aʻe, e koho i ka mea āu e makemake ai e heluhelu e pili ana:
- 59,1%ʻO nā hana papeti kiʻekiʻe - kekahi mau ʻano ʻē aʻe: nā puka lou, ka palapala ʻāina a me nā ʻōlelo lambda ʻē aʻe, nā mea hōʻiliʻili waiwai, nā kumuwaiwai i lawe ʻia aku a me ke kamaʻilio ʻana ma waena o ka hui ma o ka Puppet, nā hōʻailona, nā mea hoʻolako, nā ʻano ʻikepili abstract.13
- 31,8%"ʻO wau ke alakaʻi o koʻu makuahine" a i ʻole pehea mākou i Avito i launa pū ai me nā kikowaena poppet o nā ʻano like ʻole, a, ma ke kumu, ka ʻāpana e pili ana i ka lawelawe ʻana i ka server poppet.7
- 81,8%Pehea mākou e kākau ai i ke code papeti: mea kani, palapala, hoʻāʻo, CI/CD.18
22 mea hoʻohana i koho. Ua hōʻole nā mea hoʻohana 9.
Source: www.habr.com