Ifihan to Puppet

Puppet jẹ eto iṣakoso iṣeto. O ti wa ni lo lati mu ogun si awọn ti o fẹ ipinle ati ki o bojuto yi ipinle.

Mo ti n ṣiṣẹ pẹlu Puppet fun ọdun marun bayi. Ọrọ yii jẹ itumọ ni pataki kan ti a tumọ ati atunto akojọpọ awọn aaye pataki lati inu iwe aṣẹ, eyiti yoo gba awọn olubere laaye lati ni oye pataki ti Puppet.

Ifihan to Puppet

Alaye ipilẹ

Eto iṣẹ ṣiṣe Puppet jẹ olupin-olupin, botilẹjẹpe o tun ṣe atilẹyin iṣẹ aisi olupin pẹlu iṣẹ ṣiṣe to lopin.

Awoṣe iṣẹ fa ti a lo: nipasẹ aiyipada, lẹẹkan ni gbogbo idaji wakati, awọn alabara kan si olupin fun iṣeto kan ati lo. Ti o ba ti ṣiṣẹ pẹlu Ansible, lẹhinna wọn lo awoṣe titari ti o yatọ: olutọju naa bẹrẹ ilana ti lilo iṣeto ni, awọn alabara funrararẹ kii yoo lo ohunkohun.

Lakoko ibaraẹnisọrọ nẹtiwọọki, fifi ẹnọ kọ nkan TLS ọna meji ni a lo: olupin ati alabara ni awọn bọtini ikọkọ tiwọn ati awọn iwe-ẹri ti o baamu. Ni igbagbogbo olupin n fun awọn iwe-ẹri fun awọn alabara, ṣugbọn ni ipilẹ o ṣee ṣe lati lo CA ita.

Ifihan si manifestos

Ni Puppet terminology si olupin puppet sopọ apa (awọn apa). Iṣeto ni fun awọn apa ti kọ ninu awọn manifestos ni ede siseto pataki - Puppet DSL.

Puppet DSL jẹ ede asọye. O ṣe apejuwe ipo ti o fẹ ti ipade ni irisi awọn ikede ti awọn orisun kọọkan, fun apẹẹrẹ:

  • Faili naa wa ati pe o ni akoonu kan pato.
  • Ti fi sori ẹrọ package naa.
  • Iṣẹ naa ti bẹrẹ.

Awọn orisun le jẹ asopọ pọ:

  • Awọn igbẹkẹle wa, wọn ni ipa lori aṣẹ ti a lo awọn orisun.
    Fun apẹẹrẹ, “akọkọ fi package sii, lẹhinna ṣatunkọ faili iṣeto, lẹhinna bẹrẹ iṣẹ naa.”
  • Awọn iwifunni wa - ti orisun kan ba ti yipada, o firanṣẹ awọn iwifunni si awọn orisun ti o ṣe alabapin si.
    Fun apẹẹrẹ, ti faili iṣeto ba yipada, o le tun iṣẹ naa bẹrẹ laifọwọyi.

Ni afikun, Puppet DSL ni awọn iṣẹ ati awọn oniyipada, bakanna bi awọn alaye ipo ati awọn yiyan. Orisirisi awọn ọna ṣiṣe idanwo tun ni atilẹyin - EPP ati ERB.

Puppet ti kọ ni Ruby, nitorinaa ọpọlọpọ awọn itumọ ati awọn ofin ni a mu lati ibẹ. Ruby ngbanilaaye lati faagun Puppet - ṣafikun imọ-jinlẹ eka, awọn iru orisun tuntun, awọn iṣẹ.

Lakoko ti Puppet nṣiṣẹ, awọn ifihan gbangba fun oju ipade kan pato lori olupin ni a ṣajọpọ sinu itọsọna kan. Directory jẹ atokọ ti awọn orisun ati awọn ibatan wọn lẹhin ṣiṣe iṣiro iye awọn iṣẹ, awọn oniyipada ati imugboroosi ti awọn alaye ipo.

Sintasi ati codestyle

Eyi ni awọn apakan ti iwe aṣẹ osise ti yoo ran ọ lọwọ lati loye sintasi ti awọn apẹẹrẹ ti a pese ko ba to:

Eyi ni apẹẹrẹ ti ohun ti ifihan naa dabi:

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

Indentation ati awọn fifọ laini kii ṣe apakan ti a beere fun ifihan, ṣugbọn iṣeduro kan wa itọsọna ara. Akopọ:

  • Awọn indents aaye meji, awọn taabu ko lo.
  • Awọn àmúró ti o ni wiwọ ti yapa nipasẹ aaye kan; awọn ile-iṣafihan ko niya nipasẹ aaye kan.
  • Awọn aami idẹsẹ lẹhin paramita kọọkan, pẹlu eyi ti o kẹhin. Paramita kọọkan wa lori laini ọtọtọ. Iyatọ kan jẹ fun ọran laisi awọn ayeraye ati paramita kan: o le kọ lori laini kan ati laisi komama (ie. resource { 'title': } и resource { 'title': param => value }).
  • Awọn itọka lori awọn paramita yẹ ki o wa ni ipele kanna.
  • Awọn itọka ibatan awọn orisun ni a kọ ni iwaju wọn.

Ipo ti awọn faili lori pappetserver

Fun alaye diẹ sii, Emi yoo ṣafihan imọran ti “itọsọna gbongbo”. Itọsọna gbongbo jẹ ilana ti o ni iṣeto Puppet fun ipade kan pato.

Itọsọna gbongbo yatọ da lori ẹya Puppet ati awọn agbegbe ti a lo. Awọn agbegbe jẹ awọn eto atunto ominira ti o fipamọ sinu awọn ilana lọtọ. Nigbagbogbo a lo ni apapo pẹlu git, ninu eyiti awọn agbegbe ti ṣẹda lati awọn ẹka git. Gẹgẹ bẹ, ipade kọọkan wa ni agbegbe kan tabi omiiran. Eyi le tunto lori ipade funrararẹ, tabi ni ENC, eyiti Emi yoo sọrọ nipa ninu nkan ti n bọ.

  • Ni awọn kẹta ti ikede ("atijọ Puppet") mimọ liana wà /etc/puppet. Lilo awọn agbegbe jẹ iyan - fun apẹẹrẹ, a ko lo wọn pẹlu Puppet atijọ. Ti a ba lo awọn agbegbe, wọn maa n fipamọ sinu /etc/puppet/environments, awọn root liana yoo jẹ awọn ayika liana. Ti a ko ba lo awọn agbegbe, itọsọna gbongbo yoo jẹ ilana ipilẹ.
  • Bibẹrẹ lati ẹya kẹrin (“Puppet tuntun”), lilo awọn agbegbe di dandan, ati pe a gbe ilana ipilẹ lọ si /etc/puppetlabs/code. Nitorinaa, awọn agbegbe ti wa ni ipamọ /etc/puppetlabs/code/environments, root liana ni ayika liana.

