Chiyambi cha Chidole

Chidole ndi dongosolo kasamalidwe kasinthidwe. Amagwiritsidwa ntchito kubweretsa makamu kumalo omwe akufunidwa ndikusunga dziko lino.

Ndakhala ndikugwira ntchito ndi Chidole kwa zaka zoposa zisanu tsopano. Mawuwa kwenikweni ndi omasuliridwa ndi kukonzedwanso kaphatikizidwe ka mfundo zazikuluzikulu kuchokera m'zolemba zovomerezeka, zomwe zidzalola oyamba kumene kuti amvetse mwamsanga tanthauzo la Chidole.

Chiyambi cha Chidole

Zambiri

Makina ogwiritsira ntchito a Puppet ndi kasitomala-seva, ngakhale amathandizira ntchito yopanda seva yokhala ndi magwiridwe antchito ochepa.

Chitsanzo chokoka chimagwiritsidwa ntchito: mwachisawawa, kamodzi pa theka la ola, makasitomala amalumikizana ndi seva kuti akonze ndikuyiyika. Ngati mwagwira ntchito ndi Ansible, ndiye kuti amagwiritsa ntchito mtundu wosiyana wokankhira: woyang'anira amayambitsa ndondomeko yogwiritsira ntchito kasinthidwe, makasitomalawo sangagwiritse ntchito kalikonse.

Pakulumikizana kwa maukonde, njira ziwiri za TLS encryption zimagwiritsidwa ntchito: seva ndi kasitomala ali ndi makiyi awo achinsinsi ndi ziphaso zofananira. Nthawi zambiri seva imapereka satifiketi kwa makasitomala, koma kwenikweni ndizotheka kugwiritsa ntchito CA yakunja.

Chiyambi cha Manifesto

M'mawu a Chidole kwa seva ya chidole kulumikiza mfundo (mfundo). Kukonzekera kwa node kumalembedwa mu manifesto m'chinenero chapadera cha mapulogalamu - Chidole DSL.

Chidole DSL ndi chilankhulo cholengeza. Imalongosola momwe mfundoyo ikufunira monga kulengeza kwazinthu zapayekha, mwachitsanzo:

  • Fayiloyo ilipo ndipo ili ndi zinthu zinazake.
  • Phukusi lakhazikitsidwa.
  • Ntchito yayamba.

Zida zitha kulumikizidwa:

  • Pali zodalira, zimakhudza momwe zinthu zimagwiritsidwira ntchito.
    Mwachitsanzo, "yambani ikani phukusi, kenako sinthani fayilo yosinthira, kenako yambitsani ntchitoyo."
  • Pali zidziwitso - ngati zida zasintha, zimatumiza zidziwitso kuzinthu zomwe zidalembetsedwa.
    Mwachitsanzo, ngati fayilo yosinthira ikusintha, mutha kuyambitsanso ntchitoyo.

Kuphatikiza apo, DSL ya Chidole ili ndi ntchito ndi zosintha, komanso mawu okhazikika ndi osankhidwa. Njira zosiyanasiyana zowonetsera zimathandizidwanso - EPP ndi ERB.

Chidole chalembedwa mu Ruby, kotero zambiri zomanga ndi mawu amatengedwa kuchokera pamenepo. Ruby amakulolani kukulitsa Chidole - onjezerani malingaliro ovuta, mitundu yatsopano yazinthu, ntchito.

Pomwe Chidole chikuyenda, ziwonetsero za node iliyonse pa seva zimaphatikizidwa mu bukhu. Directory ndi mndandanda wazinthu ndi maubwenzi awo pambuyo powerengera mtengo wa ntchito, zosinthika ndi kufalikira kwa ziganizo zovomerezeka.

Syntax ndi codestyle

Nawa zigawo za zolembedwa zovomerezeka zomwe zingakuthandizeni kumvetsetsa mawuwo ngati zitsanzo zomwe zaperekedwa sizokwanira:

Nachi chitsanzo cha momwe chiwonetserochi chikuwonekera:

# Комментарии пишутся, как и много где, после решётки.
#
# Описание конфигурации ноды начинается с ключевого слова node,
# за которым следует селектор ноды — хостнейм (с доменом или без)
# или регулярное выражение для хостнеймов, или ключевое слово default.
#
# После этого в фигурных скобках описывается собственно конфигурация ноды.
#
# Одна и та же нода может попасть под несколько селекторов. Про приоритет
# селекторов написано в статье про синтаксис описания нод.
node 'hostname', 'f.q.d.n', /regexp/ {
  # Конфигурация по сути является перечислением ресурсов и их параметров.
  #
  # У каждого ресурса есть тип и название.
  #
  # Внимание: не может быть двух ресурсов одного типа с одинаковыми названиями!
  #
  # Описание ресурса начинается с его типа. Тип пишется в нижнем регистре.
  # Про разные типы ресурсов написано ниже.
  #
  # После типа в фигурных скобках пишется название ресурса, потом двоеточие,
  # дальше идёт опциональное перечисление параметров ресурса и их значений.
  # Значения параметров указываются через т.н. hash rocket (=>).
  resource { 'title':
    param1 => value1,
    param2 => value2,
    param3 => value3,
  }
}

Kulowera mkati ndi kuthyoka mizere si gawo lofunikira la chiwonetsero, koma pali zovomerezeka kalozera. Chidule:

  • Ma indents a danga, ma tabo sagwiritsidwa ntchito.
  • Zomangira zopindika zimalekanitsidwa ndi danga; ma colono sasiyanitsidwa ndi danga.
  • Koma pambuyo pa parameter iliyonse, kuphatikiza yomaliza. Parameter iliyonse ili pamzere wosiyana. Kupatulako kumapangidwira mlanduwo wopanda magawo ndi gawo limodzi: mutha kulemba pamzere umodzi komanso popanda koma (ie. resource { 'title': } и resource { 'title': param => value }).
  • Mivi pazigawo ziyenera kukhala pamlingo womwewo.
  • Mivi yokhudzana ndi zothandizira imalembedwa patsogolo pawo.

Malo amafayilo pa pappetserver

Kuti mumve zambiri, ndikuwonetsa lingaliro la "root directory". Chikwatu cha mizu ndi chikwatu chomwe chili ndi kasinthidwe ka Chidole cha node inayake.

