Introduction to Puppet

ʻO ka Puppet kahi ʻōnaehana hoʻonohonoho hoʻonohonoho. Hoʻohana ʻia ia e lawe i nā pūʻali i ka mokuʻāina i makemake ʻia a mālama i kēia mokuʻāina.

Ua hana au me Puppet no ʻelima mau makahiki i kēia manawa. ʻO kēia kikokikona he unuhi a hoʻonohonoho hou ʻia o nā kumu nui mai ka palapala kūhelu, e hiki ai i nā poʻe hoʻomaka ke hoʻomaopopo koke i ke ʻano o ka Puppet.

Introduction to Puppet

ʻIke ʻike

ʻO ka ʻōnaehana hana ʻo Puppet ka mea kūʻai aku, ʻoiai ke kākoʻo nei i ka hana serverless me nā hana liʻiliʻi.

Hoʻohana ʻia kahi hiʻohiʻona huki: ma ka maʻamau, hoʻokahi manawa i kēlā me kēia hapalua hola, hoʻopili nā mea kūʻai aku i ke kikowaena no kahi hoʻonohonoho a hoʻohana iā ia. Inā ʻoe i hana pū me Ansible, a laila hoʻohana lākou i kahi ʻano hoʻohālike ʻē aʻe: hoʻomaka ka luna hoʻomalu i ke kaʻina hana o ka hoʻopili ʻana, ʻaʻole pili nā mea kūʻai aku i kekahi mea.

I ka wā o ke kamaʻilio pūnaewele, hoʻohana ʻia ka hoʻopunipuni TLS ʻelua: ʻo ke kikowaena a me ka mea kūʻai aku i kā lākou mau kī ponoʻī a me nā palapala hōʻoia. Hoʻopuka maʻamau ka server i nā palapala hōʻoia no nā mea kūʻai aku, akā ma ke kumu hiki ke hoʻohana i kahi CA waho.

Introduction to manifestos

Ma ka hua'ōlelo Puppet i ke kikowaena papeti hoʻohui nodes (nodes). Ua kākau ʻia ka hoʻonohonoho no nā nodes ma nā hōʻike ma kahi ʻōlelo hoʻolālā kūikawā - Puppet DSL.

ʻO ka Puppet DSL he ʻōlelo hoʻolaha. Hōʻike ia i ke kūlana i makemake ʻia o ka node ma ke ʻano o ka hoʻolaha ʻana o nā kumuwaiwai pākahi, no ka laʻana:

  • Aia ka faila a loaʻa iā ia kahi kikoʻī kikoʻī.
  • Hoʻokomo ʻia ka pūʻolo.
  • Ua hoʻomaka ka lawelawe.

Hiki ke hoʻohui i nā kumuwaiwai:

  • Aia nā hilinaʻi, pili lākou i ke ʻano o ka hoʻohana ʻana i nā kumuwaiwai.
    No ka laʻana, "hoʻokomo mua i ka pūʻolo, a laila hoʻoponopono i ka faila hoʻonohonoho, a laila hoʻomaka i ka lawelawe."
  • Aia nā leka hoʻomaopopo - inā hoʻololi ʻia kahi kumuwaiwai, hoʻouna ʻo ia i nā leka hoʻomaopopo i nā kumuwaiwai i kau inoa ʻia.
    No ka laʻana, inā hoʻololi ka faila hoʻonohonoho, hiki iā ʻoe ke hoʻomaka hou i ka lawelawe.

Eia kekahi, he mau hana a me nā ʻano like ka Puppet DSL, a me nā ʻōlelo kūlana a me nā mea koho. Kākoʻo ʻia nā ʻano hana hoʻohālike like ʻole - EPP a me ERB.

Ua kākau ʻia ka Puppet ma Ruby, no laila ua lawe ʻia nā mea hana a me nā huaʻōlelo mai laila. ʻAe ʻo Ruby iā ʻoe e hoʻonui i ka Puppet - hoʻohui i ka loiloi paʻakikī, nā ʻano kumu waiwai hou, nā hana.

ʻOiai e holo ana ʻo Puppet, ua hōʻuluʻulu ʻia nā hōʻike no kēlā me kēia node kikoʻī ma ke kikowaena i kahi papa kuhikuhi. papa kuhikuhi he papa inoa o nā kumuwaiwai a me ko lākou mau pilina ma hope o ka helu ʻana i ka waiwai o nā hana, nā ʻano like ʻole a me ka hoʻonui ʻana i nā ʻōlelo kūlana.

Syntax a me ke codestyle

Eia nā ʻāpana o ka palapala kūhelu e kōkua iā ʻoe e hoʻomaopopo i ka syntax inā ʻaʻole lawa nā hiʻohiʻona i hāʻawi ʻia:

Eia kekahi laʻana o ke ʻano o ka hōʻike:

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

ʻAʻole koi ʻia ka hoʻopaʻa ʻana a me ka hoʻokaʻawale ʻana i nā laina, akā aia kahi ʻōlelo aʻoaʻo alakaʻi alakaʻi kaila. Hōʻuluʻulu manaʻo:

  • ʻAʻole hoʻohana ʻia nā ʻāpana ʻelua, ʻaʻole i hoʻohana ʻia nā pā.
  • Hoʻokaʻawale ʻia nā pale pale e kahi ākea; ʻaʻole hoʻokaʻawale ʻia nā kolone e kahi ākea.
  • Koma ma hope o kēlā me kēia ʻāpana, me ka mea hope. Aia kēlā me kēia ʻāpana ma kahi laina ʻokoʻa. Hana ʻia kahi ʻokoʻa no ka hihia me ka ʻole o nā ʻāpana a me hoʻokahi ʻāpana: hiki iā ʻoe ke kākau ma ka laina hoʻokahi a ʻaʻohe koma (i.e. resource { 'title': } и resource { 'title': param => value }).
  • Pono nā pua ma nā ʻāpana i ka pae like.
  • Ua kākau ʻia nā pua pili waiwai ma mua o lākou.

Kahi o nā faila ma ka pappetserver

No ka wehewehe hou aku, e hoʻolauna wau i ka manaʻo o ka "papa kuhikuhi kumu". ʻO ka papa kuhikuhi kumu ka papa kuhikuhi i loaʻa ka hoʻonohonoho Puppet no kahi node kikoʻī.

ʻOkoʻa ka papa kuhikuhi kumu ma muli o ka mana o ka Puppet a me nā kaiapuni i hoʻohana ʻia. ʻO nā kaiapuni nā pūʻulu kūʻokoʻa o ka hoʻonohonoho i mālama ʻia i loko o nā papa kuhikuhi kaʻawale. Hoʻohana pinepine ʻia me ka git, kahi i hana ʻia ai nā kaiapuni mai nā lālā git. No laila, aia kēlā me kēia node i kahi kaiapuni a i ʻole. Hiki ke hoʻonohonoho ʻia kēia ma ka node ponoʻī, a i ʻole ma ENC, aʻu e kamaʻilio ai ma ka ʻatikala aʻe.

  • Ma ke kolu o ka mana ("old Puppet") ka papa kuhikuhi kumu /etc/puppet. He koho ka hoʻohana ʻana i nā kaiapuni - no ka laʻana, ʻaʻole mākou e hoʻohana me ka Puppet kahiko. Inā hoʻohana ʻia nā kaiapuni, mālama mau ʻia lākou i loko /etc/puppet/environments, ʻo ka papa kuhikuhi kumu ka papa kuhikuhi kaiapuni. Inā ʻaʻole hoʻohana ʻia nā kaiapuni, ʻo ka papa kuhikuhi kumu ka papa kuhikuhi kumu.
  • E hoʻomaka ana mai ka mana ʻehā ("Puppet hou"), lilo ka hoʻohana ʻana i nā kaiapuni i mea koi, a ua hoʻoneʻe ʻia ka papa kuhikuhi kumu i /etc/puppetlabs/code. No laila, mālama ʻia nā kaiapuni i loko /etc/puppetlabs/code/environments, ʻo ka papa kuhikuhi kumu ka papa kuhikuhi kaiapuni.