Itọsọna abẹlẹ gbọdọ wa ninu itọsọna gbongbo manifests, eyi ti o ni ọkan tabi diẹ ẹ sii farahan ti n ṣe apejuwe awọn apa. Ni afikun, o yẹ ki o wa subdirectory modules, eyi ti o ni awọn module. Emi yoo sọ fun ọ kini awọn modulu jẹ diẹ nigbamii. Ni afikun, Puppet atijọ le tun ni iwe-itọnisọna kan files, eyiti o ni awọn oriṣiriṣi awọn faili ti a daakọ si awọn apa. Ninu Puppet tuntun, gbogbo awọn faili ni a gbe sinu awọn modulu.

Awọn faili afihan ni itẹsiwaju .pp.

A tọkọtaya ti ija apẹẹrẹ

Apejuwe ti ipade ati awọn oluşewadi lori rẹ

Lori ipade server1.testdomain faili gbọdọ ṣẹda /etc/issue pẹlu akoonu Debian GNU/Linux n l. Faili naa gbọdọ jẹ ohun ini nipasẹ olumulo ati ẹgbẹ kan root, wiwọle awọn ẹtọ gbọdọ jẹ 644.

A kọ manifesto kan:

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

Awọn ibatan laarin awọn orisun lori ipade kan

Lori ipade server2.testdomain nginx gbọdọ ṣiṣẹ, ṣiṣẹ pẹlu iṣeto ti a ti pese tẹlẹ.

Jẹ ká decompose awọn isoro:

  • Awọn package nilo lati fi sori ẹrọ nginx.
  • O jẹ dandan pe awọn faili iṣeto ni daakọ lati olupin naa.
  • Iṣẹ naa nilo lati ṣiṣẹ nginx.
  • Ti iṣeto ba ti ni imudojuiwọn, iṣẹ naa gbọdọ tun bẹrẹ.

A kọ manifesto kan:

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

Fun eyi lati ṣiṣẹ, o nilo isunmọ ipo faili atẹle lori olupin puppet:

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

Awọn orisun orisun

Atokọ pipe ti awọn iru orisun ti o ni atilẹyin ni a le rii Nibi ninu iwe, Nibi Emi yoo ṣe apejuwe awọn oriṣi ipilẹ marun, eyiti ninu iṣe mi ti to lati yanju awọn iṣoro pupọ julọ.

faili

Ṣakoso awọn faili, awọn ilana, awọn ami-ami, akoonu wọn, ati awọn ẹtọ wiwọle.

Awọn aṣayan:

  • awọn oluşewadi orukọ - ọna si faili (aṣayan)
  • ọna - ọna si faili (ti ko ba pato ninu orukọ)
  • rii daju - iru faili:
    • absent - pa faili kan
    • present - faili gbọdọ wa ti eyikeyi iru (ti ko ba si faili, faili deede yoo ṣẹda)
    • file - deede faili
    • directory - liana
    • link - aami
  • akoonu - awọn akoonu faili (dara nikan fun awọn faili deede, ko le ṣee lo pẹlu orisun tabi afojusun)
  • orisun - ọna asopọ si ọna lati eyiti o fẹ daakọ awọn akoonu ti faili naa (ko le ṣee lo pẹlu akoonu tabi afojusun). Le ṣe pato bi boya URI pẹlu ero kan puppet: (lẹhinna awọn faili lati ọdọ olupin puppet yoo ṣee lo), ati pẹlu ero naa http: (Mo nireti pe o han ohun ti yoo ṣẹlẹ ninu ọran yii), ati paapaa pẹlu aworan atọka file: tabi bi ọna pipe laisi ero (lẹhinna faili lati FS agbegbe lori ipade yoo ṣee lo)
  • afojusun - nibiti aami asopọ yẹ ki o tọka (ko le ṣee lo papọ pẹlu akoonu tabi orisun)
  • eni - olumulo ti o yẹ ki o ni faili naa
  • Ẹgbẹ - ẹgbẹ si eyiti faili yẹ ki o wa
  • mode - awọn igbanilaaye faili (gẹgẹbi okun)
  • loorekoore - kí recursive liana processing
  • purge - jẹ ki piparẹ awọn faili ti ko ṣe apejuwe ninu Puppet
  • agbara - jẹ ki piparẹ awọn ilana ti ko ṣe apejuwe ninu Puppet

package

Awọn fifi sori ẹrọ ati yọ awọn idii kuro. Ni anfani lati mu awọn iwifunni mu – tun fi package sori ẹrọ ti paramita naa ba jẹ pato reinstall_on_refresh.

Awọn aṣayan:

  • awọn oluşewadi orukọ - orukọ package (aṣayan)
  • orukọ - orukọ package (ti ko ba pato ninu orukọ)
  • olupese - oluṣakoso package lati lo
  • rii daju - ipo ti o fẹ ti package:
    • present, installed - eyikeyi ti ikede sori ẹrọ
    • latest - titun ti ikede sori ẹrọ
    • absent - paarẹ (apt-get remove)
    • purged - paarẹ pẹlu awọn faili atunto (apt-get purge)
    • held - ẹya package ti wa ni titiipa (apt-mark hold)
    • любая другая строка - awọn pàtó kan ti ikede ti fi sori ẹrọ
  • reinstall_on_refresh - ti a ba true, lẹhinna nigbati o ba gba iwifunni naa package yoo tun fi sii. Wulo fun awọn ipinpinpin orisun orisun, nibiti awọn idii atunkọ le jẹ pataki nigbati o ba yipada awọn paramita kikọ. Aiyipada false.

iṣẹ

Ṣakoso awọn iṣẹ. Agbara lati ṣe ilana awọn iwifunni - tun iṣẹ naa bẹrẹ.