Chikwatu cha mizu chimasiyanasiyana kutengera mtundu wa Chidole ndi malo omwe amagwiritsidwa ntchito. Madera ndi magulu odziyimira pawokha omwe amasungidwa m'madongosolo osiyanasiyana. Nthawi zambiri amagwiritsidwa ntchito kuphatikiza ndi git, pomwe malo amapangidwa kuchokera ku nthambi za git. Chifukwa chake, node iliyonse ili pamalo amodzi kapena ena. Izi zitha kukhazikitsidwa pa node yokha, kapena mu ENC, yomwe ndilankhula m'nkhani yotsatira.

  • Mu mtundu wachitatu ("Chidole chakale") buku loyambira linali /etc/puppet. Kugwiritsa ntchito malo ndikosankha - mwachitsanzo, sitimawagwiritsa ntchito ndi Chidole chakale. Ngati madera akugwiritsidwa ntchito, nthawi zambiri amasungidwa mkati /etc/puppet/environments, chikwatu cha mizu chidzakhala chikwatu cha chilengedwe. Ngati malo sagwiritsidwa ntchito, chikwatu cha mizu chidzakhala chikwatu choyambira.
  • Kuyambira pa mtundu wachinayi ("Chidole chatsopano"), kugwiritsa ntchito malo kudakhala kovomerezeka, ndipo zolemba zoyambira zidasunthidwa ku /etc/puppetlabs/code. Chifukwa chake, malo amasungidwa mkati /etc/puppetlabs/code/environments, chikwatu cha mizu ndi chikwatu cha chilengedwe.

Payenera kukhala subdirectory mu root directory manifests, yomwe ili ndi chiwonetsero chimodzi kapena zingapo zofotokozera mfundozo. Kuphatikiza apo, payenera kukhala subdirectory modules, yomwe ili ndi ma modules. Ndikuuzani ma modules pambuyo pake. Kuphatikiza apo, Chidole chakale chingakhalenso ndi subdirectory files, yomwe ili ndi mafayilo osiyanasiyana omwe timakopera ku node. Mu Chidole chatsopano, mafayilo onse amaikidwa m'ma module.

Mafayilo a Manifest ali ndi zowonjezera .pp.

Zitsanzo zingapo zankhondo

Kufotokozera za mfundo ndi zothandizira pa izo

Pa mfundo server1.testdomain fayilo iyenera kupangidwa /etc/issue ndi zomwe zili Debian GNU/Linux n l. Fayiloyo iyenera kukhala ya wogwiritsa ntchito ndi gulu root, ufulu wopeza uyenera kukhala 644.

Timalemba 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 в начале будет воспринято как записанное в восьмеричной системе, и всё пойдёт не так, как задумано
    }
}

Mgwirizano pakati pa zinthu pa node

Pa mfundo server2.testdomain nginx iyenera kukhala ikuyenda, ikugwira ntchito ndi kasinthidwe kokonzedwa kale.

Titha kuthetsa vutoli:

  • Phukusi liyenera kukhazikitsidwa nginx.
  • Ndikofunikira kuti mafayilo osinthika akopedwe kuchokera ku seva.
  • Service iyenera kuyendetsedwa nginx.
  • Ngati kasinthidwe kasinthidwa, ntchitoyo iyenera kuyambiranso.

Timalemba 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 получает уведомление,
  # соответствующий сервис перезапускается.
}

Kuti izi zitheke, mufunika pafupifupi malo otsatirawa a fayilo pa seva ya chidole:

/etc/puppetlabs/code/environments/production/ # (это для нового Паппета, для старого корневой директорией будет /etc/puppet)
├── manifests/
│   └── site.pp
└── modules/
    └── example/
        └── files/
            └── nginx-conf/
                ├── nginx.conf
                ├── mime.types
                └── conf.d/
                    └── some.conf

Mitundu Yothandizira

Mndandanda wathunthu wamitundu yothandizidwa ikhoza kupezeka apa mu zolembedwa, apa ndikufotokozerani mitundu isanu yofunikira, yomwe muzochita zanga ndi yokwanira kuthetsa mavuto ambiri.

Fayilo

Imawongolera mafayilo, maulalo, ma symlink, zomwe zili mkati mwake, ndi ufulu wofikira.

