Tsanana shine tsarin sarrafa sanyi. Ana amfani da shi don kawo runduna zuwa jihar da ake so da kuma kula da wannan jihar.
Ina aiki da Puppet sama da shekaru biyar yanzu. Wannan rubutu da gaske an fassara shi ne kuma an sake yin odar tattara mahimman bayanai daga takaddun hukuma, wanda zai ba masu farawa damar fahimtar ainihin abin tsana da sauri.
Bayani na asali
Tsarin aiki na Puppet shine abokin ciniki-uwar garken, kodayake kuma yana goyan bayan aiki mara sabar tare da iyakantaccen aiki.
Ana amfani da samfurin ja na aiki: ta tsohuwa, sau ɗaya kowace rabin sa'a, abokan ciniki suna tuntuɓar uwar garken don daidaitawa kuma su yi amfani da shi. Idan kun yi aiki tare da Mai yiwuwa, to, suna amfani da samfurin turawa daban-daban: mai gudanarwa ya fara aiwatar da tsarin yin amfani da tsarin, abokan ciniki da kansu ba za su yi amfani da wani abu ba.
A yayin sadarwar cibiyar sadarwa, ana amfani da ɓoyewar TLS ta hanyoyi biyu: uwar garken da abokin ciniki suna da maɓallan sirri na kansu da takaddun shaida masu dacewa. Yawanci uwar garken yana ba da takaddun shaida ga abokan ciniki, amma bisa manufa yana yiwuwa a yi amfani da CA na waje.
Gabatarwa ga manifestos
A cikin kalmomin tsana zuwa uwar garken tsana haɗa nodes (nodes). An rubuta tsari don nodes a cikin manifestos a cikin yaren shirye-shirye na musamman - Puppet DSL.
Yaren tsana DSL shine yaren bayyanawa. Yana bayyana yanayin kumburin da ake so a cikin nau'in ayyana albarkatun mutum ɗaya, misali:
- Fayil ɗin yana nan kuma yana da takamaiman abun ciki.
- An shigar da kunshin.
- An fara sabis ɗin.
Ana iya haɗa albarkatu tare:
- Akwai abubuwan dogaro, suna shafar tsarin da ake amfani da albarkatun.
Misali, "fara shigar da kunshin, sannan a gyara fayil ɗin daidaitawa, sannan fara sabis ɗin." - Akwai sanarwa - idan albarkatu ta canza, tana aika sanarwa zuwa albarkatun da aka yi rajista da su.
Misali, idan fayil ɗin sanyi ya canza, zaku iya sake kunna sabis ta atomatik.
Bugu da ƙari, Puppet DSL yana da ayyuka da masu canji, da kuma bayanan sharadi da masu zaɓi. Hakanan ana tallafawa nau'ikan samfuri daban-daban - EPP da ERB.
An rubuta tsana a cikin Ruby, don haka yawancin gine-gine da sharuddan ana ɗaukar su daga can. Ruby yana ba ku damar faɗaɗa Puppet - ƙara hadaddun dabaru, sabbin nau'ikan albarkatu, ayyuka.
Yayin da Puppet ke gudana, ana tattara bayanan kowane takamaiman kumburi akan uwar garken zuwa cikin kundin adireshi. Directory jerin albarkatu ne da alaƙarsu bayan ƙididdige ƙimar ayyuka, masu canji da faɗaɗa bayanan sharadi.
Syntax da codestyle
Anan akwai sassan takaddun hukuma waɗanda zasu taimaka muku fahimtar ma'auni idan misalan da aka bayar basu isa ba:
Ga misalin yadda bayyanar ta yi kama:
# Комментарии пишутся, как и много где, после решётки.
#
# Описание конфигурации ноды начинается с ключевого слова node,
# за которым следует селектор ноды — хостнейм (с доменом или без)
# или регулярное выражение для хостнеймов, или ключевое слово default.
#
# После этого в фигурных скобках описывается собственно конфигурация ноды.
#
# Одна и та же нода может попасть под несколько селекторов. Про приоритет
# селекторов написано в статье про синтаксис описания нод.
node 'hostname', 'f.q.d.n', /regexp/ {
# Конфигурация по сути является перечислением ресурсов и их параметров.
#
# У каждого ресурса есть тип и название.
#
# Внимание: не может быть двух ресурсов одного типа с одинаковыми названиями!
#
# Описание ресурса начинается с его типа. Тип пишется в нижнем регистре.
# Про разные типы ресурсов написано ниже.
#
# После типа в фигурных скобках пишется название ресурса, потом двоеточие,
# дальше идёт опциональное перечисление параметров ресурса и их значений.
# Значения параметров указываются через т.н. hash rocket (=>).
resource { 'title':
param1 => value1,
param2 => value2,
param3 => value3,
}
}
Shigarwa da karya layi ba sashe bane da ake buƙata na bayyanar, amma akwai shawarar
- Alamar sarari biyu, ba a amfani da shafuka.
- An raba takalmin gyaran kafa mai lanƙwasa da sarari; ba a raba matsuguni da sarari.
- Waƙafi bayan kowace siga, gami da na ƙarshe. Kowane siga yana kan layi daban. An keɓance keɓaɓɓen shari'ar ba tare da sigogi da sigogi ɗaya ba: zaku iya rubutu akan layi ɗaya kuma ba tare da waƙafi ba (watau.
resource { 'title': }
иresource { 'title': param => value }
). - Kibiyoyin akan sigogi yakamata su kasance a matakin ɗaya.
- Ana rubuta kiban alakar albarkatu a gabansu.
Wurin fayiloli akan pappetserver
Don ƙarin bayani, zan gabatar da manufar "tushen directory". Tushen directory shine kundin adireshi wanda ke ƙunshe da tsarin tsana don takamaiman kumburi.
Tushen littafin ya bambanta dangane da sigar Puppet da mahallin da aka yi amfani da su. Muhalli sashe ne na daidaitawa masu zaman kansu waɗanda aka adana a cikin kundayen adireshi daban. Yawancin lokaci ana amfani da su a hade tare da git, a cikin abin da yanayin ke faruwa daga rassan git. Saboda haka, kowane kumburi yana cikin yanayi ɗaya ko wani. Ana iya saita wannan akan kumburin kanta, ko a cikin ENC, wanda zan yi magana game da shi a cikin labarin na gaba.
- A cikin sigar ta uku ("tsohuwar tsana") tushen directory shine
/etc/puppet
. Amfani da mahalli na zaɓi ne - alal misali, ba ma amfani da su tare da tsohuwar tsana. Idan ana amfani da mahalli, yawanci ana adana su a ciki/etc/puppet/environments
, tushen directory zai zama kundin muhalli. Idan ba a yi amfani da mahalli ba, tushen adireshin zai zama tushen adireshin. - An fara daga juzu'i na huɗu ("sabon 'yar tsana"), yin amfani da mahalli ya zama tilas, kuma an matsar da tushen littafin zuwa
/etc/puppetlabs/code
. Saboda haka, ana adana mahalli a ciki/etc/puppetlabs/code/environments
, tushen directory shine kundin muhalli.
Dole ne a sami babban kundin adireshi a cikin tushen directory manifests
, wanda ya ƙunshi ɗaya ko fiye da bayyanar da ke kwatanta nodes. Bugu da kari, ya kamata a kasance a karkashin kundin adireshi modules
, wanda ya ƙunshi kayayyaki. Zan gaya muku abin da modules ne kadan daga baya. Bugu da kari, tsohuwar tsana kuma na iya samun kundin adireshi files
, wanda ya ƙunshi fayiloli daban-daban waɗanda muke kwafin su zuwa nodes. A cikin sabon tsana, duk fayiloli ana sanya su a cikin kayayyaki.
Fayilolin da aka bayyana suna da tsawo .pp
.
Misalai biyu na yaƙi
Bayanin kumburi da albarkatun akan shi
A kan kumburi server1.testdomain
dole ne a ƙirƙiri fayil /etc/issue
tare da abun ciki Debian GNU/Linux n l
. Dole ne fayil ɗin ya zama mallakar mai amfani da ƙungiya root
, dole ne haƙƙin shiga ya kasance 644
.
Muna rubuta ma'anar:
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 в начале будет воспринято как записанное в восьмеричной системе, и всё пойдёт не так, как задумано
}
}
Dangantaka tsakanin albarkatun akan kumburi
A kan kumburi server2.testdomain
nginx dole ne ya kasance yana gudana, yana aiki tare da tsarin da aka shirya a baya.
Bari mu lalata matsalar:
- Ana buƙatar shigar da kunshin
nginx
. - Wajibi ne a kwafi fayilolin sanyi daga uwar garken.
- Sabis ɗin yana buƙatar gudana
nginx
. - Idan an sabunta saitin, dole ne a sake kunna sabis ɗin.
Muna rubuta ma'anar:
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 получает уведомление,
# соответствующий сервис перезапускается.
}
Don yin aiki, kuna buƙatar kusan wurin fayil mai zuwa akan sabar yar tsana:
/etc/puppetlabs/code/environments/production/ # (это для нового Паппета, для старого корневой директорией будет /etc/puppet)
├── manifests/
│ └── site.pp
└── modules/
└── example/
└── files/
└── nginx-conf/
├── nginx.conf
├── mime.types
└── conf.d/
└── some.conf
Nau'in Albarkatu
Ana iya samun cikakken jerin nau'ikan albarkatun tallafi anan
fayil
Yana sarrafa fayiloli, kundayen adireshi, alamomi, abubuwan da ke cikin su, da haƙƙin samun dama.
Sigogi:
- sunan albarkatu - hanyar zuwa fayil (na zaɓi)
- hanya - hanyar zuwa fayil ɗin (idan ba a ƙayyade a cikin sunan ba)
- tabbatar da - nau'in fayil:
absent
- share fayilpresent
- dole ne a sami fayil na kowane nau'i (idan babu fayil, za a ƙirƙiri fayil na yau da kullun)file
- fayil na yau da kullundirectory
- directorylink
- symlink
- abun ciki - Abubuwan da ke cikin fayil (dace kawai don fayilolin yau da kullun, ba za a iya amfani da su tare da source ko manufa)
- source - hanyar haɗi zuwa hanyar da kake son kwafi abubuwan da ke cikin fayil ɗin (ba za a iya amfani da su tare da abun ciki ko manufa). Za a iya ayyana su azaman URI tare da tsari
puppet:
(sannan za a yi amfani da fayiloli daga uwar garken tsana), kuma tare da makircihttp:
(Ina fatan ya bayyana a fili abin da zai faru a wannan yanayin), har ma da zanefile:
ko azaman cikakkiyar hanya ba tare da tsari ba (sannan za a yi amfani da fayil ɗin daga FS na gida akan kumburi) - manufa - inda ya kamata alamar alamar ta nuna (ba za a iya amfani da ita tare da abun ciki ko source)
- owner - mai amfani wanda yakamata ya mallaki fayil ɗin
- kungiyar - ƙungiyar da ya kamata fayil ɗin ya kasance
- yanayin - izinin fayil (a matsayin kirtani)
- sake biya - yana ba da damar sarrafa directory recursive
- tsabta - yana ba da damar share fayilolin da ba a bayyana su a cikin Puppet ba
- karfi - yana ba da damar share kundayen adireshi waɗanda ba a bayyana su a cikin Puppet ba
kunshin
Shigarwa da cire fakiti. Mai ikon sarrafa sanarwar - sake shigar da kunshin idan an ayyana siga reinstall_on_refresh.
Sigogi:
- sunan albarkatu - sunan kunshin (na zaɓi)
- sunan - sunan kunshin (idan ba a ƙayyade a cikin sunan ba)
- mai bada - mai sarrafa fakiti don amfani
- tabbatar da - yanayin da ake so na kunshin:
present
,installed
- kowane sigar shigarlatest
- sabuwar sigar shigarabsent
- share (apt-get remove
)purged
- share tare da sanyi fayiloli (apt-get purge
)held
- an kulle sigar kunshin (apt-mark hold
)любая другая строка
- an shigar da ƙayyadadden sigar
- reinstall_on_refresh - idan wani
true
, sannan bayan an sami sanarwar za a sake shigar da kunshin. Mai amfani don rarraba tushen tushe, inda sake gina fakitin na iya zama dole lokacin canza sigogin ginawa. Tsohuwarfalse
.
sabis
Sarrafa ayyuka. Mai ikon aiwatar da sanarwar - sake kunna sabis.
Sigogi:
- sunan albarkatu - sabis ɗin da za a sarrafa (na zaɓi)
- sunan - sabis ɗin da ke buƙatar sarrafa (idan ba a ƙayyade a cikin sunan ba)
- tabbatar da - yanayin sabis ɗin da ake so:
running
- kaddamarstopped
- tsaya
- taimaka - yana sarrafa ikon fara sabis:
true
- an kunna autorun (systemctl enable
)mask
- kama (systemctl mask
)false
- an kashe autorun (systemctl disable
)
- sake kunnawa - umarni don sake kunna sabis ɗin
- status - umarni don duba matsayin sabis
- sake farawa - nuna ko initscript ɗin sabis yana goyan bayan sake farawa. Idan
false
kuma an ƙayyade siga sake kunnawa - ana amfani da ƙimar wannan siga. Idanfalse
da siga sake kunnawa ba a ƙayyade ba - an dakatar da sabis ɗin kuma an fara farawa (amma systemd yana amfani da umarninsystemctl restart
). - gaggawar - nuna ko initscript sabis yana goyan bayan umarnin
status
. Idanfalse
, sannan ana amfani da ƙimar siga status. Tsohuwartrue
.
exec
Yana gudanar da umarni na waje. Idan ba ku ƙayyade sigogi ba Halicci, kawai idan, sai dai idan ko annashuwa, za a gudanar da umurnin a duk lokacin da ake gudanar da Puppet. Mai ikon aiwatar da sanarwar - yana gudanar da umarni.
Sigogi:
- sunan albarkatu - umarnin da za a aiwatar (na zaɓi)
- umurnin - umarnin da za a aiwatar (idan ba a bayyana shi a cikin sunan ba)
- hanya - hanyoyin da za a nemi fayil ɗin da za a iya aiwatarwa
- kawai idan - idan umarnin da aka ƙayyade a cikin wannan siga ya cika tare da lambar dawowar sifili, za a aiwatar da babban umarni
- sai dai idan - idan umarnin da aka ƙayyade a cikin wannan siga ya cika tare da lambar dawo da mara sifili, za a aiwatar da babban umarni
- Halicci - idan fayil ɗin da aka ƙayyade a cikin wannan sigar ba ya wanzu, za a aiwatar da babban umarni
- annashuwa - idan wani
true
, to umurnin zai kasance kawai lokacin da wannan exec ya sami sanarwa daga wasu albarkatun - cwd - directory daga inda za a gudanar da umarni
- mai amfani - mai amfani daga wanda zai gudanar da umarni
- mai bada - yadda ake gudanar da umarni:
- posix - tsarin yaro kawai an halicce shi, tabbatar da ƙayyade hanya
- harsashi - An ƙaddamar da umarnin a cikin harsashi
/bin/sh
, mai yiwuwa ba za a iya bayyana shi ba hanya, za ka iya amfani da globbing, bututu da sauran harsashi fasali. Yawancin lokaci ana gano su ta atomatik idan akwai wasu haruffa na musamman (|
,;
,&&
,||
da sauransu).
cron
Sarrafa cronjobs.
Sigogi:
- sunan albarkatu - kawai wani nau'i na ganowa
- tabbatar da - Jihar Crown:
present
- ƙirƙira idan babuabsent
- share idan akwai
- umurnin - wane umarni don gudu
- yanayi - a cikin wane yanayi don gudanar da umarni (jerin masu canjin yanayi da ƙimar su ta hanyar
=
) - mai amfani - daga wane mai amfani don gudanar da umarni
- minute, hour, ranar mako, watan, ranar wata - lokacin gudu cron. Idan ba a bayyana ɗaya daga cikin waɗannan halayen ba, ƙimar sa a cikin crontab zai kasance
*
.
A cikin Puppet 6.0 cron kamar
Game da albarkatun gabaɗaya
Abubuwan bukatu don keɓancewar kayan albarkatu
Mafi yawan kuskuren da muke fuskanta shine Kwafin shela. Wannan kuskuren yana faruwa lokacin da abubuwa biyu ko fiye na nau'in iri ɗaya masu suna iri ɗaya suka bayyana a cikin kundin adireshi.
Don haka, zan sake rubutawa: bayyana don kumburi ɗaya kada ya ƙunshi albarkatun nau'in iri ɗaya tare da take iri ɗaya!
Wani lokaci ana buƙatar shigar da fakiti masu suna iri ɗaya, amma tare da manajan fakiti daban-daban. A wannan yanayin, kuna buƙatar amfani da siga name
don gujewa kuskure:
package { 'ruby-mysql':
ensure => installed,
name => 'mysql',
provider => 'gem',
}
package { 'python-mysql':
ensure => installed,
name => 'mysql',
provider => 'pip',
}
Sauran nau'ikan albarkatun suna da zaɓuɓɓuka iri ɗaya don taimakawa guje wa kwafi- name
у sabis, command
у exec, da sauransu.
Metaparameters
Kowane nau'in albarkatun yana da wasu sigogi na musamman, ba tare da la'akari da yanayin sa ba.
Cikakken jerin sigogin meta
Gajeren jeri:
- buƙatar - wannan siga yana nuna waɗanne albarkatun wannan albarkatun ya dogara da su.
- kafin - Wannan siga yana ƙayyade wadanne albarkatun da suka dogara da wannan albarkatun.
- biyan kuɗi - wannan siga yana ƙayyade daga wane albarkatun wannan albarkatun ke karɓar sanarwa.
- sanar - Wannan siga yana ƙayyade wadanne albarkatun da ke karɓar sanarwa daga wannan albarkatun.
Duk ma'auni da aka jera suna karɓar ko dai hanyar haɗin yanar gizo guda ɗaya ko jerin hanyoyin haɗin gwiwa a cikin maƙallan murabba'ai.
Hanyoyin haɗi zuwa albarkatu
Hanyar hanyar haɗi ita ce ambaton albarkatun kawai. Ana amfani da su galibi don nuna dogaro. Nuna albarkatun da ba su wanzu zai haifar da kuskuren haɗawa.
Ma'anar hanyar haɗin ita ce kamar haka: nau'in albarkatun tare da babban harafi (idan nau'in sunan ya ƙunshi colons biyu, to kowane ɓangaren sunan tsakanin colons yana da girma), sannan sunan albarkatu a cikin shingen murabba'i (al'amarin sunan. ba ya canzawa!). Kada a sami sarari; ana rubuta maƙallan murabba'i nan da nan bayan nau'in sunan.
Alal misali:
file { '/file1': ensure => present }
file { '/file2':
ensure => directory,
before => File['/file1'],
}
file { '/file3': ensure => absent }
File['/file1'] -> File['/file3']
Dogara da sanarwa
Kamar yadda aka fada a baya, dogaro mai sauƙi tsakanin albarkatu suna canzawa. Af, yi hankali lokacin ƙara abubuwan dogaro - zaku iya ƙirƙirar abubuwan dogaro na cyclic, wanda zai haifar da kuskuren tattarawa.
Ba kamar abin dogaro ba, sanarwar ba ta canzawa ba. Ka'idoji masu zuwa sun shafi sanarwar:
- Idan albarkatun sun sami sanarwa, an sabunta shi. Ayyukan sabuntawa sun dogara da nau'in albarkatun - exec yana gudanar da umarni, sabis sake kunna sabis, kunshin sake shigar da kunshin. Idan albarkatun ba su da ayyana aikin sabuntawa, to babu abin da zai faru.
- A lokacin guda ɗaya na Puppet, ba a sabunta albarkatun ba fiye da sau ɗaya ba. Wannan yana yiwuwa saboda sanarwar sun haɗa da abin dogaro kuma jadawali na dogaro ba ya ƙunshi hawan keke.
- Idan Puppet ya canza yanayin albarkatun, albarkatun suna aika sanarwa zuwa duk albarkatun da aka yi rajista da su.
- Idan an sabunta kayan aiki, tana aika sanarwa zuwa duk albarkatun da aka yi rajista da su.
Gudanar da sigogin da ba a bayyana ba
A matsayinka na mai mulki, idan wasu ma'auni na albarkatu ba su da ƙimar tsoho kuma ba a ƙayyade wannan sigar a cikin bayyananniyar ba, to Puppet ba zai canza wannan kadarar don albarkatun da suka dace akan kumburi ba. Misali, idan albarkatun nau'in fayil siga ba a kayyade owner
, to Puppet ba zai canza mai fayil ɗin da ya dace ba.
Gabatarwa zuwa azuzuwan, masu canji da ma'anoni
A ce muna da nodes da yawa waɗanda ke da sashi ɗaya na tsarin, amma akwai kuma bambance-bambance - in ba haka ba za mu iya kwatanta shi duka a cikin toshe ɗaya. node {}
. Tabbas, zaku iya kwafin sassa iri ɗaya kawai na daidaitawar, amma gabaɗaya wannan shine mummunan bayani - tsarin yana girma, kuma idan kun canza babban ɓangaren daidaitawar, dole ne ku gyara abu iri ɗaya a wurare da yawa. A lokaci guda, yana da sauƙin yin kuskure, kuma a gaba ɗaya, an ƙirƙiri ka'idar DRY (kada ku sake maimaita kanku) don dalili.
Don magance wannan matsala akwai irin wannan zane kamar aji.
Classes
Da farko ana buƙatar bayanin ajin. Bayanin kansa bai ƙara wani albarkatu a ko'ina ba. An bayyana ajin a cikin bayyanuwa:
# Описание класса начинается с ключевого слова class и его названия.
# Дальше идёт тело класса в фигурных скобках.
class example_class {
...
}
Bayan haka, ana iya amfani da ajin:
# первый вариант использования — в стиле ресурса с типом class
class { 'example_class': }
# второй вариант использования — с помощью функции include
include example_class
# про отличие этих двух вариантов будет рассказано дальше
Misali daga aikin da ya gabata - bari mu matsar da shigarwa da daidaitawar nginx cikin aji:
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
}
Bambanci
Ajin daga misalin da ya gabata ba shi da sassauƙa kwata-kwata saboda koyaushe yana kawo daidaitattun nginx iri ɗaya. Bari mu sanya hanyar zuwa yanayin daidaitawa, to ana iya amfani da wannan aji don shigar da nginx tare da kowane tsari.
Ana iya yi
Hankali: masu canji a cikin Puppet ba su canzawa!
Bugu da ƙari, ana iya samun dama ga maɓalli kawai bayan an bayyana shi, in ba haka ba darajar canjin za ta kasance undef
.
Misali na aiki tare da masu canji:
# создание переменных
$variable = 'value'
$var2 = 1
$var3 = true
$var4 = undef
# использование переменных
$var5 = $var6
file { '/tmp/text': content => $variable }
# интерполяция переменных — раскрытие значения переменных в строках. Работает только в двойных кавычках!
$var6 = "Variable with name variable has value ${variable}"
Yar tsana yana da wuraren suna, kuma masu canji, saboda haka, suna da yankin gani: Ana iya siffanta maɓalli mai suna iri ɗaya a wurare daban-daban. Lokacin da ake warware ƙimar ma'auni, ana bincika maballin a cikin sararin suna na yanzu, sa'an nan kuma a cikin sararin suna, da sauransu.
Misalai na sararin suna:
- duniya - masu canji a waje da aji ko bayanin kumburi suna zuwa can;
- node namespace a cikin bayanin kumburi;
- sarari sunan aji a cikin bayanin ajin.
Don guje wa shakku lokacin samun dama ga maɓalli, zaku iya ƙididdige sararin suna a cikin suna mai canzawa:
# переменная без пространства имён
$var
# переменная в глобальном пространстве имён
$::var
# переменная в пространстве имён класса
$classname::var
$::classname::var
Bari mu yarda cewa hanyar zuwa daidaitawar nginx ta ta'allaka ne a cikin m $nginx_conf_source
. Sannan ajin zai kasance kamar haka:
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
}
Koyaya, misalin da aka bayar yana da kyau saboda akwai “ilimin sirri” wanda a wani wuri a cikin ajin ana amfani da mabambanta mai irin wannan suna. Zai fi dacewa a sanya wannan ilimin gabaɗaya - azuzuwan na iya samun sigogi.
sigogin aji masu canji ne a cikin sararin sunan aji, an kayyade su a cikin taken aji kuma ana iya amfani da su kamar masu canji na yau da kullun a cikin aji. An ƙididdige ƙimar sigina lokacin amfani da aji a cikin bayyani.
Ana iya saita siga zuwa ƙimar da ta dace. Idan ma'auni ba shi da ƙimar tsoho kuma ba a saita ƙimar lokacin amfani da shi ba, zai haifar da kuskuren haɗawa.
Bari mu daidaita ajin daga misalin da ke sama kuma mu ƙara sigogi biyu: na farko, da ake buƙata, shine hanyar daidaitawa, kuma na biyu, na zaɓi, shine sunan kunshin tare da nginx (a cikin Debian, alal misali, akwai fakiti. 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', # задаём параметры класса точно так же, как параметры для других ресурсов
}
}
A cikin tsana, ana buga masu canji. Ku ci
An rubuta nau'in nan da nan kafin sunan siga:
class example (
String $param1,
Integer $param2,
Array $param3,
Hash $param4,
Hash[String, String] $param5,
) {
...
}
Azuzuwa: sun haɗa da classname vs class{'classname':}
Kowane aji albarkatun iri ne class. Kamar kowane nau'in albarkatu, ba za a iya samun lokuta biyu na aji ɗaya akan kulli ɗaya ba.
Idan kayi ƙoƙarin ƙara aji zuwa kumburi iri ɗaya sau biyu ta amfani da class { 'classname':}
(babu bambanci, tare da sigogi daban-daban ko iri ɗaya), za a sami kuskuren tattarawa. Amma idan kun yi amfani da aji a cikin salon kayan aiki, nan da nan zaku iya saita duk sigogin sa a bayyane.
Duk da haka, idan kun yi amfani include
, to ana iya ƙara ajin sau da yawa kamar yadda ake so. Gaskiyar ita ce include
aiki ne mai ƙarfi wanda ke bincika ko an ƙara aji zuwa kundin adireshi. Idan ba a cikin kundin adireshi ba, yana ƙara shi, kuma idan ya riga ya wanzu, ba ya yin kome. Amma a yanayin amfani include
Ba za ku iya saita sigogin aji ba yayin sanarwar aji - duk sigogin da ake buƙata dole ne a saita su a tushen bayanan waje - Hiera ko ENC. Za mu yi magana game da su a talifi na gaba.
Yana bayyana
Kamar yadda aka fada a cikin tubalan da ya gabata, aji ɗaya ba zai iya kasancewa akan kumburi fiye da sau ɗaya ba. Koyaya, a wasu lokuta kuna buƙatar samun damar amfani da toshe na lamba iri ɗaya tare da sigogi daban-daban akan kulli ɗaya. A takaice dai, akwai buƙatar nau'in albarkatun nasa.
Misali, don shigar da tsarin PHP, muna yin haka a cikin Avito:
- Shigar da kunshin tare da wannan ƙirar.
- Bari mu ƙirƙiri fayil ɗin sanyi don wannan tsarin.
- Mun ƙirƙiri alamar haɗin kai zuwa saitin don php-fpm.
- Mun ƙirƙiri alamar haɗin kai zuwa saitin don php cli.
A irin waɗannan lokuta, zane kamar $title
, inda sunan albarkatun ke zuwa lokacin da aka bayyana shi. Kamar yadda yake a cikin azuzuwan, dole ne a fara bayyana ma'anar, bayan haka ana iya amfani da ita.
Sauƙaƙe misali tare da module don 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' }
}
Hanya mafi sauƙi don kama kuskuren bayyanawa Kwafi shine a Ƙayyade. Wannan yana faruwa idan ma'anar tana da albarkatu tare da suna koyaushe, kuma akwai lokuta biyu ko fiye na wannan ma'anar akan wasu kumburi.
Yana da sauƙi don kare kanka daga wannan: duk albarkatun da ke cikin ma'anar dole ne su kasance suna da suna dangane da $title
. Wani madadin shine ƙara yawan albarkatu; a cikin mafi sauƙi yanayin, ya isa ya motsa albarkatun gama gari zuwa duk misalan ma'anar zuwa wani aji daban kuma haɗa wannan aji a cikin ma'anar - aiki. include
mai iko.
Akwai wasu hanyoyin da za a iya cimma ƙarfi yayin ƙara albarkatu, wato ta amfani da ayyuka defined
и ensure_resources
, amma zan gaya muku game da shi a kashi na gaba.
Dogaro da sanarwa don azuzuwa da ma'anoni
Azuzuwa da ma'anar suna ƙara ƙa'idodi masu zuwa don sarrafa abin dogaro da sanarwa:
- dogara ga aji/bayyana yana ƙara dogaro akan duk albarkatun aji/bayyana;
- aji/bayyana dogaro yana ƙara dogaro ga duk aji/bayyana albarkatu;
- class/bayyana sanarwar sanar da duk albarkatun aji/bayyana;
- class/bayyana biyan kuɗin shiga ga duk albarkatun aji/bayyana.
Kalamai na sharadi da masu zaɓe
if
Yana da sauki a nan:
if ВЫРАЖЕНИЕ1 {
...
} elsif ВЫРАЖЕНИЕ2 {
...
} else {
...
}
sai dai idan
sai dai idan ya kasance a baya: za a aiwatar da toshe lambar idan maganar ƙarya ce.
unless ВЫРАЖЕНИЕ {
...
}
harka
Babu wani abu mai rikitarwa a nan kuma. Kuna iya amfani da ƙima na yau da kullun ( kirtani, lambobi, da sauransu), maganganu na yau da kullun, da nau'ikan bayanai azaman ƙima.
case ВЫРАЖЕНИЕ {
ЗНАЧЕНИЕ1: { ... }
ЗНАЧЕНИЕ2, ЗНАЧЕНИЕ3: { ... }
default: { ... }
}
Masu zaɓe
Zaɓaɓɓen harshe ne da aka gina irinsa case
, amma maimakon aiwatar da toshe lambar, yana dawo da ƙima.
$var = $othervar ? { 'val1' => 1, 'val2' => 2, default => 3 }
Modules
Lokacin da ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ya yi ƙanƙara, ana iya ajiye shi cikin sauƙi a cikin bayyane ɗaya. Amma mafi yawan saiti da muka bayyana, yawancin azuzuwan da nodes akwai a cikin bayyanar, yana girma, kuma ya zama rashin jin daɗi don aiki tare.
Bugu da ƙari, akwai matsalar sake amfani da lambar - lokacin da duk lambar ke cikin bayyane ɗaya, yana da wuya a raba wannan lambar tare da wasu. Don magance waɗannan matsalolin biyu, Puppet yana da mahallin da ake kira modules.
Modules - Waɗannan saiti ne na azuzuwan, ma'anoni da sauran abubuwan tsana da aka sanya a cikin wani babban kundin adireshi. A wasu kalmomi, ƙirar ƙira wani yanki ne mai zaman kansa na dabaru na tsana. Misali, ana iya samun module don aiki tare da nginx, kuma zai ƙunshi abin da kawai abin da ake buƙata don aiki tare da nginx, ko kuma ana iya samun tsarin aiki tare da PHP, da sauransu.
Modules an tsara su, kuma ana samun goyan bayan abubuwan dogaro ga juna. Akwai buɗaɗɗen ma'ajiyar kayayyaki -
A kan uwar garken tsana, ana samun moduloli a cikin kundin kundin tsarin mulki na tushen tushen. A cikin kowane nau'i akwai madaidaicin tsarin jagora - bayyananni, fayiloli, samfuri, lib, da sauransu.
Tsarin fayil a cikin tsari
Tushen tsarin yana iya ƙunsar kundayen adireshi masu zuwa tare da sunaye masu siffantawa:
manifests
- yana dauke da ma'anafiles
- ya ƙunshi fayilolitemplates
- ya ƙunshi samfurilib
- ya ƙunshi lambar Ruby
Wannan ba cikakken jerin kundayen adireshi da fayiloli bane, amma ya isa wannan labarin a yanzu.
Sunayen albarkatun da sunayen fayiloli a cikin tsarin
Abubuwan (azuzuwan, ma'anoni) a cikin tsarin ba za a iya suna duk abin da kuke so ba. Bugu da kari, akwai rubutu kai tsaye tsakanin sunan albarkatun da sunan fayil wanda Puppet zai nemi bayanin wannan albarkatun. Idan kun keta dokokin suna, to, Puppet kawai ba zai sami bayanin albarkatun ba, kuma zaku sami kuskuren haɗawa.
Dokokin suna da sauƙi:
- Duk albarkatun da ke cikin module dole ne su kasance a cikin sararin sunan module. Idan an kira module
foo
, to duk albarkatun da ke cikinta yakamata a sanya sunafoo::<anything>
, ko kuma kawaifoo
. - Dole ne albarkatun da sunan tsarin ya kasance a cikin fayil ɗin
init.pp
. - Don sauran albarkatun, tsarin sanya sunan fayil shine kamar haka:
- an zubar da prefix tare da sunan module
- duk nau'i-nau'i biyu, idan akwai, ana maye gurbinsu da slash
- an kara tsawo
.pp
Zan nuna da misali. Bari mu ce ina rubuta module nginx
. Ya ƙunshi abubuwa masu zuwa:
- aji
nginx
aka bayyana a cikin bayyanuwainit.pp
; - aji
nginx::service
aka bayyana a cikin bayyanuwaservice.pp
; - ayyana
nginx::server
aka bayyana a cikin bayyanuwaserver.pp
; - ayyana
nginx::server::location
aka bayyana a cikin bayyanuwaserver/location.pp
.
Hanyoyi
Tabbas ku da kanku kun san menene samfura; Ba zan kwatanta su dalla-dalla anan ba. Amma zan bar shi kawai idan akwai
Yadda ake amfani da samfuri: Ana iya faɗaɗa ma'anar samfuri ta amfani da aiki template
, wanda aka wuce hanyar zuwa samfuri. Don albarkatun nau'in fayil amfani tare da siga content
. Misali, kamar haka:
file { '/tmp/example': content => template('modulename/templatename.erb')
Duba hanya <modulename>/<filename>
yana nufin fayil <rootdir>/modules/<modulename>/templates/<filename>
.
Bugu da ƙari, akwai aiki inline_template
- yana karɓar rubutun samfuri azaman shigarwa, ba sunan fayil ba.
A cikin samfura, zaku iya amfani da duk masu canjin tsana a cikin iyakar yanzu.
Tsanana tana goyan bayan samfuri a tsarin ERB da EPP:
A taƙaice game da ERB
Tsarin sarrafawa:
<%= ВЫРАЖЕНИЕ %>
- saka darajar magana<% ВЫРАЖЕНИЕ %>
- ƙididdige ƙimar magana (ba tare da saka shi ba). Bayanan sharadi (idan) da madaukai (kowannensu) yawanci suna zuwa nan.<%# КОММЕНТАРИЙ %>
Ana rubuta maganganu a cikin ERB a cikin Ruby (ERB ainihin Rubi ne).
Don samun dama ga masu canji daga bayanin, kuna buƙatar ƙarawa @
zuwa sunan mai canzawa. Don cire hutun layi wanda ya bayyana bayan ginin sarrafawa, kuna buƙatar amfani da alamar rufewa -%>
.
Misali na amfani da samfuri
Bari mu ce ina rubuta wani tsari don sarrafa ZooKeeper. Ajin da ke da alhakin ƙirƙirar tsarin yana kama da wani abu kamar haka:
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'),
}
}
Kuma samfurin da ya dace zoo.cfg.erb
- Don haka:
<% 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 -%>
Facts and Gina-Ciban Canje-canje
Sau da yawa takamaiman ɓangaren daidaitawa ya dogara da abin da ke faruwa a halin yanzu akan kumburi. Misali, ya danganta da menene sakin Debian, kuna buƙatar shigar da ɗaya ko wata sigar fakitin. Kuna iya saka idanu duk waɗannan da hannu, sake rubutawa yana bayyana idan nodes sun canza. Amma wannan ba hanya ce mai mahimmanci ba; sarrafa kansa ya fi kyau.
Don samun bayanai game da nodes, Puppet yana da hanyar da ake kira gaskiya. Gaskiya - wannan bayani ne game da kumburi, samuwa a cikin bayyanar a cikin nau'i na talakawa masu canji a cikin sunan duniya. Misali, sunan mai masauki, sigar tsarin aiki, tsarin gine-gine, jerin masu amfani, jerin mu’amalar hanyar sadarwa da adiresoshinsu, da yawa, da yawa. Ana samun bayanai a cikin bayyanuwa da samfuri azaman masu canji na yau da kullun.
Misali na aiki tare da hujjoji:
notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# ресурс типа notify просто выводит сообщение в лог
A zahiri magana, gaskiya tana da suna (kirtani) da ƙima (ana samun nau'ikan iri iri-iri: kirtani, tsararru, ƙamus). Ku ci
Yayin aiki, wakilin ɗan tsana ya fara kwafin duk masu tattara bayanan gaskiya daga pappetserver zuwa kumburi, bayan haka ya ƙaddamar da su kuma ya aika bayanan da aka tattara zuwa uwar garken; Bayan wannan, uwar garken ta fara tattara kasida.
Bayanan gaskiya a cikin nau'in fayilolin aiwatarwa
Irin waɗannan bayanan ana sanya su a cikin kayayyaki a cikin kundin adireshi facts.d
. Tabbas, fayilolin dole ne a aiwatar dasu. Lokacin da ake gudu, dole ne su fitar da bayanai zuwa daidaitaccen fitarwa a cikin YAML ko maɓalli=tsarar darajar.
Kar a manta cewa bayanan sun shafi duk nodes ɗin da uwar garken poppet ke sarrafawa wanda aka tura tsarin ku. Don haka, a cikin rubutun, kula don bincika cewa tsarin yana da duk shirye-shirye da fayilolin da suka dace don gaskiyar ku ta yi aiki.
#!/bin/sh
echo "testfact=success"
#!/bin/sh
echo '{"testyamlfact":"success"}'
Gaskiyar Ruby
Ana sanya irin waɗannan bayanan a cikin kayayyaki a cikin kundin adireshi 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
Bayanan rubutu
Ana sanya irin waɗannan abubuwan a kan nodes a cikin kundin adireshi /etc/facter/facts.d
a cikin tsohon tsana ko /etc/puppetlabs/facts.d
a cikin sabon tsana.
examplefact=examplevalue
---
examplefact2: examplevalue2
anotherfact: anothervalue
Samun Gaskiya
Akwai hanyoyi guda biyu don tunkarar gaskiyar:
- ta kamus
$facts
:$facts['fqdn']
; - amfani da gaskiyar suna azaman sunan mai canzawa:
$fqdn
.
Zai fi kyau a yi amfani da ƙamus $facts
, ko ma mafi kyau, nuna alamar sunan duniya ($::facts
).
Canje-canjen da aka Gina
Bayan gaskiyar, akwai kuma
- amintacce gaskiya - masu canji waɗanda aka karɓa daga takardar shaidar abokin ciniki (tun da yawanci ana bayar da takardar shaidar akan sabar poppet, wakilin ba zai iya ɗauka kawai ya canza takardar shaidarsa ba, don haka masu canjin “amintattu”): sunan takardar shaidar, sunan mai masaukin baki da yanki, kari daga takaddun shaida.
- bayanan uwar garken - bambance-bambancen da ke da alaƙa da bayanai game da uwar garken - sigar, suna, adireshin IP na uwar garken, yanayi.
- bayanan wakilai - bambance-bambancen da aka ƙara kai tsaye ta hanyar wakilin yar tsana, kuma ba ta hanyar fater ba - sunan takardar shaida, sigar wakili, sigar yar tsana.
- manyan masu canji - Masu canji na Pappetmaster (sic!). Yana kusan daidai da a cikin bayanan uwar garken, da madaidaicin ma'auni suna samuwa.
- masu tarawa - masu tarawa waɗanda suka bambanta a kowane fanni: sunan tsarin na yanzu da sunan module ɗin da aka shiga cikin abin na yanzu. Ana iya amfani da su, alal misali, don bincika cewa ba a amfani da azuzuwan ku masu zaman kansu kai tsaye daga wasu kayayyaki.
Ƙari na 1: yadda ake gudu da kuma cire duk wannan?
Labarin ya ƙunshi misalai da yawa na lambar tsana, amma sam bai gaya mana yadda ake gudanar da wannan lambar ba. To ni na gyara kaina.
Wakili ya isa ya tafiyar da Puppet, amma ga mafi yawan lokuta kuma kuna buƙatar uwar garken.
Wakili
Aƙalla tun daga sigar XNUMX, fakitin wakilin yar tsana daga
A cikin mafi sauƙi, don amfani da ƙirar tsana, ya isa ya ƙaddamar da wakili a cikin yanayin uwar garke: muddin an kwafi lambar yar tsana zuwa kumburi, ƙaddamar da shi. 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
Yana da kyau, ba shakka, don saita uwar garken kuma gudanar da wakilai a kan nodes a yanayin daemon - to sau ɗaya kowane rabin sa'a za su yi amfani da tsarin da aka sauke daga sabar.
Kuna iya yin koyi da samfurin turawa na aiki - je zuwa kumburin da kuke sha'awar ku fara sudo puppet agent -t
. Maɓalli -t
(--test
) a zahiri ya ƙunshi zaɓuɓɓuka da yawa waɗanda za'a iya kunna su daban-daban. Waɗannan zaɓuɓɓukan sun haɗa da:
- kar a gudanar a yanayin daemon (ta tsohuwa wakilin yana farawa a yanayin daemon);
- rufe bayan yin amfani da kasida (ta tsohuwa, wakilin zai ci gaba da aiki kuma ya yi amfani da tsarin sau ɗaya a kowane rabin sa'a);
- rubuta cikakken tarihin aikin;
- nuna canje-canje a cikin fayiloli.
Wakilin yana da yanayin aiki ba tare da canje-canje ba - zaku iya amfani da shi lokacin da ba ku da tabbacin cewa kun rubuta daidaitaccen tsari kuma kuna son bincika ainihin abin da wakili zai canza yayin aiki. Ana kunna wannan yanayin ta siga --noop
akan layin umarni: sudo puppet agent -t --noop
.
Bugu da kari, za ka iya kunna debugging log na aikin - a cikinsa, yar tsana ya rubuta game da duk ayyukan da yake yi: game da albarkatun da yake a halin yanzu aiki, game da sigogi na wannan albarkatun, game da abin da shirye-shirye da ya kaddamar. Tabbas wannan siga ce --debug
.
Server
Ba zan yi la'akari da cikakken saitin pappetserver da tura lambar zuwa gare shi a cikin wannan labarin ba; Zan ce kawai daga cikin akwatin akwai cikakken sigar uwar garken wanda baya buƙatar ƙarin tsari don aiki tare da ƙaramin adadin. nodes (ka ce, har zuwa ɗari). Babban adadin nodes zai buƙaci kunnawa - ta tsohuwa, puppetserver yana ƙaddamar da ma'aikata sama da huɗu, don mafi girman aiki kuna buƙatar ƙara adadin su kuma kar ku manta da ƙara iyakokin ƙwaƙwalwar ajiya, in ba haka ba uwar garken zai tattara datti mafi yawan lokaci.
Ƙaddamar da lambar - idan kuna buƙatar shi da sauri da sauƙi, to, duba (a r10k)
Ƙara 2: Sharuɗɗan Coding
- Sanya duk dabaru a cikin azuzuwan da ma'anoni.
- Ajiye azuzuwan da ma'anoni a cikin ma'auni, ba a cikin filaye masu bayyana nodes ba.
- Yi amfani da gaskiyar.
- Kar a yi idans bisa sunayen masu masaukin baki.
- Jin 'yanci don ƙara sigogi don azuzuwan da ma'anoni - wannan ya fi madaidaicin ma'anar da ke ɓoye a jikin aji.
Zan bayyana dalilin da yasa na ba da shawarar yin haka a cikin labarin na gaba.
ƙarshe
Mu gama da gabatarwa. A cikin labarin na gaba zan gaya muku game da Hiera, ENC da PuppetDB.
Masu amfani da rajista kawai za su iya shiga cikin binciken.
A zahiri, akwai ƙarin abubuwa da yawa - Zan iya rubuta labarai akan batutuwa masu zuwa, zaɓi abin da kuke sha'awar karantawa:
- 59,1%'Yar Upet ta ci gaba - na gaba-na gaba: madaukai, masu tsara taswira, masu tattara albarkatun ƙasa, masu tattara kayayyaki, masu ba da izini, masu ba da kyauta.
- 31,8%"Ni ne mai kula da mahaifiyata" ko kuma yadda mu a cikin Avito muka yi abota da sabobin poppet da yawa na nau'i daban-daban, kuma, bisa ƙa'ida, ɓangaren game da gudanar da uwar garken poppet.7
- 81,8%Yadda muke rubuta lambar tsana: kayan aiki, takaddun shaida, gwaji, CI/CD.18
Masu amfani 22 sun kada kuri'a. Masu amfani 9 sun kaurace.
source: www.habr.com