Awọn aṣayan:

  • awọn oluşewadi orukọ - iṣẹ lati ṣakoso (aṣayan)
  • orukọ - iṣẹ ti o nilo lati ṣakoso (ti ko ba ni pato ninu orukọ)
  • rii daju - ipo iṣẹ ti o fẹ:
    • running - se igbekale
    • stopped - duro
  • jẹki - ṣakoso agbara lati bẹrẹ iṣẹ naa:
    • true - autorun ti ṣiṣẹ (systemctl enable)
    • mask - para (systemctl mask)
    • false - autorun jẹ alaabo (systemctl disable)
  • bẹrẹ - pipaṣẹ lati tun iṣẹ naa bẹrẹ
  • ipo - pipaṣẹ lati ṣayẹwo ipo iṣẹ
  • tun bẹrẹ - tọkasi boya initscript iṣẹ ṣe atilẹyin tun bẹrẹ. Ti o ba jẹ false ati paramita ti wa ni pato bẹrẹ - iye ti paramita yii ti lo. Ti o ba jẹ false ati paramita bẹrẹ ko pato - iṣẹ naa ti duro ati bẹrẹ lati tun bẹrẹ (ṣugbọn systemd nlo aṣẹ naa systemctl restart).
  • wahala - tọkasi boya initscript iṣẹ ṣe atilẹyin aṣẹ naa status... Ti o ba ti a false, lẹhinna iye paramita ti lo ipo. Aiyipada true.

exec

Ṣiṣe awọn pipaṣẹ ita. Ti o ko ba pato paramita ṣẹda, nikan ti o ba jẹ, ayafi tabi onitura, aṣẹ naa yoo ṣiṣẹ ni gbogbo igba ti Puppet ba ṣiṣẹ. Ni agbara lati lọwọ awọn iwifunni - nṣiṣẹ aṣẹ kan.

Awọn aṣayan:

  • awọn oluşewadi orukọ - aṣẹ lati ṣiṣẹ (aṣayan)
  • pipaṣẹ - aṣẹ lati ṣiṣẹ (ti ko ba jẹ pato ninu orukọ)
  • ọna - awọn ọna ninu eyiti lati wa faili ti o le ṣiṣẹ
  • nikan ti o ba jẹ - ti o ba ti pipaṣẹ pato ninu paramita yii ti pari pẹlu koodu ipadabọ odo, aṣẹ akọkọ yoo ṣiṣẹ
  • ayafi - ti o ba ti aṣẹ pato ninu paramita yii ti pari pẹlu koodu ipadabọ ti kii-odo, aṣẹ akọkọ yoo ṣiṣẹ
  • ṣẹda - ti faili ti o wa ni pato ninu paramita yii ko si, aṣẹ akọkọ yoo ṣiṣẹ
  • onitura - ti a ba true, lẹhinna aṣẹ naa yoo ṣiṣẹ nikan nigbati exec yii gba iwifunni lati awọn orisun miiran
  • cwd - liana lati eyi ti lati ṣiṣe awọn pipaṣẹ
  • olumulo - olumulo lati ọdọ ẹniti lati ṣiṣẹ aṣẹ naa
  • olupese - Bii o ṣe le ṣiṣẹ aṣẹ naa:
    • positix - ilana ọmọde jẹ nìkan ṣẹda, rii daju lati pato ọna
    • ikarahun - aṣẹ ti ṣe ifilọlẹ ni ikarahun naa /bin/sh, le ma ṣe pato ọna, o le lo globbing, paipu ati awọn miiran ikarahun awọn ẹya ara ẹrọ. Nigbagbogbo a rii ni aifọwọyi ti awọn ohun kikọ pataki eyikeyi ba wa (|, ;, &&, || ati bẹbẹ lọ).

cron

Awọn iṣakoso cronjobs.

Awọn aṣayan:

  • awọn oluşewadi orukọ - o kan diẹ ninu awọn Iru idamo
  • rii daju - crownjob ipinle:
    • present - ṣẹda ti ko ba si
    • absent - paarẹ ti o ba wa
  • pipaṣẹ - kini aṣẹ lati ṣiṣẹ
  • ayika - ninu agbegbe wo lati ṣiṣẹ aṣẹ (akojọ ti awọn oniyipada ayika ati awọn iye wọn nipasẹ =)
  • olumulo - lati ọdọ olumulo wo lati ṣiṣẹ aṣẹ naa
  • iseju, wakati, ọjọ ọsẹ, osù, oṣooṣu - nigbati lati ṣiṣe cron. Ti eyikeyi ninu awọn abuda wọnyi ko ba ni pato, iye rẹ ninu crontab yoo jẹ *.

Ninu Puppet 6.0 cron bii pe kuro lati apoti ni puppetserver, nitorina ko si iwe lori aaye gbogbogbo. Sugbon oun jẹ ninu apoti ni aṣoju-puppet, nitorinaa ko si iwulo lati fi sii lọtọ. O le wo awọn iwe aṣẹ fun o ninu iwe fun ẹya karun ti Puppet, tabi lori GitHub.

Nipa awọn orisun ni apapọ

Awọn ibeere fun iyasọtọ awọn orisun

Aṣiṣe ti o wọpọ julọ ti a ba pade ni Ìkéde pidánpidán. Aṣiṣe yii waye nigbati awọn orisun meji tabi diẹ ẹ sii ti iru kanna pẹlu orukọ kanna ba han ninu itọsọna naa.

Nitorina, Emi yoo kọ lẹẹkansi: farahan fun ipade kanna ko yẹ ki o ni awọn orisun ti iru kanna pẹlu akọle kanna!

Nigba miiran iwulo wa lati fi sori ẹrọ awọn idii pẹlu orukọ kanna, ṣugbọn pẹlu awọn oluṣakoso package oriṣiriṣi. Ni idi eyi, o nilo lati lo paramita namelati yago fun aṣiṣe:

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

Awọn iru orisun miiran ni awọn aṣayan kanna lati ṣe iranlọwọ lati yago fun iṣẹpo- name у iṣẹ, command у exec, ati bẹbẹ lọ.

Metaparameters

Kọọkan awọn oluşewadi iru ni diẹ ninu awọn pataki sile, laiwo ti awọn oniwe-iseda.

Akojọ kikun ti awọn paramita meta ninu iwe Puppet.

Akojọ kukuru:

  • nilo - paramita yii tọkasi iru awọn orisun ti orisun yii da lori.
  • ṣaaju ki o to - paramita yii ṣalaye iru awọn orisun ti o da lori orisun yii.
  • alabapin - paramita yii ṣalaye iru awọn orisun wo ni orisun yii gba awọn iwifunni.
  • sọ ọ - paramita yii ṣalaye iru awọn orisun ti o gba awọn iwifunni lati orisun yii.

Gbogbo awọn metaparameters ti a ṣe akojọ gba boya ọna asopọ orisun ẹyọkan tabi opo awọn ọna asopọ ni awọn biraketi onigun mẹrin.