Magawo:

  • dzina lachinthu - njira yopita ku fayilo (posankha)
  • njira - njira yopita ku fayilo (ngati siyinatchulidwe m'dzina)
  • kuonetsetsa - mtundu wa fayilo:
    • absent - Chotsani fayilo
    • present - payenera kukhala fayilo yamtundu uliwonse (ngati palibe fayilo, fayilo yokhazikika idzapangidwa)
    • file - fayilo yanthawi zonse
    • directory - directory
    • link - symlink
  • okhutira - zomwe zili mufayilo (zoyenera mafayilo okhazikika, sizingagwiritsidwe ntchito limodzi ndi gwero kapena cholinga)
  • gwero - ulalo wanjira yomwe mukufuna kukopera zomwe zili mufayilo (sangagwiritsidwe ntchito limodzi ndi okhutira kapena cholinga). Itha kufotokozedwa ngati URI yokhala ndi chiwembu puppet: (ndiye mafayilo ochokera ku seva ya chidole adzagwiritsidwa ntchito), komanso ndi chiwembu http: (Ndikukhulupirira kuti zikuwonekeratu zomwe zidzachitike pankhaniyi), komanso ngakhale ndi chithunzi file: kapena ngati njira mtheradi popanda schema (ndiye fayilo yochokera ku FS yakomweko pa node idzagwiritsidwa ntchito)
  • cholinga - pomwe symlink iyenera kuloza (sangagwiritsidwe ntchito limodzi ndi okhutira kapena gwero)
  • mwini - wogwiritsa ntchito yemwe ayenera kukhala ndi fayilo
  • gulu - gulu lomwe fayilo iyenera kukhala
  • mode - zilolezo zamafayilo (monga chingwe)
  • kubweza - imathandizira kukonza chikwatu chobwerezabwereza
  • kuyeretsa - imathandizira kufufuta mafayilo omwe sanafotokozedwe mu Chidole
  • mphamvu - imathandizira kufufuta maukonde omwe sanafotokozedwe mu Chidole

Phukusi

Kukhazikitsa ndikuchotsa phukusi. Kutha kuthana ndi zidziwitso - kuyikanso phukusi ngati gawo latchulidwa reinstall_on_refresh.

Magawo:

  • dzina lachinthu - dzina la phukusi (ngati mukufuna)
  • dzina - dzina la phukusi (ngati silinatchulidwe m'dzina)
  • WOPEREKA - woyang'anira phukusi kuti agwiritse ntchito
  • kuonetsetsa - momwe phukusili likufunira:
    • present, installed - mtundu uliwonse waikidwa
    • latest - mtundu waposachedwa waikidwa
    • absent - kuchotsedwa (apt-get remove)
    • purged - zichotsedwa pamodzi ndi mafayilo osinthika (apt-get purge)
    • held - phukusi latsekedwa (apt-mark hold)
    • любая другая строка - mtundu wotchulidwawo wayikidwa
  • reinstall_on_refresh - ngati true, ndiye pakalandira zidziwitso phukusilo lidzabwezeretsedwanso. Zothandiza pamagawidwe otengera magwero, pomwe kukonzanso phukusi kungakhale kofunikira posintha magawo omanga. Zosasintha false.

utumiki

Amayang'anira ntchito. Kutha kukonza zidziwitso - kuyambiranso ntchito.

Magawo:

  • dzina lachinthu - ntchito yoyendetsedwa (ngati mukufuna)
  • dzina - ntchito yomwe ikuyenera kuyang'aniridwa (ngati siyinatchulidwe m'dzina)
  • kuonetsetsa - mkhalidwe womwe mukufuna:
    • running - anayambitsa
    • stopped - anaima
  • athe - amawongolera kuthekera koyambitsa ntchito:
    • true - autorun imayatsidwa (systemctl enable)
    • mask - obisika (systemctl mask)
    • false - autorun yayimitsidwa (systemctl disable)
  • yambitsaninso - lamula kuti muyambitsenso ntchito
  • kachirombo - Lamula kuti muwone momwe ntchito ikuyendera
  • yayambanso - onetsani ngati intscript yautumiki ikuthandizira kuyambitsanso. Ngati false ndipo parameter yafotokozedwa yambitsaninso - mtengo wa parameter iyi umagwiritsidwa ntchito. Ngati false ndi parameter yambitsaninso osatchulidwa - ntchitoyo imayimitsidwa ndikuyamba kuyambiranso (koma systemd imagwiritsa ntchito lamulo systemctl restart).
  • hasstatus - onetsani ngati intscript ya utumiki ikugwirizana ndi lamulo status. ngati false, ndiye mtengo wa parameter umagwiritsidwa ntchito kachirombo. Zosasintha true.

exec

Amayendetsa malamulo akunja. Ngati simutchula magawo amalenga, pokhapokha, kupatulapo kapena motsitsimula, lamuloli lidzayendetsedwa nthawi iliyonse Chidole chimayendetsedwa. Kutha kukonza zidziwitso - imayendetsa lamulo.

Magawo:

  • dzina lachinthu - lamulo loti aphedwe (posankha)
  • lamulo - lamulo loti liperekedwe (ngati silinatchulidwe m'dzina)
  • njira - Njira zomwe mungayang'anire fayilo yomwe ingathe kuchitika
  • pokhapokha - ngati lamulo lomwe lafotokozedwa mu parameter iyi limalizidwa ndi nambala yobwerera zero, lamulo lalikulu lidzaperekedwa
  • kupatulapo - ngati lamulo lomwe lafotokozedwa mu parameter iyi litamalizidwa ndi nambala yobwereza yopanda zero, lamulo lalikulu lidzaperekedwa
  • amalenga - ngati fayilo yotchulidwa mu parameter iyi palibe, lamulo lalikulu lidzaperekedwa
  • motsitsimula - ngati true, ndiye kuti lamulo lidzayendetsedwa pokhapokha ngati exec ilandila zidziwitso kuchokera kuzinthu zina
  • cwd - chikwatu momwe mungayendetsere lamulo
  • wosuta - wogwiritsa ntchito yemwe amayendetsa lamulo
  • WOPEREKA - momwe mungayendetsere lamulo:
    • zovuta - ndondomeko ya mwana imangopangidwa, onetsetsani kuti mwatchulapo njira
    • chipolopolo - lamulo limayambitsidwa mu chipolopolo /bin/sh, sizingatchulidwe njira, mungagwiritse ntchito globbing, mapaipi ndi zina zipolopolo. Nthawi zambiri zimadziwika zokha ngati pali zilembo zapadera (|, ;, &&, || ndi zina zotero).

cron

Amawongolera ma cronjobs.

Magawo:

  • dzina lachinthu - chizindikiritso chamtundu wina chabe
  • kuonetsetsa - korona Job state:
    • present - pangani ngati kulibe
    • absent - chotsani ngati alipo
  • lamulo - lamulo loti muthamangire
  • environment - malo omwe mungayendetsere lamulo (mndandanda wazosintha zachilengedwe ndi zomwe zimafunikira kudzera =)
  • wosuta - kuchokera kwa wogwiritsa ntchito kuti ayendetse lamulo
  • miniti, Ora, sabata, Mwezi, mwezi - nthawi yoti muyendetse cron. Ngati chimodzi mwazinthuzi sichinatchulidwe, mtengo wake mu crontab udzakhala *.

Mu Chidole 6.0 cron ngati kuchotsedwa m'bokosi mu puppetserver, kotero palibe zolembedwa patsamba lonse. Koma iye ali mu bokosi mu chidole-chothandizira, kotero palibe chifukwa choyiyika padera. Mutha kuwona zolemba zake m'zolembedwa za mtundu wachisanu wa Chidole, kapena pa GitHub.

Za chuma chonse

Zofunikira pakusiyana kwazinthu

Cholakwika chofala chomwe timakumana nacho ndi Chidziwitso chobwereza. Cholakwika ichi chimachitika pamene zida ziwiri kapena zingapo zamtundu womwewo wokhala ndi dzina lomwelo zikuwonekera m'ndandanda.

Chifukwa chake ndilembanso: ziwonetsero za mfundo zomwezo siziyenera kukhala ndi zinthu zamtundu womwewo wokhala ndi mutu womwewo!

Nthawi zina pamafunika kukhazikitsa mapaketi okhala ndi dzina lomwelo, koma ndi oyang'anira phukusi osiyanasiyana. Pankhaniyi, muyenera kugwiritsa ntchito parameter namekupewa cholakwika:

package { 'ruby-mysql':
  ensure   => installed,
  name     => 'mysql',
  provider => 'gem',
}
package { 'python-mysql':
  ensure   => installed,
  name     => 'mysql',
  provider => 'pip',
}

Mitundu ina yazinthu ili ndi njira zofananira zomwe zingathandize kupewa kubwereza - name у utumiki, command у exec, ndi zina zotero.

Metaparameters

Mtundu uliwonse wazinthu uli ndi magawo apadera, mosasamala kanthu za chikhalidwe chake.

Mndandanda wathunthu wa magawo a meta mu zolemba za Puppet.

Mndandanda wachidule:

  • amafuna - chizindikiro ichi chikuwonetsa kuti ndi zinthu ziti zomwe zimadalira.
  • pamaso - Gawoli limafotokoza kuti ndi zinthu ziti zomwe zimadalira chida ichi.
  • Tumizani - chizindikiro ichi chimanena za zomwe chida ichi chimalandira zidziwitso.
  • dziwitsa - Gawoli limatchula zinthu zomwe zimalandira zidziwitso kuchokera kuzinthu izi.

Ma metaparameter onse omwe atchulidwawa amavomereza ulalo umodzi wazinthu kapena maulalo angapo m'mabulaketi akuluakulu.

Maulalo kuzinthu

Ulalo wothandizira ndikungotchula za gwero. Amagwiritsidwa ntchito makamaka kusonyeza kudalira. Kulozera chinthu chomwe sichinakhalepo kungayambitse cholakwika chophatikiza.

Mafotokozedwe a ulalo ali motere: mtundu wazinthu wokhala ndi chilembo chachikulu (ngati dzina lamtunduwu lili ndi ma coloni awiri, ndiye kuti gawo lililonse la dzina pakati pa ma coloni limakhala ndi zilembo zazikulu), ndiye dzina lachidziwitso m'mabulaketi akulu (nthawi ya dzinalo). sichisintha!). Pasakhale mipata; mabulaketi masikweya amalembedwa nthawi yomweyo dzina la mtunduwo.

Chitsanzo:

file { '/file1': ensure => present }
file { '/file2':
  ensure => directory,
  before => File['/file1'],
}
file { '/file3': ensure => absent }
File['/file1'] -> File['/file3']

Zodalira ndi zidziwitso

Zolemba pano.

Monga tanenera kale, kudalirana kosavuta pakati pa zothandizira ndikusintha. Mwa njira, samalani powonjezera zodalira - mutha kupanga kudalira kwa cyclic, zomwe zingayambitse cholakwika chophatikiza.

Mosiyana ndi zodalira, zidziwitso sizisintha. Malamulo otsatirawa amagwira ntchito pazidziwitso:

  • Ngati chothandizira chilandira chidziwitso, chimasinthidwa. Zochita zosinthidwa zimatengera mtundu wazinthu - exec amayendetsa lamulo, utumiki kuyambitsanso ntchito, Phukusi imakhazikitsanso phukusi. Ngati gwero lilibe zosintha zomwe zafotokozedwa, ndiye kuti palibe chomwe chimachitika.
  • Pakuthamanga kumodzi kwa Chidole, gwerolo limasinthidwa mosapitilira kamodzi. Izi ndizotheka chifukwa zidziwitso zimaphatikizapo kudalira komanso graph yodalira ilibe mikombero.
  • Ngati Chidole chikusintha momwe zinthu ziliri, gwerolo limatumiza zidziwitso kuzinthu zonse zomwe zidalembetsedwa.
  • Ngati gwero lasinthidwa, limatumiza zidziwitso kuzinthu zonse zomwe zalembedwera.

Kusamalira magawo osadziwika

Monga lamulo, ngati chinthu china chothandizira chilibe mtengo wokhazikika ndipo chizindikirochi sichinatchulidwe mu chiwonetsero, ndiye Chidole sichidzasintha malowa kuti agwirizane ndi mfundoyi. Mwachitsanzo, ngati gwero la mtundu Fayilo parameter sanatchulidwe owner, ndiye Chidole sichidzasintha mwiniwake wa fayilo yofananira.

Chiyambi cha makalasi, zosinthika ndi matanthauzo

Tiyerekeze kuti tili ndi ma node angapo omwe ali ndi gawo lomwelo la kasinthidwe, koma palinso kusiyana - apo ayi tikhoza kufotokoza zonse mu block imodzi. node {}. Zachidziwikire, mutha kungotengera magawo ofanana a kasinthidwe, koma nthawi zambiri iyi ndi yankho loyipa - kasinthidwe kakukula, ndipo ngati musintha gawo lonse la kasinthidwe, muyenera kusintha zomwezo m'malo ambiri. Panthawi imodzimodziyo, n'zosavuta kulakwitsa, ndipo kawirikawiri, mfundo ya DRY (musabwereze) idapangidwa pazifukwa.

Kuti athetse vutoli pali mapangidwe monga класс.

Makalasi

Kalasi ndi block block ya poppet code. Maphunziro amafunikira kuti mugwiritsenso ntchito code.

Choyamba kalasi iyenera kufotokozedwa. Kufotokozera komweko sikumawonjezera zothandizira kulikonse. Kalasiyo ikufotokozedwa m'mawonekedwe:

# Описание класса начинается с ключевого слова class и его названия.
# Дальше идёт тело класса в фигурных скобках.
class example_class {
    ...
}

Pambuyo pake, kalasi ikhoza kugwiritsidwa ntchito:

# первый вариант использования — в стиле ресурса с типом class
class { 'example_class': }
# второй вариант использования — с помощью функции include
include example_class
# про отличие этих двух вариантов будет рассказано дальше

Chitsanzo cha ntchito yapitayi - tiyeni tisunthire kuyika ndi kasinthidwe ka nginx m'kalasi:

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
}

Zosintha

Kalasi yachitsanzo cham'mbuyomu sichisinthika konse chifukwa nthawi zonse imabweretsa masinthidwe ofanana a nginx. Tiyeni tipange njira yosinthira masinthidwe, ndiye kuti kalasi iyi itha kugwiritsidwa ntchito kukhazikitsa nginx ndi kasinthidwe kalikonse.

Zitha kuchitika pogwiritsa ntchito zosintha.

Chidziwitso: zosinthika mu Chidole sizisintha!

Kuonjezera apo, kusinthika kungathe kupezedwa pokhapokha atalengezedwa, mwinamwake mtengo wa kusintha udzakhala undef.

Chitsanzo chogwiritsa ntchito zinthu zosiyanasiyana:

# создание переменных
$variable = 'value'
$var2 = 1
$var3 = true
$var4 = undef
# использование переменных
$var5 = $var6
file { '/tmp/text': content => $variable }
# интерполяция переменных — раскрытие значения переменных в строках. Работает только в двойных кавычках!
$var6 = "Variable with name variable has value ${variable}"

Chidole chatero malo a mayina, ndipo zosinthika, motero, zili nazo malo owonekera: Kusintha komwe kuli ndi dzina lomweli kumatha kufotokozedwa m'malo osiyanasiyana. Pothetsa mtengo wa kusintha, kusinthako kumafufuzidwa mu malo omwe alipo panopa, ndiyeno mu malo otsekedwa, ndi zina zotero.

Zitsanzo zamalo a mayina:

  • zapadziko lonse lapansi - zosinthika kunja kwa kalasi kapena mafotokozedwe a node amapita pamenepo;
  • node namespace mu kufotokozera mfundo;
  • kalasi namespace mu kufotokozera kalasi.

Kuti mupewe kumveka bwino mukapeza zosinthika, mutha kufotokozera dzina la dzinalo mu dzina losinthika:

# переменная без пространства имён
$var
# переменная в глобальном пространстве имён
$::var
# переменная в пространстве имён класса
$classname::var
$::classname::var

Tiyeni tivomereze kuti njira yopita ku kasinthidwe ka nginx ili pakusintha $nginx_conf_source. Ndiye kalasi idzawoneka motere:

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
}