Pono e loaʻa kahi papa kuhikuhi ma ka papa kuhikuhi kumu manifests, i loaʻa hoʻokahi a ʻoi aku paha nā hōʻike e wehewehe ana i nā nodes. Eia kekahi, pono e loaʻa kahi subdirectory modules, aia nā modula. E haʻi wau iā ʻoe i nā modules ma hope iki. Eia kekahi, hiki i ka Puppet kahiko ke loaʻa i kahi papa kuhikuhi files, aia nā faila like ʻole a mākou e kope ai i nā nodes. I ka Puppet hou, waiho ʻia nā faila a pau i nā modules.

Aia nā faila Manifest i ka hoʻonui .pp.

ʻO kekahi mau hiʻohiʻona hakakā

ʻO ka wehewehe ʻana i ka node a me ka waiwai ma luna

Ma ka node server1.testdomain pono e hana i kahi faila /etc/issue me ka maʻiʻo Debian GNU/Linux n l. Pono ka faila e ka mea hoʻohana a me ka hui root, pono ke kuleana komo 644.

Kākau mākou i kahi manifesto:

node 'server1.testdomain' {   # блок конфигурации, относящийся к ноде server1.testdomain
    file { '/etc/issue':   # описываем файл /etc/issue
        ensure  => present,   # этот файл должен существовать
        content => 'Debian GNU/Linux n l',   # у него должно быть такое содержимое
        owner   => root,   # пользователь-владелец
        group   => root,   # группа-владелец
        mode    => '0644',   # права на файл. Они заданы в виде строки (в кавычках), потому что иначе число с 0 в начале будет воспринято как записанное в восьмеричной системе, и всё пойдёт не так, как задумано
    }
}

Nā pilina ma waena o nā kumuwaiwai ma kahi node

Ma ka node server2.testdomain Pono e holo ʻo nginx, e hana me kahi hoʻonohonoho i hoʻomākaukau mua ʻia.

E hoʻopau kākou i ka pilikia:

  • Pono e hoʻokomo i ka pūʻolo nginx.
  • Pono e kope ʻia nā faila hoʻonohonoho mai ke kikowaena.
  • Pono e holo ka lawelawe nginx.
  • Inā hōʻano hou ka hoʻonohonoho, pono e hoʻomaka hou ka lawelawe.

Kākau mākou i kahi manifesto:

node 'server2.testdomain' {   # блок конфигурации, относящийся к ноде server2.testdomain
    package { 'nginx':   # описываем пакет nginx
        ensure => installed,   # он должен быть установлен
    }
  # Прямая стрелка (->) говорит о том, что ресурс ниже должен
  # создаваться после ресурса, описанного выше.
  # Такие зависимости транзитивны.
    -> file { '/etc/nginx':   # описываем файл /etc/nginx
        ensure  => directory,   # это должна быть директория
        source  => 'puppet:///modules/example/nginx-conf',   # её содержимое нужно брать с паппет-сервера по указанному адресу
        recurse => true,   # копировать файлы рекурсивно
        purge   => true,   # нужно удалять лишние файлы (те, которых нет в источнике)
        force   => true,   # удалять лишние директории
    }
  # Волнистая стрелка (~>) говорит о том, что ресурс ниже должен
  # подписаться на изменения ресурса, описанного выше.
  # Волнистая стрелка включает в себя прямую (->).
    ~> service { 'nginx':   # описываем сервис nginx
        ensure => running,   # он должен быть запущен
        enable => true,   # его нужно запускать автоматически при старте системы
    }
  # Когда ресурс типа service получает уведомление,
  # соответствующий сервис перезапускается.
}

No ka hana ʻana, pono ʻoe e pili ana i kēia wahi faila ma ka server puppet:

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

Nā ʻano waiwai

Hiki ke ʻike ʻia kahi papa inoa piha o nā ʻano kumuwaiwai i kākoʻo ʻia ma aneʻi ma ka palapala, maʻaneʻi e wehewehe au i ʻelima mau ʻano kumu, i kaʻu hana i lawa no ka hoʻoponopono ʻana i ka hapa nui o nā pilikia.

AEI

Mālama i nā faila, nā papa kuhikuhi, nā symlinks, nā mea i loko, a me nā kuleana komo.

Nā Pālākiō:

  • inoa waiwai — ala i ka faila (koho)
  • Ala - ala i ka faila (inā ʻaʻole i kuhikuhi ʻia ma ka inoa)
  • hamama ai - ʻano waihona:
    • absent - holoi i kahi faila
    • present - pono e loaʻa kahi faila o kēlā me kēia ʻano (inā ʻaʻohe faila, e hana ʻia kahi faila maʻamau)
    • file - waihona maʻamau
    • directory - papa kuhikuhi
    • link - hoʻopaʻa inoa
  • maʻiʻo - nā waihona waihona (kūpono wale no nā faila maʻamau, ʻaʻole hiki ke hoʻohana pū me kahi ai ole ia, polokalamu)
  • kahi - he loulou i ke ala āu e makemake ai e kope i nā mea o ka faila (ʻaʻole hiki ke hoʻohana pū me maʻiʻo ai ole ia, polokalamu). Hiki ke kuhikuhi ʻia ma ke ʻano he URI me kahi hoʻolālā puppet: (a laila e hoʻohana ʻia nā faila mai ka server puppet), a me ka hoʻolālā http: (Manaʻo wau ua maopopo ka mea e hiki mai ana ma kēia hihia), a me ke kiʻi file: a i ʻole ma ke ʻano he ala paʻa ʻole me ka schema (a laila e hoʻohana ʻia ka faila mai ka FS kūloko ma ka node)
  • polokalamu - kahi e kuhikuhi ai ka symlink (ʻaʻole hiki ke hoʻohana pū me maʻiʻo ai ole ia, kahi)
  • ka mea nāna - ka mea hoʻohana nona ka faila
  • hui - ka hui e pono ai ka faila
  • ano - nā ʻae faila (ma ke ʻano he string)
  • hoʻohoihoi hou - hiki ke hana i ka papa kuhikuhi recursive
  • ka holoi - hiki ke holoi i nā faila i wehewehe ʻole ʻia ma ka Puppet
  • ikaika - hiki ke holoi i nā papa kuhikuhi ʻaʻole i wehewehe ʻia ma ka Puppet

'ōpili

Hoʻokomo a wehe i nā pūʻolo. Hiki iā ia ke mālama i nā leka hoʻomaopopo - hoʻokomo hou i ka pūʻolo inā ʻōlelo ʻia ka ʻāpana reinstall_on_refresh.

Nā Pālākiō:

  • inoa waiwai - inoa pūʻolo (koho)
  • inoa - inoa pūʻolo (inā ʻaʻole i kuhikuhi ʻia ma ka inoa)
  • pūnaewele - ka luna pūʻolo e hoʻohana ai
  • hamama ai — kūlana makemake o ka pūʻolo:
    • present, installed - hoʻokomo ʻia kekahi mana
    • latest - hoʻokomo ʻia ka mana hou loa
    • absent - holoi ʻia (apt-get remove)
    • purged - holoi ʻia me nā faila hoʻonohonoho (apt-get purge)
    • held - laka ʻia ka mana pūʻolo (apt-mark hold)
    • любая другая строка - ua hoʻokomo ʻia ka mana i ʻōlelo ʻia
  • reinstall_on_refresh - inā a true, a laila ma ka loaʻa ʻana o ka leka hoʻomaopopo e hoʻokomo hou ʻia ka pūʻolo. Maikaʻi no ka hāʻawi ʻana i kumu, kahi e pono ai ke kūkulu hou ʻana i nā pūʻolo i ka wā e hoʻololi ai i nā ʻāpana kūkulu. Default false.

hana

Mālama i nā lawelawe. Hiki ke hana i nā leka hoʻomaopopo - hoʻomaka hou i ka lawelawe.