Awọn ọna asopọ si awọn orisun

A ọna asopọ awọn oluşewadi jẹ nìkan a darukọ awọn oluşewadi. Wọn ti wa ni o kun lo lati tọkasi dependencies. Itọkasi orisun ti ko si tẹlẹ yoo fa aṣiṣe akojọpọ kan.

Awọn sintasi ti awọn ọna asopọ jẹ bi wọnyi: awọn oluşewadi iru pẹlu kan olu lẹta (ti o ba ti awọn orukọ iru ni awọn meji colons, ki o si kọọkan apakan ti awọn orukọ laarin awọn colons ti wa ni capitalized), ki o si awọn oluşewadi orukọ ni square biraketi (awọn nla ti awọn orukọ). ko yipada!). Ko yẹ ki o wa awọn alafo; awọn biraketi onigun mẹrin ni a kọ lẹsẹkẹsẹ lẹhin iru orukọ naa.

Apeere:

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

Awọn igbẹkẹle ati awọn iwifunni

Iwe aṣẹ nibi.

Gẹgẹbi a ti sọ tẹlẹ, awọn igbẹkẹle ti o rọrun laarin awọn orisun jẹ iyipada. Nipa ọna, ṣọra nigbati o ba nfi awọn igbẹkẹle kun - o le ṣẹda awọn igbẹkẹle cyclic, eyiti yoo fa aṣiṣe akopo kan.

Ko dabi awọn igbẹkẹle, awọn iwifunni kii ṣe iyipada. Awọn ofin wọnyi lo fun awọn iwifunni:

  • Ti orisun ba gba iwifunni, o ti ni imudojuiwọn. Awọn iṣe imudojuiwọn da lori iru orisun - exec nṣiṣẹ aṣẹ, iṣẹ tun bẹrẹ iṣẹ naa, package reinstalls package. Ti orisun naa ko ba ni asọye iṣe imudojuiwọn, lẹhinna ko si ohun ti o ṣẹlẹ.
  • Lakoko ṣiṣe kan ti Puppet, awọn orisun ti wa ni imudojuiwọn ko ju ẹẹkan lọ. Eyi ṣee ṣe nitori awọn iwifunni pẹlu awọn igbẹkẹle ati aworan igbẹkẹle ko ni awọn iyipo ninu.
  • Ti Puppet ba yipada ipo orisun kan, orisun naa firanṣẹ awọn iwifunni si gbogbo awọn orisun ti o ṣe alabapin si.
  • Ti orisun kan ba ni imudojuiwọn, o firanṣẹ awọn iwifunni si gbogbo awọn orisun ti o ṣe alabapin si.

Mimu awọn paramita ti a ko pato

Gẹgẹbi ofin, ti diẹ ninu paramita awọn orisun ko ni iye aiyipada ati pe a ko ni pato paramita yii ninu ifihan, lẹhinna Puppet kii yoo yi ohun-ini yii pada fun orisun ti o baamu lori ipade naa. Fun apẹẹrẹ, ti o ba jẹ orisun ti iru faili paramita ko pato owner, lẹhinna Puppet kii yoo yi oniwun faili ti o baamu pada.

Ifihan si awọn kilasi, awọn oniyipada ati awọn asọye

Ṣebi a ni ọpọlọpọ awọn apa ti o ni apakan kanna ti iṣeto ni, ṣugbọn awọn iyatọ tun wa - bibẹẹkọ a le ṣe apejuwe gbogbo rẹ ni bulọọki kan. node {}. Nitoribẹẹ, o le daakọ awọn apakan kanna ti iṣeto ni irọrun, ṣugbọn ni gbogbogbo eyi jẹ ojutu buburu - iṣeto ni dagba, ati pe ti o ba yipada apakan gbogbogbo ti iṣeto, iwọ yoo ni lati satunkọ ohun kanna ni ọpọlọpọ awọn aaye. Ni akoko kanna, o rọrun lati ṣe aṣiṣe kan, ati ni gbogbogbo, ilana DRY (maṣe tun ṣe ara rẹ) ni a ṣe fun idi kan.

Lati yanju iṣoro yii o wa iru apẹrẹ bi kilasi.

Classes

Класс ni a ti a npè ni Àkọsílẹ ti poppet koodu. A nilo awọn kilasi lati tun lo koodu.

Ni akọkọ kilasi nilo lati ṣe apejuwe. Apejuwe funrararẹ ko ṣafikun eyikeyi awọn orisun nibikibi. A ṣe apejuwe kilasi naa ni awọn ifihan:

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

Lẹhin eyi, kilasi le ṣee lo:

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

Apeere lati iṣẹ-ṣiṣe ti tẹlẹ - jẹ ki a gbe fifi sori ẹrọ ati iṣeto ni nginx sinu kilasi kan:

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
}

Awọn oniyipada

Kilasi lati apẹẹrẹ ti tẹlẹ ko ni rọ rara nitori pe o mu iṣeto nginx kanna nigbagbogbo. Jẹ ki a ṣe ọna si oniyipada atunto, lẹhinna kilasi yii le ṣee lo lati fi nginx sori ẹrọ pẹlu iṣeto eyikeyi.

O le ṣee ṣe lilo awọn oniyipada.

Akiyesi: awọn oniyipada ni Puppet jẹ aiyipada!

Ni afikun, iyipada kan le wọle nikan lẹhin ti o ti kede, bibẹẹkọ iye ti oniyipada yoo jẹ undef.

Apẹẹrẹ ti ṣiṣẹ pẹlu awọn oniyipada:

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

Puppet ni awọn aaye orukọ, ati awọn oniyipada, gẹgẹbi, ni agbegbe ti hihan: Ayipada pẹlu kanna orukọ le ti wa ni asọye ni orisirisi awọn namespaces. Nigbati o ba n yanju iye ti oniyipada, a wa oniyipada ni aaye orukọ lọwọlọwọ, lẹhinna ni aaye orukọ isopo, ati bẹbẹ lọ.

Awọn apẹẹrẹ aaye orukọ:

  • agbaye - awọn oniyipada ni ita kilasi tabi apejuwe ipade lọ sibẹ;
  • aaye orukọ ipade ni apejuwe ipade;
  • kilasi namespace ninu awọn kilasi apejuwe.

Lati yago fun aibikita nigbati o n wọle si oniyipada, o le pato aaye orukọ ni orukọ oniyipada:

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

Jẹ ki a gba pe ọna si iṣeto nginx wa ni oniyipada $nginx_conf_source. Lẹhinna kilasi naa yoo dabi eyi:

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
}