Komabe, chitsanzo choperekedwacho ndi choipa chifukwa pali "chidziwitso chachinsinsi" kuti penapake mkati mwa kalasi kusinthana ndi dzina lotere ndi lotere limagwiritsidwa ntchito. Ndizolondola kwambiri kupanga chidziwitsochi kukhala chodziwika bwino - makalasi amatha kukhala ndi magawo.

Class magawo ndi zosinthika m'malo a mayina a kalasi, zimatchulidwa pamutu wa kalasi ndipo zitha kugwiritsidwa ntchito ngati zosinthika nthawi zonse m'gulu la kalasi. Miyezo ya parameter imafotokozedwa mukamagwiritsa ntchito kalasi mu manifesto.

Parameter ikhoza kukhazikitsidwa ku mtengo wokhazikika. Ngati parameter ilibe mtengo wokhazikika ndipo mtengowo sunakhazikitsidwe ukagwiritsidwa ntchito, umayambitsa cholakwika chophatikiza.

Tiyeni tiyike kalasi kuchokera ku chitsanzo pamwambapa ndikuwonjezera magawo awiri: yoyamba, yofunikira, ndiyo njira yosinthira, ndipo yachiwiri, yosankha, ndi dzina la phukusi ndi nginx (mu Debian, mwachitsanzo, pali phukusi. 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',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

Mu Chidole, zosintha zimatayidwa. Idyani mitundu yambiri ya data. Mitundu ya data nthawi zambiri imagwiritsidwa ntchito kutsimikizira zomwe zimaperekedwa kumakalasi ndi matanthauzidwe. Ngati gawo lomwe ladutsa silikugwirizana ndi mtundu womwe watchulidwa, cholakwika chophatikiza chimachitika.

Mtunduwu umalembedwa nthawi yomweyo dzina la parameter lisanachitike:

class example (
  String $param1,
  Integer $param2,
  Array $param3,
  Hash $param4,
  Hash[String, String] $param5,
) {
  ...
}

Makalasi: phatikizani dzina lakalasi ndi kalasi{'classname':}

Kalasi iliyonse ndi gwero la mtundu kalasi. Monga momwe zilili ndi mtundu wina uliwonse wazinthu, sipangakhale zochitika ziwiri za gulu limodzi pa mfundo imodzi.

Ngati muyesa kuwonjezera kalasi ku mfundo yomweyo kawiri pogwiritsa ntchito class { 'classname':} (palibe kusiyana, ndi magawo osiyanasiyana kapena ofanana), padzakhala cholakwika chophatikiza. Koma ngati mugwiritsa ntchito kalasi mumayendedwe azinthu, mutha kuyika mwachangu magawo ake onse mu chiwonetsero.

Komabe, ngati mugwiritsa ntchito include, ndiye kuti kalasiyo ikhoza kuwonjezeredwa nthawi zambiri momwe mukufunira. Zoona zake n’zakuti include ndi ntchito yopanda pake yomwe imayang'ana ngati kalasi yawonjezedwa pamndandanda. Ngati kalasiyo ilibe m'ndandanda, imawonjezera, ndipo ngati ilipo kale, sichita kanthu. Koma pakugwiritsa ntchito include Simungakhazikitse magawo amkalasi panthawi yolengeza kalasi - magawo onse ofunikira ayenera kukhazikitsidwa mumtundu wakunja wa data - Hiera kapena ENC. Tidzakambirana za iwo m’nkhani yotsatira.

Amatanthauzira

Monga zidanenedwa mu block yapitayi, kalasi lomwelo silingakhalepo pa node kangapo. Komabe, nthawi zina muyenera kugwiritsa ntchito code yomweyi yokhala ndi magawo osiyanasiyana pamfundo imodzi. Mwa kuyankhula kwina, pakufunika mtundu wazinthu zomwezo.

Mwachitsanzo, kuti tiyike gawo la PHP, timachita izi mu Avito:

  1. Ikani phukusi ndi gawoli.
  2. Tiyeni tipange fayilo yosinthira gawoli.
  3. Timapanga symlink ku config kwa php-fpm.
  4. Timapanga symlink ku config kwa php cli.

Zikatero, kapangidwe monga fotokozani (tanthauzira, mtundu wofotokozedwa, mtundu wazinthu zofotokozera). A Define ndi ofanana ndi kalasi, koma pali kusiyana: choyamba, Define iliyonse ndi mtundu wazinthu, osati gwero; chachiwiri, tanthauzo lililonse lili ndi chizindikiro chodziwika $title, komwe dzina lachidziwitso limapita likalengezedwa. Monga momwe zimakhalira ndi makalasi, tanthauzo liyenera kufotokozedwa poyamba, pambuyo pake lingagwiritsidwe ntchito.

Chitsanzo chosavuta chokhala ndi gawo la 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' }
}