Nā Pālākiō:

  • inoa waiwai - lawelawe ʻia e mālama ʻia (koho)
  • inoa - ka lawelawe e pono e mālama ʻia (inā ʻaʻole i kuhikuhi ʻia ma ka inoa)
  • hamama ai - kūlana makemake o ka lawelawe:
    • running - hoʻokuʻu ʻia
    • stopped - kū
  • ho'ā — hoʻomalu i ka hiki ke hoʻomaka i ka lawelawe:
    • true - ua hoʻohana ʻia ka autorun (systemctl enable)
    • mask - hoʻonalohelohe (systemctl mask)
    • false — ua pio ka autorun (systemctl disable)
  • e hoʻomaka hou - kauoha e hoʻomaka hou i ka lawelawe
  • kūlana — kauoha e nānā i ke kūlana lawelawe
  • hoʻomaka hou - e hōʻike inā kākoʻo ka initscript lawelawe i ka hoʻomaka hou ʻana. Ina false a ua kuhikuhi ʻia ka ʻāpana e hoʻomaka hou - hoʻohana ʻia ka waiwai o kēia ʻāpana. Ina false a me ka palena e hoʻomaka hou ʻaʻole i kuhikuhi ʻia - ua hoʻopau ʻia ka lawelawe a hoʻomaka hou (akā hoʻohana ʻo systemd i ke kauoha systemctl restart).
  • hasstatus - hōʻike inā kākoʻo ka initscript lawelawe i ke kauoha status. ^ E Ha yM. Inā false, a laila hoʻohana ʻia ka waiwai hoʻohālikelike kūlana. Default true.

exec

Holo i nā kauoha waho. Inā ʻaʻole ʻoe e kuhikuhi i nā ʻāpana hana, wale ina, koe ai ole ia, hōʻoluʻolu, e holo ana ke kauoha i na manawa a pau e holo ai ka Puppet. Hiki ke hana i nā leka hoʻomaopopo - holo i kahi kauoha.

Nā Pālākiō:

  • inoa waiwai — kauoha e hoʻokō ʻia (koho)
  • kauoha - ke kauoha e hoʻokō ʻia (inā ʻaʻole i kuhikuhi ʻia ma ka inoa)
  • Ala - nā ala e ʻimi ai i ka faila hiki ke hoʻokō
  • wale ina - inā ua hoʻopau ʻia ke kauoha i hōʻike ʻia ma kēia ʻāpana me kahi helu hoʻihoʻi ʻole, e hoʻokō ʻia ke kauoha nui
  • koe - inā ua hoʻopau ʻia ke kauoha i hōʻike ʻia ma kēia ʻāpana me kahi code hoʻihoʻi ʻole, e hoʻokō ʻia ke kauoha nui.
  • hana - inā ʻaʻole i loaʻa ka faila i ʻōlelo ʻia ma kēia ʻāpana, e hoʻokō ʻia ke kauoha nui
  • hōʻoluʻolu - inā a true, a laila e holo wale ʻia ke kauoha ke loaʻa i kēia exec ka leka hoʻomaopopo mai nā kumuwaiwai ʻē aʻe
  • cwd — papa kuhikuhi kahi e holo ai ke kauoha
  • mea hoʻohana - ka mea hoʻohana e holo ai ke kauoha
  • pūnaewele - pehea e holo ai i ke kauoha:
    • pono - ua hana wale ʻia kahi kaʻina hana keiki, e hōʻoia e kuhikuhi Ala
    • iwi - hoʻokuʻu ʻia ke kauoha ma ka pūpū /bin/sh, ʻaʻole hiki ke kuhikuhi ʻia Ala, hiki iā ʻoe ke hoʻohana i ka globbing, nā paipu a me nā hiʻohiʻona ʻē aʻe. ʻIke ʻia maʻamau inā loaʻa kekahi mau huaʻōlelo kūikawā (|, ;, &&, || a pēlā aku).

cron

Kāohi i nā cronjobs.

Nā Pālākiō:

  • inoa waiwai - kekahi ʻano mea hōʻike
  • hamama ai - kūlana crownjob:
    • present - hana inā ʻaʻole i loaʻa
    • absent - holoi inā loaʻa
  • kauoha - he aha ke kauoha e holo ai
  • 'ia - ma kahi e holo ai ke kauoha (papa inoa o nā ʻano hoʻololi a me kā lākou mau waiwai ma o =)
  • mea hoʻohana - mai ka mea hoʻohana e holo i ke kauoha
  • minuke, hola, lā pule, mahina, lā mahina - i ka manawa e holo ai cron. Inā ʻaʻole i kuhikuhi ʻia kekahi o kēia mau ʻano, ʻo kona waiwai ma ka crontab *.

Ma ka Puppet 6.0 cron me he mea lā wehe ʻia mai ka pahu i ka puppetserver, no laila ʻaʻohe palapala ma ka pūnaewele maʻamau. Akā ʻo ia aia i loko o ka pahu i ka puppet-agent, no laila ʻaʻohe pono e hoʻokomo kaʻawale. Hiki iā ʻoe ke ʻike i ka palapala no ia mea i ka palapala no ka lima o ka mana o Puppet, aiʻole ma GitHub.

E pili ana i nā kumuwaiwai ma ka laulā

Nā koi no ka ʻokoʻa waiwai

ʻO ka hewa maʻamau a mākou e hālāwai ai Hoʻolaha pālua. Loaʻa kēia hewa ke ʻike ʻia ʻelua a ʻoi aku paha nā kumuwaiwai o ka ʻano like me ka inoa like i ka papa kuhikuhi.

No laila, e kākau hou wau: ʻAʻole pono nā hōʻike no ka node hoʻokahi i nā kumuwaiwai o ke ʻano like me ka inoa like!

I kekahi manawa pono e hoʻokomo i nā pūʻolo me ka inoa hoʻokahi, akā me nā mana hoʻokele ʻokoʻa. I kēia hihia, pono ʻoe e hoʻohana i ka parameter namee pale i ka hewa:

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

Loaʻa i nā ʻano kumuwaiwai ʻē aʻe nā koho like e kōkua i ka pale ʻana i ka hoʻopālua − name у hana, command у exec, a laila.

Metaparameters

Loaʻa i kēlā me kēia ʻano kumuwaiwai kekahi mau palena kūikawā, me ka nānā ʻole i kona ʻano.

Papa inoa piha o nā ʻāpana meta ma ka palapala Puppet.

Papa inoa pōkole:

  • makemake — hōʻike kēia ʻāpana i nā kumuwaiwai e hilinaʻi nei kēia kumuwaiwai.
  • imua o - Hōʻike kēia ʻāpana i nā kumuwaiwai e pili ana i kēia kumuwaiwai.
  • kakau - ke kuhikuhi nei kēia ʻāpana i nā kumuwaiwai e loaʻa ai nā leka hoʻomaopopo.
  • hoʻokaʻaʻike — Hōʻike kēia ʻāpana i nā kumuwaiwai e loaʻa i nā leka mai kēia kumuwaiwai.

ʻO nā metaparameters a pau i helu ʻia e ʻae i ka loulou punawai hoʻokahi a i ʻole ka pūʻulu o nā loulou i nā bracket square.

Nā loulou i nā kumuwaiwai

ʻO ka loulou punawai kahi ʻōlelo wale nō o ka punawai. Hoʻohana nui ʻia lākou e hōʻike i nā hilinaʻi. ʻO ka hoʻopaʻa ʻana i kahi punawai ʻaʻole i loaʻa ke kumu i kahi hewa hōʻuluʻulu.

Penei ka syntax o ka loulou: ʻano punawai me kahi hua nui (inā loaʻa i ka inoa ʻano nā ʻāpana ʻelua, a laila ua hoʻopaʻa ʻia kēlā me kēia ʻāpana o ka inoa ma waena o nā kolonā), a laila ka inoa kumu i nā bracket square (ʻo ka hihia o ka inoa. ʻaʻole loli!). ʻAʻole pono nā hakahaka; kākau ʻia nā bracket square ma hope koke o ka inoa ʻano.