Sibẹsibẹ, apẹẹrẹ ti a fun ni buburu nitori pe diẹ ninu awọn "imọ asiri" wa ti o wa ni ibikan ninu kilasi oniyipada pẹlu iru ati iru orukọ kan ti a lo. O jẹ deede diẹ sii lati jẹ ki imọ yii gbogbogbo - awọn kilasi le ni awọn aye.

Awọn paramita kilasi jẹ awọn oniyipada ninu aaye orukọ kilasi, wọn pato ninu akọsori kilasi ati pe o le ṣee lo bi awọn oniyipada deede ni ara kilasi. Awọn iye paramita ti wa ni pato nigba lilo kilasi ni ifihan.

A le ṣeto paramita si iye aiyipada. Ti paramita kan ko ba ni iye aiyipada ati pe iye ko ṣeto nigba lilo, yoo fa aṣiṣe akojọpọ.

Jẹ ki a paramita kilasi lati apẹẹrẹ loke ki o ṣafikun awọn aye meji: akọkọ, ti o nilo, ni ọna si iṣeto ni, ati keji, yiyan, ni orukọ package pẹlu nginx (ni Debian, fun apẹẹrẹ, awọn idii wa. 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',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

Ni Puppet, awọn oniyipada ti wa ni titẹ. Jeun ọpọlọpọ awọn data orisi. Awọn oriṣi data ni a lo nigbagbogbo lati fọwọsi awọn iye paramita ti o kọja si awọn kilasi ati awọn asọye. Ti paramita ti o kọja ko baamu iru pàtó kan, aṣiṣe akojọpọ yoo waye.

Iru ti kọ lẹsẹkẹsẹ ṣaaju orukọ paramita naa:

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

Awọn kilasi: pẹlu orukọ kilasi vs kilasi{'orukọ kilasi':}

Kilasi kọọkan jẹ orisun ti iru kilasi. Bi pẹlu eyikeyi miiran iru ti awọn oluşewadi, ko le jẹ meji instances ti kanna kilasi lori kanna ipade.

Ti o ba gbiyanju lati fi kan kilasi si kanna ipade lemeji lilo class { 'classname':} (ko si iyato, pẹlu o yatọ si tabi aami sile), nibẹ ni yio je kan akopo aṣiṣe. Ṣugbọn ti o ba lo kilasi kan ni ara awọn oluşewadi, o le lẹsẹkẹsẹ ṣeto gbogbo awọn paramita rẹ ni iṣafihan.

Sibẹsibẹ, ti o ba lo include, lẹhinna kilasi le ṣe afikun ni ọpọlọpọ igba bi o ṣe fẹ. Otitọ ni pe include jẹ ẹya arapotent iṣẹ ti o sọwedowo boya a kilasi ti a ti fi kun si awọn liana. Ti kilasi ko ba si ninu itọsọna naa, o ṣafikun, ati pe ti o ba wa tẹlẹ, ko ṣe nkankan. Sugbon ni irú ti lilo include O ko le ṣeto awọn paramita kilasi lakoko ikede kilasi - gbogbo awọn paramita ti a beere gbọdọ wa ni ṣeto ni orisun data ita - Hiera tabi ENC. A máa sọ̀rọ̀ nípa wọn nínú àpilẹ̀kọ tó kàn.

Awọn asọye

Gẹgẹbi a ti sọ ninu bulọọki ti tẹlẹ, kilasi kanna ko le wa lori ipade diẹ sii ju ẹẹkan lọ. Sibẹsibẹ, ni awọn igba miiran o nilo lati ni anfani lati lo bulọọki koodu kanna pẹlu awọn aye oriṣiriṣi lori ipade kanna. Ni awọn ọrọ miiran, iwulo wa fun iru orisun ti tirẹ.

Fun apẹẹrẹ, lati fi sori ẹrọ module PHP, a ṣe atẹle ni Avito:

  1. Fi sori ẹrọ ni package pẹlu yi module.
  2. Jẹ ki a ṣẹda faili iṣeto ni fun module yii.
  3. A ṣẹda aami asopọ si atunto fun php-fpm.
  4. A ṣẹda aami asopọ si atunto fun php cli.

Ni iru awọn igba, a oniru bi setumo (setumo, telẹ iru, telẹ awọn oluşewadi iru). A Setumo ni iru si a kilasi, ṣugbọn nibẹ ni o wa iyato: akọkọ, kọọkan Define ni a oluşewadi iru, ko kan awọn oluşewadi; keji, kọọkan definition ni o ni ohun ti ko boju mu paramita $title, ibi ti awọn oluşewadi orukọ lọ nigbati o ti wa ni polongo. Gẹgẹ bi ninu ọran ti awọn kilasi, asọye gbọdọ kọkọ ṣapejuwe, lẹhin eyi o le ṣee lo.

Apeere ti o rọrun pẹlu module kan fun 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' }
}

Ọna to rọọrun lati yẹ aṣiṣe ikede Pidánpidán jẹ ni Setumo. Eleyi ṣẹlẹ ti o ba ti a definition ni o ni a oluşewadi pẹlu kan ibakan orukọ, ati nibẹ ni o wa meji tabi diẹ ẹ sii apeere ti yi definition lori diẹ ninu awọn ipade.

O rọrun lati daabobo ararẹ kuro ninu eyi: gbogbo awọn orisun inu itumọ gbọdọ ni orukọ ti o da lori $title. Omiiran jẹ afikun agbara ti awọn orisun; ninu ọran ti o rọrun julọ, o to lati gbe awọn orisun ti o wọpọ si gbogbo awọn iṣẹlẹ ti itumọ sinu kilasi lọtọ ati pẹlu kilasi yii ninu asọye - iṣẹ include ara alagbara.

Awọn ọna miiran wa lati ṣaṣeyọri agbara agbara nigba fifi awọn orisun kun, eyun ni lilo awọn iṣẹ defined и ensure_resources, ṣugbọn Emi yoo sọ fun ọ nipa rẹ ni iṣẹlẹ ti nbọ.

Awọn igbẹkẹle ati awọn iwifunni fun awọn kilasi ati awọn asọye

Awọn kilasi ati awọn asọye ṣafikun awọn ofin wọnyi si mimu awọn igbẹkẹle ati awọn iwifunni mu:

  • igbẹkẹle lori kilasi / asọye ṣe afikun awọn igbẹkẹle lori gbogbo awọn orisun ti kilasi / asọye;
  • Igbẹkẹle kilasi / asọye ṣe afikun awọn igbẹkẹle si gbogbo kilasi / asọye awọn orisun;
  • kilasi / asọye iwifunni iwifunni gbogbo awọn orisun ti kilasi / asọye;
  • kilasi / asọye alabapin alabapin si gbogbo awọn oro ti awọn kilasi / asọye.