Njira yosavuta yopezera cholakwika cha Duplicate declaration ndi Define. Izi zimachitika ngati tanthauzo liri ndi gwero lokhala ndi dzina lokhazikika, ndipo pali zochitika ziwiri kapena zingapo za tanthauzo ili pamfundo ina.

Ndizosavuta kudziteteza ku izi: zida zonse mkati mwa tanthauzo ziyenera kukhala ndi dzina kutengera $title. Njira ina ndikuwonjezera zinthu zopanda pake; munjira yosavuta, ndikokwanira kusuntha zinthu zomwe zimafanana ndi nthawi zonse zatanthauzo kukhala gulu lapadera ndikuphatikiza kalasi iyi mu tanthauzo - ntchito. include wopanda nzeru.

Palinso njira zina zopezera chidziwitso pakuwonjezera zinthu, zomwe ndikugwiritsa ntchito ntchito defined и ensure_resources, koma ndikuuzani mu gawo lotsatira.

Kudalira ndi zidziwitso zamakalasi ndi matanthauzo

Makalasi ndi matanthauzo amawonjezera malamulo otsatirawa pakuchita zodalira ndi zidziwitso:

  • kudalira kalasi / kufotokozera kumawonjezera kudalira pazinthu zonse za kalasi / kufotokozera;
  • kalasi / kufotokozera kudalira kumawonjezera kudalira kumagulu onse / kutanthauzira zofunikira;
  • class/define notification amadziwitsa zonse za kalasi/matanthauzo;
  • class/define subscription amalembetsa kuzinthu zonse za kalasi/define.

