Gabatarwa zuwa Tsanana

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.

Gabatarwa zuwa Tsanana

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 salon jagora. Taƙaice:

  • 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 a cikin takardun, Anan zan bayyana nau'ikan asali guda biyar, waɗanda a cikin aikina sun isa su magance yawancin matsaloli.

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 fayil
    • present - 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 kullun
    • directory - directory
    • link - 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 makirci http: (Ina fatan ya bayyana a fili abin da zai faru a wannan yanayin), har ma da zane file: 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 shigar
    • latest - sabuwar sigar shigar
    • absent - 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. Tsohuwar false.

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 - kaddamar
    • stopped - 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. Idan false da siga sake kunnawa ba a ƙayyade ba - an dakatar da sabis ɗin kuma an fara farawa (amma systemd yana amfani da umarnin systemctl restart).
  • gaggawar - nuna ko initscript sabis yana goyan bayan umarnin status. Idan false, sannan ana amfani da ƙimar siga status. Tsohuwar true.

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 babu
    • absent - 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 cire daga akwatin a cikin puppetserver, don haka babu wani takarda akan rukunin yanar gizon. Amma shi yana cikin akwati a cikin yar tsana-wakili, don haka babu bukatar shigar da shi dabam. Kuna iya ganin takaddun don shi a cikin takaddun don sigar Puppet ta biyar, ko ku GitHub.

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 namedon 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 a cikin Dokokin Puppet.

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

Takardu a nan.

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

Класс block ne mai suna na lambar poppet. Ana buƙatar azuzuwan don sake amfani da lamba.

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 ta amfani da masu canji.

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 nau'ikan bayanai da yawa. Ana amfani da nau'ikan bayanai galibi don tabbatar da ƙimar sigina da aka wuce zuwa azuzuwan da ma'anoni. Idan ma'aunin da aka wuce bai dace da ƙayyadadden nau'in ba, kuskuren haɗawa zai faru.

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:

  1. Shigar da kunshin tare da wannan ƙirar.
  2. Bari mu ƙirƙiri fayil ɗin sanyi don wannan tsarin.
  3. Mun ƙirƙiri alamar haɗin kai zuwa saitin don php-fpm.
  4. Mun ƙirƙiri alamar haɗin kai zuwa saitin don php cli.

A irin waɗannan lokuta, zane kamar ayyana (bayyana, ƙayyadaddun nau'in, ƙayyadadden nau'in albarkatu). Ma'anar yana kama da aji, amma akwai bambance-bambance: na farko, kowane Ma'anar nau'in albarkatu ne, ba albarkatu ba; na biyu, kowace ma'anar tana da fayyace siga $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

Takardu a nan.

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 - Yar tsana.

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'ana
  • files - ya ƙunshi fayiloli
  • templates - ya ƙunshi samfuri
  • lib - 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

Takardu a nan.

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 suna foo::<anything>, ko kuma kawai foo.
  • 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 bayyanuwa init.pp;
  • aji nginx::service aka bayyana a cikin bayyanuwa service.pp;
  • ayyana nginx::server aka bayyana a cikin bayyanuwa server.pp;
  • ayyana nginx::server::location aka bayyana a cikin bayyanuwa server/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 hanyar haɗi zuwa Wikipedia.

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 saitin abubuwan da aka gina a ciki. Hakanan zaka iya rubuta naka. An bayyana masu tattara gaskiya kamar ayyuka a cikin Rubyko dai a matsayin fayilolin aiwatarwa. Hakanan za'a iya gabatar da gaskiya a cikin tsari fayilolin rubutu tare da bayanai a kan nodes.

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).

Ga sashin da ya dace na takardun.

Canje-canjen da aka Gina

Bayan gaskiyar, akwai kuma wasu masu canji, samuwa a cikin sararin sunan duniya.

  • 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 Ma'ajiyar Puppetlabs na hukuma ya ƙunshi duk abubuwan dogaro (ruby da madaidaitan duwatsu masu daraja), don haka babu matsalolin shigarwa (Ina magana ne game da rarraba tushen Debian - ba mu amfani da rabon tushen RPM).

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)https://github.com/puppetlabs/r10k], don ƙananan shigarwa ya kamata ya isa sosai.

Ƙara 2: Sharuɗɗan Coding

  1. Sanya duk dabaru a cikin azuzuwan da ma'anoni.
  2. Ajiye azuzuwan da ma'anoni a cikin ma'auni, ba a cikin filaye masu bayyana nodes ba.
  3. Yi amfani da gaskiyar.
  4. Kar a yi idans bisa sunayen masu masaukin baki.
  5. 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. Shigadon Allah.

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