Ni àídájú gbólóhùn ati selectors

Iwe aṣẹ nibi.

if

O rọrun nibi:

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

ayafi

ayafi ti jẹ ẹya ti o ba wa ni yiyipada: awọn Àkọsílẹ koodu yoo wa ni executed ti o ba ti ikosile jẹ eke.

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

irú

Ko si ohun idiju nibi boya. O le lo awọn iye deede (awọn gbolohun ọrọ, awọn nọmba, ati bẹbẹ lọ), awọn ikosile deede, ati awọn iru data gẹgẹbi awọn iye.

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

Awọn yiyan

Ayanfẹ jẹ itumọ ede ti o jọra si case, sugbon dipo ti ṣiṣe kan Àkọsílẹ koodu, o pada a iye.

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

Awọn modulu

Nigba ti iṣeto ni kekere, o le awọn iṣọrọ wa ni pa ninu ọkan farahan. Ṣugbọn awọn atunto diẹ sii ti a ṣe apejuwe, diẹ sii awọn kilasi ati awọn apa ti o wa ninu iṣafihan, o dagba, ati pe o di airọrun lati ṣiṣẹ pẹlu.

Ni afikun, iṣoro ti ilotunlo koodu wa - nigbati gbogbo koodu ba wa ni ifihan kan, o nira lati pin koodu yii pẹlu awọn miiran. Lati yanju awọn iṣoro meji wọnyi, Puppet ni nkan ti a pe ni awọn modulu.

Awọn modulu - iwọnyi jẹ awọn akojọpọ awọn kilasi, awọn asọye ati awọn nkan Puppet miiran ti a gbe sinu itọsọna lọtọ. Ni awọn ọrọ miiran, module jẹ nkan ominira ti ọgbọn Puppet. Fun apẹẹrẹ, module kan le wa fun ṣiṣẹ pẹlu nginx, ati pe yoo ni kini ati ohun ti o nilo lati ṣiṣẹ pẹlu nginx, tabi module le wa fun ṣiṣẹ pẹlu PHP, ati bẹbẹ lọ.

Awọn modulu ti wa ni ikede, ati awọn igbẹkẹle ti awọn modulu lori ara wọn tun ni atilẹyin. Ibi ipamọ ti o ṣii ti awọn modulu wa - Puppet Forge.

Lori olupin puppet, awọn modulu wa ninu awọn iwe-ipamọ awọn modulu ti itọsọna gbongbo. Ninu module kọọkan ero ilana itọsọna boṣewa kan wa - awọn ifihan, awọn faili, awọn awoṣe, lib, ati bẹbẹ lọ.

Faili be ni a module

Gbongbo module le ni awọn ilana wọnyi pẹlu awọn orukọ ijuwe:

  • manifests - o ni awọn manifestos
  • files - o ni awọn faili
  • templates - o ni awọn awoṣe
  • lib - o ni Ruby koodu

Eyi kii ṣe atokọ pipe ti awọn ilana ati awọn faili, ṣugbọn o to fun nkan yii fun bayi.

Awọn orukọ ti awọn orisun ati awọn orukọ ti awọn faili ni module

Iwe aṣẹ nibi.

Awọn orisun (awọn kilasi, awọn asọye) ninu module ko le darukọ ohunkohun ti o fẹ. Ni afikun, ifọrọranṣẹ taara wa laarin orukọ orisun kan ati orukọ faili ninu eyiti Puppet yoo wa apejuwe ti orisun yẹn. Ti o ba ṣẹ awọn ofin orukọ, Puppet nìkan kii yoo rii apejuwe awọn orisun ati pe iwọ yoo gba aṣiṣe akopo.

Awọn ofin jẹ rọrun:

  • Gbogbo awọn orisun ti o wa ninu module gbọdọ wa ni aaye orukọ module. Ti o ba ti module ni a npe ni foo, lẹhinna gbogbo awọn ohun elo ti o wa ninu rẹ yẹ ki o wa ni orukọ foo::<anything>, tabi o kan foo.
  • Awọn oluşewadi pẹlu awọn orukọ ti awọn module gbọdọ jẹ ninu awọn faili init.pp.
  • Fun awọn orisun miiran, ero sisọ faili jẹ bi atẹle:
    • ìpele pẹlu module orukọ ti wa ni asonu
    • gbogbo awọn oluṣafihan meji, ti o ba jẹ eyikeyi, ti rọpo pẹlu awọn gige
    • itẹsiwaju ti wa ni afikun .pp

Emi yoo ṣe afihan pẹlu apẹẹrẹ. Jẹ ká sọ Mo n kikọ a module nginx. O ni awọn orisun wọnyi:

  • kilasi nginx ti a sapejuwe ninu farahan init.pp;
  • kilasi nginx::service ti a sapejuwe ninu farahan service.pp;
  • setumo nginx::server ti a sapejuwe ninu farahan server.pp;
  • setumo nginx::server::location ti a sapejuwe ninu farahan server/location.pp.

Awọn awoṣe

Nitootọ iwọ funrarẹ mọ kini awọn awoṣe jẹ; Emi kii yoo ṣe apejuwe wọn ni alaye nibi. Sugbon Emi yoo fi o kan ni irú asopọ si Wikipedia.

Bi o ṣe le lo awọn awoṣe: Itumọ awoṣe le ṣe afikun ni lilo iṣẹ kan template, eyi ti o ti kọja awọn ọna si awọn awoṣe. Fun awọn orisun ti iru faili lo pọ pẹlu paramita content. Fun apẹẹrẹ, bii eyi:

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

Wo ọna <modulename>/<filename> tumo si faili <rootdir>/modules/<modulename>/templates/<filename>.

Ni afikun, iṣẹ kan wa inline_template - o gba ọrọ awoṣe bi titẹ sii, kii ṣe orukọ faili.

Laarin awọn awoṣe, o le lo gbogbo awọn oniyipada Puppet ni aaye lọwọlọwọ.

Puppet ṣe atilẹyin awọn awoṣe ni ọna kika ERB ati EPP:

Ni ṣoki nipa ERB

Awọn ẹya iṣakoso:

  • <%= ВЫРАЖЕНИЕ %> - fi iye ikosile sii
  • <% ВЫРАЖЕНИЕ %> - ṣe iṣiro iye ikosile (laisi fi sii). Awọn alaye ipo (ti o ba jẹ) ati awọn lupu (kọọkan) nigbagbogbo lọ si ibi.
  • <%# КОММЕНТАРИЙ %>