Mawu okhazikika ndi osankhidwa

Zolemba pano.

if

Ndizosavuta apa:

if ВЫРАЖЕНИЕ1 {
  ...
} elsif ВЫРАЖЕНИЕ2 {
  ...
} else {
  ...
}

kupatulapo

Pokhapokha ngati n'zosiyana: chipika cha code chidzachitidwa ngati mawuwo ndi abodza.

unless ВЫРАЖЕНИЕ {
  ...
}

choncho

Palibenso chovuta apa. Mutha kugwiritsa ntchito zikhalidwe zanthawi zonse (zingwe, manambala, ndi zina), mawu okhazikika, ndi mitundu ya data ngati ma mtengo.

case ВЫРАЖЕНИЕ {
  ЗНАЧЕНИЕ1: { ... }
  ЗНАЧЕНИЕ2, ЗНАЧЕНИЕ3: { ... }
  default: { ... }
}

Osankha

Chosankha ndi chilankhulidwe chofanana ndi case, koma m'malo mochita chipika cha code, imabweretsa mtengo.

$var = $othervar ? { 'val1' => 1, 'val2' => 2, default => 3 }

Ma module

Kusinthako kukakhala kochepa, kumatha kusungidwa mosavuta mu chiwonetsero chimodzi. Koma masanjidwe ambiri omwe timafotokozera, makalasi ndi ma node ambiri amakhala mu chiwonetserochi, chimakula, ndipo zimakhala zovuta kugwira nawo ntchito.

Kuonjezera apo, pali vuto la kugwiritsanso ntchito kachidindo - pamene code yonse ili mu chiwonetsero chimodzi, zimakhala zovuta kugawana code iyi ndi ena. Pofuna kuthetsa mavuto awiriwa, Chidole chili ndi chinthu chotchedwa ma modules.

Ma module - awa ndi magulu a makalasi, matanthauzo ndi zinthu zina za Zidole zomwe zayikidwa mu bukhu losiyana. Mwanjira ina, gawo ndi gawo lodziyimira pawokha la malingaliro a Chidole. Mwachitsanzo, pakhoza kukhala gawo logwirira ntchito ndi nginx, ndipo lidzakhala ndi zomwe zimafunikira kuti mugwire ntchito ndi nginx, kapena pangakhale gawo logwirira ntchito ndi PHP, ndi zina zotero.

Ma module amasinthidwa, ndipo kudalira kwa ma module pa wina ndi mzake kumathandizidwanso. Pali malo otseguka a ma module - Chidole Forge.

Pa seva ya chidole, ma modules ali mu subdirectory ya modules ya root directory. M'kati mwa gawo lililonse pali ndondomeko yokhazikika - mawonetseredwe, mafayilo, ma templates, lib, ndi zina zotero.

Mapangidwe a fayilo mu module

Muzu wa gawoli ukhoza kukhala ndi zolemba zotsatirazi zokhala ndi mayina ofotokozera:

  • manifests - ili ndi ma manifesto
  • files - ili ndi mafayilo
  • templates - ili ndi ma templates
  • lib - ili ndi Ruby code

Uwu si mndandanda wathunthu wamakanema ndi mafayilo, koma ndizokwanira pankhaniyi pakadali pano.

Maina azinthu ndi mayina a mafayilo omwe ali mugawoli

Zolemba pano.

Zida (makalasi, matanthauzo) mu gawo silingatchulidwe momwe mungafune. Kuphatikiza apo, pali kulumikizana kwachindunji pakati pa dzina lachidziwitso ndi dzina la fayilo momwe Chidole chidzayang'ana kufotokozera zachinthucho. Ngati muphwanya malamulo otchulira mayina, ndiye kuti Chidole sichipeza malongosoledwe azinthu, ndipo mupeza cholakwika chophatikiza.

Malamulowo ndi osavuta:

  • Zothandizira zonse mu module ziyenera kukhala mu gawo la mayina. Ngati module imatchedwa foo, ndiye zonse zomwe zilimo ziyenera kutchulidwa foo::<anything>, kapena basi foo.
  • Zomwe zili ndi dzina la module ziyenera kukhala mufayilo init.pp.
  • Pazinthu zina, chiwembu cha mayina a fayilo ndi awa:
    • choyambirira chokhala ndi dzina la module chimatayidwa
    • matumbo onse aŵiri, ngati alipo, amasinthidwa ndi kukwapula
    • chowonjezera chinawonjezeredwa .pp

Ndikuwonetsa ndi chitsanzo. Tinene kuti ndikulemba gawo nginx. Lili ndi zinthu zotsatirazi:

  • класс nginx zofotokozedwa mu chiwonetsero init.pp;
  • класс nginx::service zofotokozedwa mu chiwonetsero service.pp;
  • fotokozani nginx::server zofotokozedwa mu chiwonetsero server.pp;
  • fotokozani nginx::server::location zofotokozedwa mu chiwonetsero server/location.pp.

Mapangidwe

Ndithudi inu nokha mukudziwa zomwe ma templates ali; Sindifotokoza mwatsatanetsatane apa. Koma ndisiya kutero kulumikizana ndi Wikipedia.