Pākuhi:

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

Nā hilinaʻi a me nā hoʻolaha

Palapala ma ʻaneʻi.

E like me ka mea i ʻōlelo ʻia ma mua, ʻo nā hilinaʻi maʻalahi ma waena o nā kumuwaiwai he transitive. Ma ke ala, e makaʻala i ka hoʻohui ʻana i nā hilinaʻi - hiki iā ʻoe ke hana i nā hilinaʻi cyclic, kahi e hoʻopiʻi hewa ai.

ʻAʻole like me nā hilinaʻi, ʻaʻole transitive nā leka hoʻomaopopo. Hoʻopili kēia mau lula no ka hoʻolaha ʻana:

  • Inā loaʻa i ka punawai kahi leka hoʻomaopopo, hoʻonui ʻia ia. ʻO nā hana hou e pili ana i ke ʻano kumu waiwai − exec holo i ke kauoha, hana hoʻomaka hou i ka lawelawe, 'ōpili hoʻouka hou i ka pūʻolo. Inā ʻaʻole i wehewehe ʻia kahi hana hoʻohou i ka punawai, a laila ʻaʻohe mea e hana.
  • I ka holo ʻana o ka Puppet, hoʻonui hou ʻia ka punawai ma mua o hoʻokahi manawa. Hiki kēia no ka mea aia nā hoʻolaha i nā hilinaʻi a ʻaʻole i loko o ka pakuhi hilinaʻi nā pōʻai.
  • Inā hoʻololi ʻo Puppet i ke kūlana o kahi kumuwaiwai, hoʻouna ka punawai i nā leka hoʻomaopopo i nā kumuwaiwai āpau i kākau inoa ʻia.
  • Inā hōʻano hou ʻia kahi kumuwaiwai, hoʻouna ʻo ia i nā leka hoʻomaopopo i nā kumuwaiwai āpau i kau inoa iā ia.

Ka mālama ʻana i nā ʻāpana i ʻike ʻole ʻia

Ma ke ʻano maʻamau, inā ʻaʻole i loaʻa ka waiwai paʻa i kekahi ʻāpana waiwai a ʻaʻole i kuhikuhi ʻia kēia ʻāpana i ka hōʻike, a laila ʻaʻole e hoʻololi ʻo Puppet i kēia waiwai no ka waiwai pili ma ka node. No ka laʻana, inā he kumuwaiwai o ke ʻano AEI ʻaʻole i kuhikuhi ʻia ka ʻāpana owner, a laila ʻaʻole e hoʻololi ʻo Puppet i ka mea nona ka faila pili.

Introduction to classes, variables and definitions

Inā paha he nui kā mākou mau node i ka ʻāpana like o ka hoʻonohonoho, akā aia kekahi mau ʻokoʻa - inā ʻaʻole hiki iā mākou ke wehewehe i nā mea āpau i hoʻokahi poloka. node {}. ʻOiaʻiʻo, hiki iā ʻoe ke kope kope i nā ʻāpana like o ka hoʻonohonoho, akā ma ka laulā he hopena maikaʻi ʻole kēia - ke ulu nei ka hoʻonohonoho, a inā ʻoe e hoʻololi i ka ʻāpana nui o ka hoʻonohonoho, pono ʻoe e hoʻoponopono i ka mea like ma nā wahi he nui. I ka manawa like, ua maʻalahi ke kuhi hewa, a ma ke ʻano nui, ua hoʻokumu ʻia ke kumu DRY (mai hana hou iā ʻoe iho) no kahi kumu.

No ka hoʻoponopono i kēia pilikia aia kahi hoʻolālā e like me класс.

Nā Palapala

Papa he poloka inoa o ka poppet code. Pono nā papa e hoʻohana hou i ke code.

Pono e wehewehe mua i ka papa. ʻAʻole hoʻohui ka wehewehe ponoʻī i nā kumuwaiwai ma nā wahi āpau. Hōʻike ʻia ka papa ma nā hōʻike:

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

Ma hope o kēia hiki ke hoʻohana ʻia ka papa:

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

He laʻana mai ka hana mua - e hoʻoneʻe i ka hoʻonohonoho a me ka hoʻonohonoho ʻana o nginx i kahi papa:

class nginx_example {
    package { 'nginx':
        ensure => installed,
    }
    -> file { '/etc/nginx':
        ensure => directory,
        source => 'puppet:///modules/example/nginx-conf',
        recure => true,
        purge  => true,
        force  => true,
    }
    ~> service { 'nginx':
        ensure => running,
        enable => true,
    }
}

node 'server2.testdomain' {
    include nginx_example
}

Nā Loli

ʻAʻole maʻalahi ka papa mai ka hiʻohiʻona mua no ka mea lawe mau ia i ka hoʻonohonoho nginx like. E hana i ke ala i ka hoʻololi hoʻonohonoho, a laila hiki ke hoʻohana ʻia kēia papa e hoʻokomo i ka nginx me kekahi hoʻonohonoho.

Hiki ke hana ka hoʻohana ʻana i nā mea hoʻololi.

Nānā: ʻaʻole hiki ke hoʻololi ʻia nā ʻano like ʻole i ka Puppet!

Eia kekahi, hiki ke kiʻi wale ʻia kahi mea hoʻololi ma hope o ka haʻi ʻia ʻana, inā ʻaʻole e lilo ka waiwai o ka mea hoʻololi undef.

Ka laʻana o ka hana ʻana me nā mea hoʻololi:

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

Ua loaʻa i ka Puppet nā papa inoa, a ua loaʻa nā mea hoʻololi wahi ʻike maka: Hiki ke wehewehe ʻia kahi ʻano like me ka inoa like ʻole ma nā inoa inoa like ʻole. I ka hoʻoholo ʻana i ka waiwai o kahi mea hoʻololi, ʻimi ʻia ka mea hoʻololi ma ka inoa inoa o kēia manawa, a laila ma ka inoa inoa hoʻopili, a pēlā aku.

Nā hiʻohiʻona namespace:

  • honua - nā ʻokoʻa ma waho o ka papa a i ʻole ka wehewehe node e hele i laila;
  • node namespace ma ka wehewehe node;
  • papa inoa ma ka wehewehe papa.

I mea e pale aku ai i ka pohihihi i ke komo ʻana i kahi ʻano hoʻololi, hiki iā ʻoe ke kuhikuhi i ka inoa inoa ma ka inoa hoʻololi:

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

E ʻae kākou ʻo ke ala i ka hoʻonohonoho nginx aia i ka loli $nginx_conf_source. A laila e nānā ka papa penei:

class nginx_example {
    package { 'nginx':
        ensure => installed,
    }
    -> file { '/etc/nginx':
        ensure => directory,
        source => $nginx_conf_source,   # здесь используем переменную вместо фиксированной строки
        recure => true,
        purge  => true,
        force  => true,
    }
    ~> service { 'nginx':
        ensure => running,
        enable => true,
    }
}

node 'server2.testdomain' {
    $nginx_conf_source = 'puppet:///modules/example/nginx-conf'
    include nginx_example
}

Eia nō naʻe, hewa ka laʻana i hāʻawi ʻia no ka mea aia kekahi "ʻike huna" ma kahi o ka papa i hoʻohana ʻia kahi ʻano me kēlā a me kēlā inoa. ʻOi aku ka pololei o ka hana ʻana i kēia ʻike ākea - hiki i nā papa ke loaʻa nā ʻāpana.

Nā palena papa he mau loli i ka papa inoa papa, ua kuhikuhi ʻia lākou ma ke poʻo papa a hiki ke hoʻohana ʻia e like me nā ʻano maʻamau i ke kino papa. Hōʻike ʻia nā waiwai o ka palena i ka wā e hoʻohana ai i ka papa ma ka hōʻike.