Awọn ikosile ni ERB ni a kọ ni Ruby (ERB jẹ Ruby ti a fi sii gangan).

Lati wọle si awọn oniyipada lati ifihan, o nilo lati ṣafikun @ si orukọ oniyipada. Lati yọkuro fifọ laini kan ti o han lẹhin iṣelọpọ iṣakoso, o nilo lati lo aami pipade kan -%>.

Apẹẹrẹ ti lilo awoṣe

Jẹ ká sọ Mo n kikọ a module lati sakoso ZooKeeper. Kilasi ti o ni iduro fun ṣiṣẹda atunto n wo nkan bii eyi:

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

Ati awọn ti o baamu awoṣe zoo.cfg.erb - Nitorina:

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

Awọn otitọ ati Awọn iyipada ti a ṣe sinu

Nigbagbogbo apakan kan pato ti iṣeto da lori ohun ti n ṣẹlẹ lọwọlọwọ lori ipade. Fun apẹẹrẹ, da lori kini itusilẹ Debian jẹ, o nilo lati fi ọkan tabi ẹya miiran ti package sii. O le ṣe atẹle gbogbo eyi pẹlu ọwọ, tun ṣe afihan ti awọn apa ba yipada. Ṣugbọn eyi kii ṣe ọna to ṣe pataki; adaṣe dara julọ.

Lati gba alaye nipa awọn apa, Puppet ni ẹrọ ti a pe ni awọn ododo. Awọn otitọ - Eyi jẹ alaye nipa ipade, ti o wa ni awọn ifihan ni irisi awọn oniyipada lasan ni aaye orukọ agbaye. Fun apẹẹrẹ, orukọ agbalejo, ẹya ẹrọ iṣẹ, faaji ero isise, atokọ ti awọn olumulo, atokọ ti awọn atọkun nẹtiwọọki ati awọn adirẹsi wọn, ati pupọ, pupọ diẹ sii. Awọn otitọ wa ni awọn ifihan ati awọn awoṣe bi awọn oniyipada deede.

Apẹẹrẹ ti ṣiṣẹ pẹlu awọn otitọ:

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

Ni sisọ ni deede, otitọ kan ni orukọ kan (okun) ati iye kan (oriṣiriṣi awọn oriṣi wa: awọn gbolohun ọrọ, awọn ọna kika, awọn iwe-itumọ). Jeun ṣeto ti-itumọ ti ni mon. O tun le kọ ti ara rẹ. Otitọ-odè ti wa ni apejuwe bi awọn iṣẹ ni Ruby, tabi bi executable awọn faili. Awọn otitọ tun le ṣe afihan ni fọọmu naa ọrọ awọn faili pẹlu data lori awọn apa.

Lakoko iṣẹ, aṣoju ọmọlangidi naa kọkọ daakọ gbogbo awọn agbasọ otitọ ti o wa lati pappetserver si ipade, lẹhin eyi o ṣe ifilọlẹ wọn ati firanṣẹ awọn otitọ ti a gba si olupin naa; Lẹhin eyi, olupin naa bẹrẹ ṣiṣe akojọpọ katalogi naa.

Mon ni awọn fọọmu ti executable awọn faili

Iru awọn otitọ ni a gbe sinu awọn modulu ninu itọsọna naa facts.d. Dajudaju, awọn faili gbọdọ jẹ ṣiṣe. Nigbati o ba n ṣiṣẹ, wọn gbọdọ gbejade alaye si iṣẹjade boṣewa ni boya YAML tabi bọtini = ọna kika iye.

Maṣe gbagbe pe awọn otitọ kan si gbogbo awọn apa ti o jẹ iṣakoso nipasẹ olupin poppet si eyiti module rẹ ti gbe lọ. Nitorinaa, ninu iwe afọwọkọ, ṣe abojuto lati ṣayẹwo pe eto naa ni gbogbo awọn eto ati awọn faili pataki fun otitọ rẹ lati ṣiṣẹ.

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

Awọn otitọ Ruby

Iru awọn otitọ ni a gbe sinu awọn modulu ninu itọsọna naa 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

Awọn otitọ ọrọ

Iru awọn otitọ ni a gbe sori awọn apa inu liana /etc/facter/facts.d ni atijọ Puppet tabi /etc/puppetlabs/facts.d ni titun Puppet.

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

Ngba si Awọn Otitọ

Awọn ọna meji lo wa lati sunmọ awọn otitọ:

  • nipasẹ awọn dictionary $facts: $facts['fqdn'];
  • lilo orukọ otitọ bi orukọ oniyipada: $fqdn.

O dara julọ lati lo iwe-itumọ $facts, tabi paapaa dara julọ, tọka si aaye orukọ agbaye ($::facts).

Eyi ni apakan ti o yẹ ti iwe-ipamọ naa.

Awọn iyipada ti a ṣe sinu

Yato si awọn otitọ, tun wa diẹ ninu awọn oniyipada, wa ni aaye orukọ agbaye.

  • awọn otitọ ti o gbẹkẹle - awọn oniyipada ti o gba lati iwe-ẹri alabara (niwọn igba ti ijẹrisi jẹ igbagbogbo lori olupin poppet, aṣoju ko le gba ati yi ijẹrisi rẹ pada, nitorinaa awọn oniyipada jẹ “igbẹkẹle”): orukọ ijẹrisi naa, orukọ ti ogun ati ašẹ, awọn amugbooro lati ijẹrisi naa.
  • server mon -awọn iyatọ ti o ni ibatan si alaye nipa olupin — ẹya, orukọ, adiresi IP olupin, agbegbe.
  • mon oluranlowo - awọn oniyipada ti a ṣafikun taara nipasẹ aṣoju-puppet, kii ṣe nipasẹ ifosiwewe - orukọ ijẹrisi, ẹya aṣoju, ẹya puppet.
  • titunto si oniyipada - Awọn oniyipada Pappetmaster (sic!). O jẹ nipa kanna bi ninu server mon, pẹlu awọn iye paramita iṣeto ni o wa.
  • oniyipada alakojo - awọn oniyipada alakojọ ti o yatọ ni iwọn kọọkan: orukọ module lọwọlọwọ ati orukọ module ninu eyiti ohun elo lọwọlọwọ ti wọle. Wọn le ṣee lo, fun apẹẹrẹ, lati ṣayẹwo pe awọn kilasi ikọkọ rẹ ko ṣee lo taara lati awọn modulu miiran.