Momwe mungagwiritsire ntchito ma templates: Tanthauzo la template likhoza kukulitsidwa pogwiritsa ntchito ntchito template, yomwe imadutsa njira yopita ku template. Kwa zida zamtundu Fayilo amagwiritsidwa ntchito limodzi ndi parameter content. Mwachitsanzo, monga chonchi:

file { '/tmp/example': content => template('modulename/templatename.erb')

Onani njira <modulename>/<filename> amatanthauza fayilo <rootdir>/modules/<modulename>/templates/<filename>.

Kuphatikiza apo, pali ntchito inline_template - imalandila zolemba za template ngati zolowetsa, osati dzina lafayilo.

Mkati mwa ma templates, mutha kugwiritsa ntchito mitundu yonse ya Zidole zomwe zili pakali pano.

Chidole chimathandizira ma tempuleti mumtundu wa ERB ndi EPP:

Mwachidule za ERB

Zowongolera:

  • <%= ВЫРАЖЕНИЕ %> - lowetsani mtengo wa mawuwo
  • <% ВЫРАЖЕНИЕ %> - kuwerengera mtengo wa mawu (popanda kuyikapo). Mawu okhazikika (ngati) ndi malupu (aliyense) amapita apa.
  • <%# КОММЕНТАРИЙ %>

Mawu mu ERB amalembedwa mu Ruby (ERB kwenikweni Embedded Ruby).

Kuti mupeze zosintha kuchokera ku manifesto, muyenera kuwonjezera @ ku dzina losinthika. Kuti muchotse mzere womwe umawonekera pambuyo pomanga olamulira, muyenera kugwiritsa ntchito chizindikiro chotseka -%>.

Chitsanzo chogwiritsa ntchito template

Tinene kuti ndikulemba gawo lowongolera ZooKeeper. Kalasi yomwe ili ndi udindo wopanga config ikuwoneka motere:

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'),
  }
}

Ndipo template yogwirizana zoo.cfg.erb - Ndiye:

<% 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 -%>

Zowona ndi Zosintha Zomangidwa

Nthawi zambiri gawo lenileni la kasinthidwe limadalira zomwe zikuchitika pa node. Mwachitsanzo, kutengera kutulutsidwa kwa Debian, muyenera kukhazikitsa mtundu umodzi kapena wina wa phukusi. Mutha kuyang'anira zonsezi pamanja, kulembanso kumawonekera ngati ma node asintha. Koma iyi si njira yayikulu; automation ndiyabwinoko.

Kuti mudziwe zambiri za node, Chidole chili ndi njira yotchedwa mfundo. Zambiri - ichi ndi chidziwitso chokhudza node, yomwe imapezeka m'mawonekedwe amtundu wamba wapadziko lonse lapansi. Mwachitsanzo, dzina la alendo, mtundu wa opareshoni, kamangidwe ka purosesa, mndandanda wa ogwiritsa ntchito, mndandanda wamalo ochezera a pa intaneti ndi ma adilesi awo, ndi zina zambiri. Zowona zimapezeka m'mawonekedwe ndi ma templates ngati zosinthika nthawi zonse.

Chitsanzo cha ntchito ndi mfundo:

notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# ресурс типа notify просто выводит сообщение в лог

Kunena zowona, chowonadi chili ndi dzina (chingwe) ndi mtengo (mitundu yosiyanasiyana ilipo: zingwe, magulu, madikishonale). Idyani mndandanda wa mfundo zomangidwa. Mukhozanso kulemba zanu. Osonkhanitsa mfundo akufotokozedwa monga ntchito mu Rubyngakhale monga mafayilo osinthika. Mfundo zikhoza kufotokozedwanso mu fomu zolemba mafayilo okhala ndi data pa nodes.

Panthawi yogwira ntchito, wothandizira zidole amayamba kukopera zosonkhanitsa zonse zomwe zilipo kuchokera pa pappetserver kupita ku node, pambuyo pake amaziyambitsa ndikutumiza zomwe zasonkhanitsidwa kwa seva; Pambuyo pake, seva imayamba kupanga catalog.

Zowona mu mawonekedwe a mafayilo omwe angathe kukwaniritsidwa

Mfundo zotere zimayikidwa mu ma modules mu bukhuli facts.d. Zachidziwikire, mafayilo ayenera kuchitidwa. Akathamanga, amayenera kutulutsa zidziwitso ku zotulutsa zokhazikika mu YAML kapena key=value format.

Musaiwale kuti zowona zimagwira ntchito pama node onse omwe amayendetsedwa ndi seva ya poppet komwe gawo lanu limatumizidwa. Chifukwa chake, mu script, samalani kuti muwone ngati pulogalamuyo ili ndi mapulogalamu onse ndi mafayilo ofunikira kuti mfundo yanu igwire ntchito.

#!/bin/sh
echo "testfact=success"
#!/bin/sh
echo '{"testyamlfact":"success"}'

Ruby mfundo

Mfundo zotere zimayikidwa mu ma modules mu bukhuli 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

Mfundo za m’malemba

Mfundo zotere zimayikidwa pa mfundo mu bukhuli /etc/facter/facts.d mu Chidole chakale kapena /etc/puppetlabs/facts.d mu Chidole chatsopano.

examplefact=examplevalue
---
examplefact2: examplevalue2
anotherfact: anothervalue

Kufika ku Zoonadi

Pali njira ziwiri zowonera zowona:

  • kudzera mu dikishonale $facts: $facts['fqdn'];
  • kugwiritsa ntchito dzina lenileni ngati dzina losinthika: $fqdn.

Ndi bwino kugwiritsa ntchito mtanthauzira mawu $facts, kapena ngakhale bwino, sonyezani malo apadziko lonse lapansi ($::facts).

Nali gawo loyenera la zolembedwa.

Zosintha zomangidwa