Hiki ke hoʻonohonoho ʻia ka ʻāpana i kahi waiwai paʻamau. Inā ʻaʻole i loaʻa ka waiwai paʻamau a ʻaʻole i hoʻonohonoho ʻia ka waiwai i ka wā i hoʻohana ʻia ai, e hoʻopiʻi ʻia ka hewa.

E hoʻohālikelike i ka papa mai ka laʻana ma luna a hoʻohui i ʻelua mau ʻāpana: ʻo ka mua, koi ʻia, ke ala i ka hoʻonohonoho ʻana, a ʻo ka lua, koho, ʻo ia ka inoa o ka pōʻai me ka nginx (ma Debian, no ka laʻana, aia nā pūʻulu. nginx, nginx-light, nginx-full).

# переменные описываются сразу после имени класса в круглых скобках
class nginx_example (
  $conf_source,
  $package_name = 'nginx-light', # параметр со значением по умолчанию
) {
  package { $package_name:
    ensure => installed,
  }
  -> file { '/etc/nginx':
    ensure  => directory,
    source  => $conf_source,
    recurse => true,
    purge   => true,
    force   => true,
  }
  ~> service { 'nginx':
    ensure => running,
    enable => true,
  }
}

node 'server2.testdomain' {
  # если мы хотим задать параметры класса, функция include не подойдёт* — нужно использовать resource-style declaration
  # *на самом деле подойдёт, но про это расскажу в следующей серии. Ключевое слово "Hiera".
  class { 'nginx_example':
    conf_source => 'puppet:///modules/example/nginx-conf',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

Ma ka Puppet, ua kikokiko ʻia nā ʻano like ʻole. ʻAi nui nā ʻano ʻikepili. Hoʻohana maʻamau ʻia nā ʻano ʻikepili e hōʻoia i nā koina parameter i hāʻawi ʻia i nā papa a me nā wehewehe. Inā ʻaʻole i kūlike ka palena i hala me ke ʻano i ʻōlelo ʻia, e kū mai ana kahi hewa hōʻuluʻulu.

Kākau ʻia ke ʻano ma mua o ka inoa ʻāpana:

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

Nā papa: hoʻokomo i ka inoa papa vs papa{'classname':}

He kumu waiwai kēlā me kēia papa papa. E like me nā ʻano kumuwaiwai ʻē aʻe, ʻaʻole hiki ke loaʻa ʻelua mau manawa o ka papa hoʻokahi ma ka node hoʻokahi.

Inā ʻoe e hoʻāʻo e hoʻohui i kahi papa i ka node hoʻokahi i ʻelua hoʻohana class { 'classname':} (ʻaʻohe ʻokoʻa, me nā ʻāpana ʻokoʻa a i ʻole like ʻole), e loaʻa kahi hewa compilation. Akā inā ʻoe e hoʻohana i kahi papa ma ke ʻano kumu waiwai, hiki iā ʻoe ke hoʻonohonoho koke i kāna mau ʻāpana āpau i ka hōʻike.

Eia naʻe, inā hoʻohana ʻoe include, a laila hiki ke hoʻohui ʻia ka papa i nā manawa he nui e like me ka makemake. ʻO ka mea ʻoiaʻiʻo include he hana idempotent e nānā inā ua hoʻohui ʻia kahi papa i ka papa kuhikuhi. Inā ʻaʻole ka papa i loko o ka papa kuhikuhi, hoʻohui ia, a inā i loaʻa ia, ʻaʻohe hana. Akā inā hoʻohana include ʻAʻole hiki iā ʻoe ke hoʻonohonoho i nā ʻāpana papa i ka wā o ka hoʻolaha ʻana o ka papa - pono e hoʻonohonoho ʻia nā ʻāpana āpau i makemake ʻia ma kahi kumu ʻikepili waho - Hiera a i ʻole ENC. E kamaʻilio mākou e pili ana iā lākou ma ka ʻatikala aʻe.

wehewehe

E like me ka mea i ʻōlelo ʻia ma ka poloka ma mua, ʻaʻole hiki ke loaʻa ka papa like ma kahi node ma mua o hoʻokahi manawa. Eia nō naʻe, i kekahi mau hihia, pono ʻoe e hoʻohana i ka poloka like o ke code me nā ʻāpana like ʻole ma ka node hoʻokahi. I nā huaʻōlelo ʻē aʻe, pono kahi ʻano waiwai nona ponoʻī.

No ka laʻana, no ka hoʻokomo ʻana i ka module PHP, hana mākou i kēia ma Avito:

  1. E hoʻouka i ka pūʻolo me kēia module.
  2. E hana kākou i faila hoʻonohonoho no kēia module.
  3. Hana mākou i kahi symlink i ka config no php-fpm.
  4. Hana mākou i kahi symlink i ka config no php cli.

Ma ia mau hihia, he hoʻolālā e like me wehewehe (wehewehe, wehewehe ʻano, ʻano kumu waiwai i wehewehe ʻia). Ua like ka Define me ka papa, akā aia nā ʻokoʻa: ʻo ka mua, ʻo kēlā me kēia Define he ʻano kumu waiwai, ʻaʻole he kumu; ʻO ka lua, loaʻa i kēlā me kēia wehewehe kahi ʻāpana implicit $title, kahi e hele ai ka inoa waiwai i ka wā i haʻi ʻia ai. E like me ka hihia o nā papa, pono e wehewehe mua ʻia kahi wehewehe, a laila hiki ke hoʻohana ʻia.

He laʻana maʻalahi me kahi module no PHP:

define php74::module (
  $php_module_name = $title,
  $php_package_name = "php7.4-${title}",
  $version = 'installed',
  $priority = '20',
  $data = "extension=${title}.son",
  $php_module_path = '/etc/php/7.4/mods-available',
) {
  package { $php_package_name:
    ensure          => $version,
    install_options => ['-o', 'DPkg::NoTriggers=true'],  # триггеры дебиановских php-пакетов сами создают симлинки и перезапускают сервис php-fpm - нам это не нужно, так как и симлинками, и сервисом мы управляем с помощью Puppet
  }
  -> file { "${php_module_path}/${php_module_name}.ini":
    ensure  => $ensure,
    content => $data,
  }
  file { "/etc/php/7.4/cli/conf.d/${priority}-${php_module_name}.ini":
    ensure  => link,
    target  => "${php_module_path}/${php_module_name}.ini",
  }
  file { "/etc/php/7.4/fpm/conf.d/${priority}-${php_module_name}.ini":
    ensure  => link,
    target  => "${php_module_path}/${php_module_name}.ini",
  }
}

node server3.testdomain {
  php74::module { 'sqlite3': }
  php74::module { 'amqp': php_package_name => 'php-amqp' }
  php74::module { 'msgpack': priority => '10' }
}

ʻO ke ala maʻalahi loa e hopu i ka hewa ʻōlelo Duplicate aia ma Define. Hana ʻia kēia inā loaʻa kahi wehewehe me ka inoa mau, a ʻelua a ʻoi aku paha nā manawa o kēia wehewehe ʻana ma kekahi node.

He mea maʻalahi ka pale ʻana iā ʻoe iho mai kēia: pono e loaʻa i nā kumuwaiwai āpau i loko o ka wehewehe ka inoa ma muli o $title. ʻO kahi mea ʻē aʻe he hoʻohui iidempotent o nā kumuwaiwai; i ka hihia maʻalahi, ua lawa ka neʻe ʻana i nā kumuwaiwai maʻamau i nā manawa āpau o ka wehewehe ʻana i kahi papa ʻokoʻa a hoʻokomo i kēia papa i ka wehewehe - hana. include manaʻo manaʻo.

Aia kekahi mau ala ʻē aʻe e hoʻokō ai i ka idempotency i ka hoʻohui ʻana i nā kumuwaiwai, ʻo ia hoʻi ka hoʻohana ʻana i nā hana defined и ensure_resources, akā e haʻi aku wau iā ʻoe e pili ana iā ia ma ka ʻāpana aʻe.

Nā hilinaʻi a me nā hoʻolaha no nā papa a me nā wehewehe

Hoʻohui nā papa a me nā wehewehe i nā lula e pili ana i ka lawelawe ʻana i nā hilinaʻi a me nā hoʻolaha:

  • ʻO ka hilinaʻi ma kahi papa / wehewehe e hoʻohui i nā hilinaʻi ma nā kumuwaiwai āpau o ka papa / wehewehe;
  • ka papa/define dependency e hoʻohui i nā hilinaʻi i nā papa a pau/define resources;
  • Hoʻolaha ka papa/define i nā kumuwaiwai āpau o ka papa/define;
  • papa inoa/define kau inoa i nā kumuwaiwai āpau o ka papa/define.

Nā ʻōlelo kūlana a me nā mea koho

Palapala ma ʻaneʻi.

if

He maʻalahi maʻaneʻi:

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

koe

inā ʻaʻole he inā i hoʻohuli: e hoʻokō ʻia ka poloka o ke code inā he wahaheʻe ka ʻōlelo.

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

hihia

ʻAʻohe mea paʻakikī ma ʻaneʻi. Hiki iā ʻoe ke hoʻohana i nā waiwai maʻamau (nā kaula, nā helu, a me nā mea ʻē aʻe), nā ʻōlelo maʻamau, a me nā ʻano ʻikepili e like me nā waiwai.

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

Nā mea koho

ʻO ka mea koho he kūkulu ʻōlelo e like me case, akā ma kahi o ka hoʻokō ʻana i kahi poloka code, hoʻihoʻi ia i kahi waiwai.

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

Nā Modula

Ke liʻiliʻi ka hoʻonohonoho, hiki ke maʻalahi ke mālama ʻia i hoʻokahi hōʻike. Akā ʻoi aku ka nui o nā hoʻonohonoho a mākou e wehewehe ai, ʻoi aku ka nui o nā papa a me nā nodes i loko o ka hōʻike, ulu ia, a lilo ia i mea paʻakikī ke hana pū me.

Eia kekahi, aia ka pilikia o ka hoʻohana hou ʻana i ke code - inā aia nā code āpau i hoʻokahi hōʻike, paʻakikī ke kaʻana like i kēia code me nā poʻe ʻē aʻe. No ka hoʻoponopono ʻana i kēia mau pilikia ʻelua, loaʻa i ka Puppet kahi hui i kapa ʻia ʻo modules.

Nā Modula - he mau papa kēia, wehewehe a me nā hui Puppet ʻē aʻe i waiho ʻia ma kahi papa kuhikuhi kaʻawale. I nā huaʻōlelo ʻē aʻe, ʻo kahi module kahi ʻāpana kūʻokoʻa o Puppet logic. Eia kekahi laʻana, aia kekahi module no ka hanaʻana me ka nginx, a aia i loko o ka mea a me ka mea wale nō e pono ai ke hana me ka nginx, aiʻole he module no ka hanaʻana me PHP, a pēlā aku.

Hoʻololi ʻia nā modula, a kākoʻo pū ʻia nā hilinaʻi o nā modula i kekahi. Aia kahi waihona wehe o nā modula - Puppet Forge.

Ma ke kikowaena papeti, aia nā modules i loko o ka subdirectory modules o ka papa kuhikuhi kumu. Aia i loko o kēlā me kēia module kahi papa kuhikuhi maʻamau - hōʻike, faila, templates, lib, a pēlā aku.

Hoʻolālā waihona i loko o kahi module

Aia i loko o ke kumu o ka module kēia mau papa kuhikuhi me nā inoa wehewehe:

  • manifests - aia nā manifestos
  • files - aia nā faila
  • templates - aia i loko o nā laʻana
  • lib — loaʻa iā ia ke code Ruby

ʻAʻole kēia he papa inoa piha o nā papa kuhikuhi a me nā faila, akā lawa ia no kēia ʻatikala no kēia manawa.

Nā inoa o nā kumuwaiwai a me nā inoa o nā faila ma ka module

Palapala ma ʻaneʻi.

ʻAʻole hiki ke kapa ʻia nā kumuwaiwai (nā papa, wehewehe) i loko o kahi module i nā mea āu e makemake ai. Eia kekahi, aia kahi leka pololei ma waena o ka inoa o kahi kumuwaiwai a me ka inoa o ka faila kahi e ʻimi ai ʻo Puppet i kahi wehewehe o ia kumuwaiwai. Inā hōʻole ʻoe i nā lula inoa, a laila ʻaʻole ʻike ʻo Puppet i ka wehewehe kumu, a loaʻa iā ʻoe kahi hewa compilation.

He maʻalahi nā lula:

  • Pono nā kumuwaiwai a pau i loko o kahi module i loko o ka namespace module. Inā kāhea ʻia ka module foo, a laila e kapa ʻia nā kumuwaiwai a pau i loko foo::<anything>, a i ole wale foo.
  • Pono ka waihona me ka inoa o ka module i loko o ka faila init.pp.
  • No nā kumuwaiwai ʻē aʻe, penei ka papa inoa o ka faila:
    • hoolei ia ka prefix me ka inoa module
    • ʻO nā kolonā pālua a pau, inā he, ua hoʻololi ʻia me nā ʻoki
    • hoʻonui ʻia .pp

E hōʻike aku au me kahi laʻana. E ʻōlelo kākou ke kākau nei au i modula nginx. Loaʻa iā ia nā kumuwaiwai penei:

  • класс nginx i wehewehe ʻia ma ka hōʻike init.pp;
  • класс nginx::service i wehewehe ʻia ma ka hōʻike service.pp;
  • wehewehe nginx::server i wehewehe ʻia ma ka hōʻike server.pp;
  • wehewehe nginx::server::location i wehewehe ʻia ma ka hōʻike server/location.pp.

Nā pola

ʻOiaʻiʻo, ua ʻike ʻoe i ke ʻano o nā mamana; ʻAʻole wau e wehewehe kikoʻī iā lākou ma aneʻi. Akā, e haʻalele wau i ka hihia loulou i Wikipedia.

Pehea e hoʻohana ai i nā templates: Hiki ke hoʻonui ʻia ke ʻano o kahi template me ka hoʻohana ʻana i kahi hana template, ka mea i hala i ke ala i ka template. No nā kumuwaiwai o ke ʻano AEI hoʻohana pū ʻia me ka ʻāpana content. No ka laʻana, e like me kēia:

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

Nānā ala <modulename>/<filename> hōʻike waihona <rootdir>/modules/<modulename>/templates/<filename>.

Hoʻohui, aia kahi hana inline_template - loaʻa iā ia ke kikokikona ma ke ʻano he hoʻokomo, ʻaʻole ka inoa faila.

I loko o nā hiʻohiʻona, hiki iā ʻoe ke hoʻohana i nā ʻano hoʻololi Puppet āpau i ka pae o kēia manawa.

Kākoʻo ʻo Puppet i nā laʻana ma ka format ERB a me EPP:

ʻO ka pōkole e pili ana iā ERB

Nā hale hoʻomalu:

  • <%= ВЫРАЖЕНИЕ %> — hookomo i ka waiwai o ka olelo
  • <% ВЫРАЖЕНИЕ %> — E helu i ka waiwai o ka olelo (me ka hookomo ole ia). ʻO nā ʻōlelo kūlana (inā) a me nā puka lou (kēlā me kēia) hele maʻamau maanei.
  • <%# КОММЕНТАРИЙ %>

Ua kākau ʻia nā ʻōlelo ma ERB ma Ruby (Embedded Ruby maoli ʻo ERB).

No ke komo ʻana i nā mea hoʻololi mai ka hōʻike, pono ʻoe e hoʻohui @ i ka inoa hoololi. No ka wehe ʻana i kahi hoʻomaha laina i ʻike ʻia ma hope o kahi kūkulu mana, pono ʻoe e hoʻohana i kahi hōʻailona pani -%>.

Ka laʻana o ka hoʻohana ʻana i ka laʻana

E ʻōlelo kākou ke kākau nei au i module e hoʻomalu iā ZooKeeper. ʻO ka papa kuleana no ka hana ʻana i ka config e like me kēia:

class zookeeper::configure (
  Array[String] $nodes,
  Integer $port_client,
  Integer $port_quorum,
  Integer $port_leader,
  Hash[String, Any] $properties,
  String $datadir,
) {
  file { '/etc/zookeeper/conf/zoo.cfg':
    ensure  => present,
    content => template('zookeeper/zoo.cfg.erb'),
  }
}

A me ka la'ana pili zoo.cfg.erb - No laila:

<% if @nodes.length > 0 -%>
<% @nodes.each do |node, id| -%>
server.<%= id %>=<%= node %>:<%= @port_leader %>:<%= @port_quorum %>;<%= @port_client %>
<% end -%>
<% end -%>

dataDir=<%= @datadir %>

<% @properties.each do |k, v| -%>
<%= k %>=<%= v %>
<% end -%>

Nā ʻoiaʻiʻo a me nā mea hoʻololi i kūkulu ʻia

ʻO ka manawa pinepine ka ʻāpana kikoʻī o ka hoʻonohonoho ʻana e pili ana i ka mea e hana nei ma ka node. No ka laʻana, e pili ana i ka mea i hoʻokuʻu ʻia ʻo Debian, pono ʻoe e hoʻokomo i hoʻokahi a i ʻole kekahi mana o ka pōʻai. Hiki iā ʻoe ke nānā pono i kēia mau mea āpau, kākau hou i nā hōʻike inā loli nā nodes. Akā ʻaʻole kēia he ala koʻikoʻi; ʻoi aku ka maikaʻi o ka automation.

No ka loaʻa ʻana o ka ʻike e pili ana i nā nodes, loaʻa i ka Puppet kahi hana i kapa ʻia ʻo facts. Nā mea pololei - ʻo kēia ka ʻike e pili ana i ka node, i loaʻa i nā hōʻike ma ke ʻano o nā mea hoʻololi maʻamau i ka inoa inoa honua. No ka laʻana, ka inoa hoʻokipa, ka mana o ka ʻōnaehana hana, ka papa hana ʻōnaehana, ka papa inoa o nā mea hoʻohana, ka papa inoa o nā mea hoʻohana pūnaewele a me kā lākou mau helu wahi, a ʻoi aku ka nui. Loaʻa nā ʻoiaʻiʻo ma nā hōʻike a me nā templates e like me nā loli maʻamau.

ʻO kahi laʻana o ka hana ʻana me nā ʻoiaʻiʻo:

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

ʻO ka ʻōlelo maʻamau, loaʻa i kahi ʻoiaʻiʻo kahi inoa (kuai) a me kahi waiwai (loaʻa nā ʻano ʻano like ʻole: nā kaula, arrays, nā puke wehewehe ʻōlelo). ʻAi pūʻulu o nā mea i kūkulu ʻia. Hiki iā ʻoe ke kākau iā ʻoe iho. Hōʻike ʻia nā mea hōʻiliʻili ʻoiaʻiʻo e like me nā hana ma Rubyelike me faila hiki ke hoʻokō. Hiki ke hōʻike ʻia nā ʻike ma ke ʻano waihona kikokikona me ka ʻikepili ma na node.

I ka wā o ka hana ʻana, kope mua ka luna pappet i nā mea hōʻiliʻili ʻoiaʻiʻo a pau mai ka pappetserver a i ka node, a laila hoʻokuʻu iā lākou a hoʻouna i nā ʻike i hōʻiliʻili ʻia i ke kikowaena; Ma hope o kēia, hoʻomaka ke kikowaena e hōʻuluʻulu i ka catalog.

ʻO nā ʻike ma ke ʻano o nā faila hiki ke hoʻokō

Hoʻokomo ʻia ia mau ʻike i loko o nā modules i ka papa kuhikuhi facts.d. ʻOiaʻiʻo, pono e hoʻokō ʻia nā faila. I ka wā e holo ai, pono lākou e hoʻopuka i ka ʻike i ka hoʻopuka maʻamau i ka YAML a i ʻole ke kī = ka waiwai.

Mai poina e pili ana nā ʻoiaʻiʻo i nā node a pau i mālama ʻia e ka poppet server kahi i kau ʻia ai kāu module. No laila, ma ka palapala, e mālama pono i ka ʻōnaehana i nā polokalamu a me nā faila e pono ai no kāu ʻoiaʻiʻo e hana.

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

Ruby ʻike

Hoʻokomo ʻia ia mau ʻike i loko o nā modules i ka papa kuhikuhi lib/facter.

# всё начинается с вызова функции Facter.add с именем факта и блоком кода
Facter.add('ladvd') do
# в блоках confine описываются условия применимости факта — код внутри блока должен вернуть true, иначе значение факта не вычисляется и не возвращается
  confine do
    Facter::Core::Execution.which('ladvdc') # проверим, что в PATH есть такой исполняемый файл
  end
  confine do
    File.socket?('/var/run/ladvd.sock') # проверим, что есть такой UNIX-domain socket
  end
# в блоке setcode происходит собственно вычисление значения факта
  setcode do
    hash = {}
    if (out = Facter::Core::Execution.execute('ladvdc -b'))
      out.split.each do |l|
        line = l.split('=')
        next if line.length != 2
        name, value = line
        hash[name.strip.downcase.tr(' ', '_')] = value.strip.chomp(''').reverse.chomp(''').reverse
      end
    end
    hash  # значение последнего выражения в блоке setcode является значением факта
  end
end

Nā ʻike kikokikona

Hoʻokomo ʻia kēlā mau ʻike ma nā nodes i ka papa kuhikuhi /etc/facter/facts.d i ka Puppet kahiko a i ʻole /etc/puppetlabs/facts.d i ka Puppet hou.

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

E kiʻi i nā ʻoiaʻiʻo

ʻElua ala e hoʻokokoke ai i ka ʻoiaʻiʻo:

  • ma o ka puke wehewehe'ōlelo $facts: $facts['fqdn'];
  • me ka hoʻohana ʻana i ka inoa ʻoiaʻiʻo e like me ka inoa hoʻololi: $fqdn.

ʻOi aku ka maikaʻi e hoʻohana i ka puke wehewehe ʻōlelo $facts, a ʻoi aku ka maikaʻi, e hōʻike i ka inoa inoa honua ($::facts).

Eia ka ʻāpana pili o ka palapala.

Nā mea hoʻololi i kūkulu ʻia

Ma waho aʻe o nā ʻoiaʻiʻo, aia kekahi kekahi mau hoololi, loaʻa ma ka inoa puni honua.

  • ʻoiaʻiʻo hilinaʻi - nā ʻano like ʻole i lawe ʻia mai ka palapala hōʻoia o ka mea kūʻai aku (no ka mea e hoʻopuka pinepine ʻia ka palapala hōʻoia ma kahi kikowaena poppet, ʻaʻole hiki i ka ʻelele ke lawe a hoʻololi i kāna palapala hōʻoia, no laila ua "hilinaʻi ʻia" nā mea hoʻololi): ka inoa o ka palapala hōʻoia, ka inoa o ka host and domain, nā hoʻonui mai ka palapala hōʻoia.
  • ʻike kikowaena —nā hoʻololi e pili ana i ka ʻike e pili ana i ke kikowaena—version, name, server IP address, environment.
  • nā ʻike kikoʻī - nā ʻano hoʻololi i hoʻohui pololei ʻia e ka ʻelele-puppet, ʻaʻole ma ka factor - inoa palapala, mana ʻelele, mana papeti.
  • nā mea hoʻololi haku - Nā hoʻololi Pappetmaster (sic!). Ua like ia me ka in ʻike kikowaena, loaʻa nā waiwai hoʻonohonoho hoʻonohonoho.
  • nā mea hoʻololi hōʻuluʻulu — nā ʻokoʻa ʻokoʻa o ka hui pū ʻana i kēlā me kēia ʻāpana: ka inoa o ka module o kēia manawa a me ka inoa o ka module i komo ai ka mea o kēia manawa. Hiki iā lākou ke hoʻohana, no ka laʻana, e nānā ʻaʻole hoʻohana pololei ʻia kāu mau papa pilikino mai nā modula ʻē aʻe.

Hoʻohui 1: pehea e holo ai a debug i kēia mau mea āpau?

Aia i loko o ka ʻatikala nā laʻana he nui o ke code papeti, akā ʻaʻole i haʻi iki iā mākou pehea e holo ai i kēia code. ʻAe, ke hoʻoponopono nei au iaʻu iho.

Ua lawa ka luna e holo i ka Puppet, akā no ka nui o nā hihia, pono ʻoe i kahi kikowaena.

Hoʻonohonoho

Ma ka liʻiliʻi mai ka mana XNUMX, nā pūʻolo puppet-agent mai waihona kūhelu Puppetlabs Loaʻa i nā mea hilinaʻi āpau (ruby a me nā pōhaku e pili ana), no laila ʻaʻohe pilikia o ka hoʻonohonoho ʻana (ke kamaʻilio nei wau e pili ana i ka hoʻoili ʻia ʻana o Debian - ʻaʻole mākou e hoʻohana i nā puʻupuʻu RPM).

Ma ka hihia maʻalahi, e hoʻohana i ka hoʻonohonoho pappet, ua lawa ia e hoʻomaka i ka ʻelele ma ke ʻano serverless: inā ua kope ʻia ke code papeti i ka node, hoʻomaka. puppet apply <путь к манифесту>:

atikhonov@atikhonov ~/puppet-test $ cat helloworld.pp 
node default {
    notify { 'Hello world!': }
}
atikhonov@atikhonov ~/puppet-test $ puppet apply helloworld.pp 
Notice: Compiled catalog for atikhonov.localdomain in environment production in 0.01 seconds
Notice: Hello world!
Notice: /Stage[main]/Main/Node[default]/Notify[Hello world!]/message: defined 'message' as 'Hello world!'
Notice: Applied catalog in 0.01 seconds

ʻOi aku ka maikaʻi, ʻoiaʻiʻo, e hoʻonohonoho i ka kikowaena a holo i nā ʻelele ma nā nodes ma ke ʻano daemon - a laila hoʻokahi manawa i kēlā me kēia hapalua hola e hoʻopili lākou i ka hoʻonohonoho i hoʻoiho ʻia mai ka kikowaena.

Hiki iā ʻoe ke hoʻohālike i ke kumu hoʻohālikelike o ka hana - hele i ka node āu e makemake ai a hoʻomaka sudo puppet agent -t. Ki -t (--test) ʻoiaʻiʻo e komo pū kekahi mau koho i hiki ke hoʻohana i kēlā me kēia. Aia kēia mau koho i kēia mau mea:

  • mai holo i ke ʻano daemon (ma ke ʻano maʻamau e hoʻomaka ka ʻelele ma ke ʻano daemon);
  • pani ʻia ma hope o ka hoʻohana ʻana i ka catalog (ma ka maʻamau, e hoʻomau ka luna i ka hana a hoʻopili i ka hoʻonohonoho hoʻokahi i kēlā me kēia hapalua hola);
  • kākau i kahi moʻolelo hana kikoʻī;
  • hōʻike i nā loli i nā faila.

He ʻano hana ka ʻelele me ka ʻole o nā loli - hiki iā ʻoe ke hoʻohana inā ʻaʻole ʻoe maopopo ua kākau ʻoe i ka hoʻonohonoho kūpono a makemake ʻoe e nānā i ka mea e hoʻololi ai ka ʻelele i ka wā o ka hana. Hoʻohana ʻia kēia ʻano e ka ʻāpana --noop ma ka laina kauoha: sudo puppet agent -t --noop.

Eia hou, hiki iā ʻoe ke hoʻololi i ka log debugging o ka hana - i loko o ia mea, kākau ʻo puppet e pili ana i nā hana āpau āna e hana ai: e pili ana i ka kumuwaiwai e hana nei i kēia manawa, e pili ana i nā ʻāpana o kēia kumuwaiwai, e pili ana i nā papahana e hoʻomaka ai. ʻOiaʻiʻo he parameter kēia --debug.

Server

ʻAʻole wau e noʻonoʻo i ka hoʻonohonoho piha o ka pappetserver a me ka hoʻopili ʻana i ke code iā ia ma kēia ʻatikala; E ʻōlelo wale wau aia ma waho o ka pahu aia kahi mana holoʻokoʻa o ka server ʻaʻole koi i kahi hoʻonohonoho hou e hana me kahi helu liʻiliʻi. nā nodes (e ʻōlelo, a hiki i ka haneli). ʻO ka nui o nā nodes e koi i ke kani - ma ke ʻano maʻamau, hoʻomaka ka puppetserver ma mua o ʻehā mau limahana, no ka hana ʻoi aku ka pono e hoʻonui i kā lākou helu a mai poina e hoʻonui i nā palena hoʻomanaʻo, i ʻole e hōʻiliʻili ka server i ka hapa nui o ka manawa.

Hoʻopuka code - inā makemake ʻoe iā ia me ka wikiwiki a me ka maʻalahi, a laila e nānā (ma r10k)[https://github.com/puppetlabs/r10k], no nā hoʻokomo liʻiliʻi e lawa pono.

Pākuʻi 2: Nā Kūlana Coding

  1. E kau i nā loina a pau i nā papa a me nā wehewehe.
  2. E mālama i nā papa a me nā wehewehe i loko o nā modula, ʻaʻole i nā hōʻike e wehewehe ana i nā nodes.
  3. E hoʻohana i nā ʻike.
  4. Mai hana i nā ifs ma muli o nā inoa hoʻokipa.
  5. E ʻoluʻolu e hoʻohui i nā ʻāpana no nā papa a me nā wehewehe - ʻoi aku ka maikaʻi ma mua o ka loiloi implicit huna ʻia i loko o ke kino o ka papa/define.

E wehewehe wau i ke kumu aʻu e paipai ai e hana i kēia ma ka ʻatikala aʻe.

hopena

E hoʻopau kākou me ka hoʻolauna. Ma ka ʻatikala aʻe e haʻi wau iā ʻoe e pili ana iā Hiera, ENC a me PuppetDB.

Hiki i nā mea hoʻohana i hoʻopaʻa inoa ʻia ke komo i ka noiʻi. Eʻe, e 'oluʻolu.

ʻOiaʻiʻo, ʻoi aku ka nui o nā mea - hiki iaʻu ke kākau i nā ʻatikala e pili ana i nā kumuhana aʻe, e koho i ka mea āu e makemake ai e heluhelu e pili ana:

  • 59,1%ʻO nā hana papeti kiʻekiʻe - kekahi mau ʻano ʻē aʻe: nā puka lou, ka palapala ʻāina a me nā ʻōlelo lambda ʻē aʻe, nā mea hōʻiliʻili waiwai, nā kumuwaiwai i lawe ʻia aku a me ke kamaʻilio ʻana ma waena o ka hui ma o ka Puppet, nā hōʻailona, ​​​​nā mea hoʻolako, nā ʻano ʻikepili abstract.13
  • 31,8%"ʻO wau ke alakaʻi o koʻu makuahine" a i ʻole pehea mākou i Avito i launa pū ai me nā kikowaena poppet o nā ʻano like ʻole, a, ma ke kumu, ka ʻāpana e pili ana i ka lawelawe ʻana i ka server poppet.7
  • 81,8%Pehea mākou e kākau ai i ke code papeti: mea kani, palapala, hoʻāʻo, CI/CD.18

22 mea hoʻohana i koho. Ua hōʻole nā ​​mea hoʻohana 9.

Source: www.habr.com