Afikun 1: bawo ni a ṣe le ṣiṣẹ ati ṣatunṣe gbogbo eyi?

Nkan naa ni ọpọlọpọ awọn apẹẹrẹ ti koodu puppet, ṣugbọn ko sọ fun wa rara bi a ṣe le ṣiṣẹ koodu yii. O dara, Mo n ṣe atunṣe ara mi.

Aṣoju kan to lati ṣiṣẹ Puppet, ṣugbọn fun ọpọlọpọ awọn ọran iwọ yoo tun nilo olupin kan.

Agent

O kere ju lati ẹya 5, awọn idii aṣoju-puppet lati ibi ipamọ Puppetlabs osise ni gbogbo awọn ti o gbẹkẹle (ruby ati awọn fadaka ti o baamu), nitorinaa ko si awọn iṣoro fifi sori ẹrọ (Mo n sọrọ nipa awọn ipinpinpin ti o da lori Debian - a ko lo awọn pinpin orisun RPM).

Ni ọran ti o rọrun julọ, lati lo iṣeto ọmọlangidi, o to lati ṣe ifilọlẹ aṣoju ni ipo olupin: ti o ba jẹ pe a daakọ koodu puppet si ipade, ifilọlẹ 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

O dara julọ, nitorinaa, lati ṣeto olupin ati ṣiṣe awọn aṣoju lori awọn apa ni ipo daemon - lẹhinna lẹẹkan ni gbogbo idaji wakati wọn yoo lo iṣeto ti o gbasilẹ lati olupin naa.

O le ṣe apẹẹrẹ awoṣe titari ti iṣẹ - lọ si ipade ti o nifẹ si ati bẹrẹ sudo puppet agent -t. Bọtini -t (--test) nitootọ pẹlu awọn aṣayan pupọ ti o le ṣiṣẹ ni ẹyọkan. Awọn aṣayan wọnyi pẹlu atẹle naa:

  • maṣe ṣiṣẹ ni ipo daemon (nipasẹ aiyipada aṣoju bẹrẹ ni ipo daemon);
  • tiipa lẹhin lilo katalogi (nipasẹ aiyipada, aṣoju yoo tẹsiwaju lati ṣiṣẹ ati lo iṣeto ni ẹẹkan ni gbogbo wakati idaji);
  • kọ akọsilẹ iṣẹ alaye;
  • fihan awọn ayipada ninu awọn faili.

Aṣoju naa ni ipo iṣẹ laisi awọn ayipada - o le lo nigbati o ko ni idaniloju pe o ti kọ iṣeto to pe ati pe o fẹ lati ṣayẹwo kini gangan aṣoju yoo yipada lakoko iṣẹ. Ipo yii ṣiṣẹ nipasẹ paramita --noop lori laini aṣẹ: sudo puppet agent -t --noop.

Ni afikun, o le mu akọọlẹ aṣiṣe ṣiṣẹ - ninu rẹ, puppet kọwe nipa gbogbo awọn iṣe ti o ṣe: nipa awọn orisun ti o n ṣiṣẹ lọwọlọwọ, nipa awọn aye ti orisun yii, nipa kini awọn eto ti o ṣe ifilọlẹ. Dajudaju eyi jẹ paramita kan --debug.

Olupin

Emi kii yoo gbero iṣeto ni kikun ti pappetserver ati fifi koodu ranṣẹ si ninu nkan yii; Emi yoo sọ nikan pe ninu apoti naa ẹya iṣẹ ṣiṣe ni kikun ti olupin ti ko nilo iṣeto ni afikun lati ṣiṣẹ pẹlu nọmba kekere ti awọn apa (sọ, to ọgọrun). Nọmba nla ti awọn apa yoo nilo yiyi - nipasẹ aiyipada, awọn ifilọlẹ puppetserver ko ju awọn oṣiṣẹ mẹrin lọ, fun iṣẹ ṣiṣe ti o tobi julọ o nilo lati mu nọmba wọn pọ si ati maṣe gbagbe lati mu awọn opin iranti pọ si, bibẹẹkọ olupin naa yoo gba idoti pupọ julọ akoko naa.

Imuṣiṣẹ koodu - ti o ba nilo ni iyara ati irọrun, lẹhinna wo (ni r10k)[https://github.com/puppetlabs/r10k], fun awọn fifi sori ẹrọ kekere o yẹ ki o jẹ to.

Afikun 2: Awọn Itọsọna ifaminsi

  1. Gbe gbogbo kannaa ni awọn kilasi ati awọn asọye.
  2. Jeki awọn kilasi ati awọn asọye ni awọn modulu, kii ṣe ni awọn ifihan ti n ṣalaye awọn apa.
  3. Lo awọn otitọ.
  4. Maṣe ṣe ifs da lori awọn orukọ ile-iṣẹ.
  5. Lero ọfẹ lati ṣafikun awọn paramita fun awọn kilasi ati awọn asọye - eyi dara julọ ju ọgbọn ti ko tọ ti o farapamọ sinu ara ti kilasi / asọye.

Emi yoo ṣe alaye idi ti Mo ṣeduro ṣiṣe eyi ni nkan atẹle.

ipari

Jẹ ká pari pẹlu awọn ifihan. Ninu nkan atẹle Emi yoo sọ fun ọ nipa Hiera, ENC ati PuppetDB.

Awọn olumulo ti o forukọsilẹ nikan le kopa ninu iwadi naa. wọle, Jowo.

Ni otitọ, ohun elo pupọ diẹ sii - Mo le kọ awọn nkan lori awọn akọle atẹle, dibo lori kini iwọ yoo nifẹ si kika nipa:

  • 59,1%To ti ni ilọsiwaju omolankidi itumọ ti - diẹ ninu awọn tókàn-ipele nik: losiwajulosehin, ìyàwòrán ati awọn miiran lambda expressions, awọn oluşewadi-odè, okeere oro ati inter-ogun ibaraẹnisọrọ nipasẹ Puppet, afi, awọn olupese, abstract data orisi.13
  • 31,8%“Emi ni alabojuto iya mi” tabi bii awa ni Avito ṣe ṣe ọrẹ pẹlu ọpọlọpọ awọn olupin poppet ti awọn ẹya oriṣiriṣi, ati, ni ipilẹ, apakan nipa iṣakoso olupin poppet.7
  • 81,8%Bawo ni a ṣe kọ koodu puppet: ohun elo, iwe, idanwo, CI/CD.18

22 olumulo dibo. 9 olumulo abstained.

orisun: www.habr.com