Kupatulapo zowona, palinso zosintha zina, yomwe ikupezeka padziko lonse lapansi.

  • mfundo zodalirika - zosinthika zomwe zimatengedwa kuchokera ku satifiketi ya kasitomala (popeza satifiketiyo nthawi zambiri imaperekedwa pa seva ya poppet, wothandizira sangangotenga ndikusintha satifiketi yake, kotero zosinthazo ndi "zodalirika"): dzina la satifiketi, dzina la host ndi domain, zowonjezera kuchokera ku satifiketi.
  • zowona za seva -zosintha zokhudzana ndi chidziwitso cha seva-mtundu, dzina, adilesi ya IP ya seva, chilengedwe.
  • zowona za agent - zosinthika zomwe zimawonjezedwa mwachindunji ndi wothandizila zidole, osati ndi zenizeni - dzina la satifiketi, mtundu wa wothandizira, mtundu wa zidole.
  • master variables - Zosintha za Pappetmaster (sic!). Zili zofanana ndi in zowona za seva, kuphatikiza masinthidwe a parameter akupezeka.
  • zosintha za compiler - zosintha za compiler zomwe zimasiyana pamlingo uliwonse: dzina la gawo lomwe lilipo komanso dzina la gawo lomwe chinthu chapano chidapezeka. Zitha kugwiritsidwa ntchito, mwachitsanzo, kuti muwone ngati makalasi anu achinsinsi sakugwiritsidwa ntchito mwachindunji kuchokera ku ma module ena.

Zowonjezera 1: momwe mungayendetsere ndikuwongolera zonsezi?

Nkhaniyi inali ndi zitsanzo zambiri za zidole, koma sizinatiuze konse momwe tingayendetsere kachidindo kameneka. Chabwino, ndikudzikonza ndekha.

Wothandizira ndi wokwanira kuyendetsa Chidole, koma nthawi zambiri mudzafunikanso seva.

Agent

Osachepera kuyambira mtundu XNUMX, phukusi la zidole lochokera malo ovomerezeka a Puppetlabs zili ndi zodalira zonse (ruby ndi miyala yamtengo wapatali yofananira), kotero palibe zovuta zoikamo (ndikulankhula za magawo a Debian - sitigwiritsa ntchito magawo a RPM).

Muzosavuta kwambiri, kugwiritsa ntchito kasinthidwe ka chidole, ndikokwanira kuyambitsa wothandizirayo mumayendedwe opanda seva: bola ngati code ya chidole imakopera ku node, kuyambitsa. 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

Ndikwabwino, inde, kukhazikitsa seva ndikuyendetsa othandizira pa node mumayendedwe a daemon - ndiye kamodzi pa theka la ola adzagwiritsa ntchito kasinthidwe kotsitsidwa kuchokera pa seva.

Mutha kutsanzira chitsanzo chokankhira ntchito - pitani ku mfundo yomwe mukufuna ndikuyamba sudo puppet agent -t. Chinsinsi -t (--test) imaphatikizapo zosankha zingapo zomwe zitha kuyatsidwa payekhapayekha. Zosankha izi zikuphatikiza izi:

  • osathamanga mumayendedwe a daemon (mwachisawawa wothandizira akuyamba mumayendedwe a daemon);
  • kutseka mutatha kugwiritsa ntchito kabukhulo (mwachisawawa, wothandizira adzapitiriza kugwira ntchito ndikugwiritsa ntchito kasinthidwe kamodzi pa theka la ola);
  • lembani chipika chatsatanetsatane cha ntchito;
  • onetsani zosintha zamafayilo.

Wothandizira ali ndi njira yogwiritsira ntchito popanda kusintha - mungagwiritse ntchito pamene simukutsimikiza kuti mwalemba ndondomeko yoyenera ndipo mukufuna kufufuza zomwe wothandizilayo angasinthe panthawi ya ntchito. Njirayi imathandizidwa ndi parameter --noop pamzere wolamula: sudo puppet agent -t --noop.

Kuphatikiza apo, mutha kuloleza chipika chowongolera ntchitoyo - momwemo, chidole chimalemba zonse zomwe amachita: zazinthu zomwe zikukonzedwa pano, za magawo azinthu izi, za mapulogalamu omwe amayambitsa. Inde, iyi ndi parameter --debug.

Seva

Sindingaganizire kukhazikitsidwa kwathunthu kwa pappetserver ndikuyika kachidindo m'nkhaniyi; Ndingonena kuti m'bokosilo pali mawonekedwe athunthu a seva omwe safuna kusinthidwa kowonjezera kuti agwire ntchito ndi ochepa. nodes (titi, mpaka zana). Chiwerengero chokulirapo cha node chidzafunika kukonza - mwachisawawa, puppetserver imayamba osapitilira antchito anayi, kuti mugwire ntchito yayikulu muyenera kuwonjezera chiwerengero chawo ndipo musaiwale kuwonjezera malire a kukumbukira, apo ayi seva idzasonkhanitsa zinyalala nthawi zambiri.

Kuyika ma code - ngati mukuyifuna mwachangu komanso mosavuta, yang'anani (pa r10k)[https://github.com/puppetlabs/r10k], pamakhazikitsidwe ang'onoang'ono ayenera kukhala okwanira.

Zowonjezera 2: Maupangiri a Coding

  1. Ikani malingaliro onse m'makalasi ndi matanthauzo.
  2. Sungani makalasi ndi matanthauzidwe mu ma module, osati m'mawonekedwe ofotokozera mfundo.
  3. Gwiritsani ntchito mfundo zake.
  4. Osapanga ma ifs potengera mayina a alendo.
  5. Khalani omasuka kuwonjezera magawo a makalasi ndi matanthauzidwe - izi ndizabwino kuposa malingaliro osamveka bwino obisika m'gulu la kalasi / kufotokozera.

Ndifotokoza chifukwa chake ndikupangira izi m'nkhani yotsatira.

Pomaliza

Tiyeni timalize ndi mawu oyamba. M'nkhani yotsatira ndikuuzani za Hiera, ENC ndi PuppetDB.

Ogwiritsa ntchito olembetsedwa okha ndi omwe angatenge nawo gawo pa kafukufukuyu. Lowani muakauntichonde.

M'malo mwake, pali zambiri - nditha kulemba zolemba pamitu yotsatirayi, kuvota pazomwe mungakonde kuwerenga:

  • 59,1%Kupanga zidole zapamwamba - zoyipa zapanthawi ina: malupu, kupanga mapu ndi mawu ena a lambda, otolera zinthu, zinthu zotumizidwa kunja ndi kulumikizana kwapakati kudzera pa Zidole, ma tag, opereka, mitundu ya data.13
  • 31,8%"Ndine woyang'anira amayi anga" kapena momwe ife ku Avito tinapanga mabwenzi ndi ma seva angapo a poppet amitundu yosiyanasiyana, ndipo, makamaka, gawo la kuyang'anira seva ya poppet.7
  • 81,8%Momwe timalembera khodi ya chidole: zida, zolemba, kuyesa, CI/CD.18

Ogwiritsa ntchito 22 adavota. Ogwiritsa 9 adakana.

Source: www.habr.com