රූකඩ හැඳින්වීම

රූකඩ යනු වින්‍යාස කළමනාකරණ පද්ධතියකි. එය ධාරක අවශ්‍ය තත්වයට ගෙන ඒමට සහ මෙම තත්වය පවත්වා ගැනීමට භාවිතා කරයි.

මම දැන් අවුරුදු පහකට වැඩි කාලයක් රූකඩ සමඟ වැඩ කරනවා. මෙම පාඨය මූලික වශයෙන් නිල ලේඛනවල ප්‍රධාන කරුණු පරිවර්තනය කර නැවත සකස් කරන ලද සම්පාදනයක් වන අතර එමඟින් ආරම්භකයින්ට රූකඩයේ සාරය ඉක්මනින් තේරුම් ගැනීමට ඉඩ සලසයි.

රූකඩ හැඳින්වීම

මූලික තොරතුරු

Puppet හි මෙහෙයුම් පද්ධතිය සේවාදායක-සේවාදායකය, නමුත් එය සීමිත ක්‍රියාකාරීත්වයකින් සේවාදායක රහිත ක්‍රියාකාරිත්වයට සහය දක්වයි.

මෙහෙයුමේ ඇද ගැනීමේ ආකෘතියක් භාවිතා වේ: පෙරනිමියෙන්, සෑම පැය භාගයකට වරක්, සේවාදායකයන් වින්‍යාසයක් සඳහා සේවාදායකය අමතා එය යොදන්න. ඔබ ඇන්සිබල් සමඟ වැඩ කර ඇත්නම්, ඔවුන් වෙනස් තල්ලු ආකෘතියක් භාවිතා කරයි: පරිපාලක විසින් වින්‍යාසය යෙදීමේ ක්‍රියාවලිය ආරම්භ කරයි, සේවාදායකයින් විසින්ම කිසිවක් අදාළ නොවේ.

ජාල සන්නිවේදනය අතරතුර, ද්වි-මාර්ග TLS සංකේතනය භාවිතා වේ: සේවාදායකයට සහ සේවාදායකයාට ඔවුන්ගේම පුද්ගලික යතුරු සහ අනුරූප සහතික ඇත. සාමාන්‍යයෙන් සේවාදායකයා සේවාදායකයින් සඳහා සහතික නිකුත් කරයි, නමුත් ප්‍රතිපත්තිමය වශයෙන් බාහිර CA භාවිතා කළ හැකිය.

ප්‍රකාශන සඳහා හැඳින්වීම

රූකඩ පාරිභාෂිතය තුළ රූකඩ සේවාදායකයට සම්බන්ධ කරන්න නෝඩ් (නෝඩ්). නෝඩ් සඳහා වින්යාසය ලියා ඇත ප්‍රකාශනවල විශේෂ ක්‍රමලේඛන භාෂාවකින් - Puppet DSL.

Puppet DSL යනු ප්‍රකාශන භාෂාවකි. එය තනි සම්පත් ප්‍රකාශ කිරීමේ ස්වරූපයෙන් නෝඩයේ අපේක්ෂිත තත්වය විස්තර කරයි, උදාහරණයක් ලෙස:

  • ගොනුව පවතින අතර එහි නිශ්චිත අන්තර්ගතය ඇත.
  • පැකේජය ස්ථාපනය කර ඇත.
  • සේවාව ආරම්භ කර ඇත.

සම්පත් එකිනෙකට සම්බන්ධ කළ හැකිය:

  • පරායත්තතා ඇත, ඒවා සම්පත් භාවිතා කරන අනුපිළිවෙලට බලපායි.
    උදාහරණයක් ලෙස, "පළමුව පැකේජය ස්ථාපනය කරන්න, පසුව වින්‍යාස ගොනුව සංස්කරණය කරන්න, ඉන්පසු සේවාව ආරම්භ කරන්න."
  • දැනුම්දීම් ඇත - සම්පතක් වෙනස් වී ඇත්නම්, එය එයට දායක වූ සම්පත් වෙත දැනුම්දීම් යවයි.
    උදාහරණයක් ලෙස, වින්‍යාස ගොනුව වෙනස් වුවහොත්, ඔබට ස්වයංක්‍රීයව සේවාව නැවත ආරම්භ කළ හැකිය.

අතිරේකව, Puppet DSL හට ශ්‍රිත සහ විචල්‍යයන් මෙන්ම කොන්දේසි සහිත ප්‍රකාශ සහ තේරීම් ඇත. විවිධ සැකිලි යාන්ත්‍රණ සඳහා ද සහය දක්වයි - EPP සහ ERB.

රූබි ලියා ඇත්තේ රූබි වලින්, එබැවින් බොහෝ ඉදිකිරීම් සහ නියමයන් එතැනින් ලබා ගනී. Ruby ඔබට Puppet පුළුල් කිරීමට ඉඩ සලසයි - සංකීර්ණ තර්කනය, නව ආකාරයේ සම්පත්, කාර්යයන් එකතු කරන්න.

Puppet ක්‍රියාත්මක වන අතරතුර, සේවාදායකයේ එක් එක් විශේෂිත නෝඩය සඳහා ප්‍රකාශන නාමාවලියකට සම්පාදනය කෙරේ. බහලුම යනු ශ්‍රිතවල අගය, විචල්‍යයන් සහ කොන්දේසි සහිත ප්‍රකාශවල ප්‍රසාරණය ගණනය කිරීමෙන් පසු සම්පත් සහ ඒවායේ සම්බන්ධතා ලැයිස්තුවකි.

සින්ටැක්ස් සහ කේත විලාසය

සපයන ලද උදාහරණ ප්‍රමාණවත් නොවේ නම්, වාක්‍ය ඛණ්ඩය තේරුම් ගැනීමට ඔබට උපකාර වන නිල ලේඛනවල කොටස් මෙන්න:

මැනිෆෙස්ටය පෙනෙන්නේ කෙසේද යන්න පිළිබඳ උදාහරණයක් මෙන්න:

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

ඉන්ඩෙන්ටේෂන් සහ රේඛා බිඳීම් මැනිෆෙස්ටයේ අවශ්‍ය කොටසක් නොවේ, නමුත් නිර්දේශිත එකක් ඇත විලාස මාර්ගෝපදේශය. සාරාංශය:

  • ද්වි-අවකාශ ඉන්ඩෙන්ට්, ටැබ් භාවිතා නොකෙරේ.
  • කැරලි වරහන් අවකාශයකින් වෙන් කරනු ලැබේ; තීරු අවකාශයකින් වෙන් නොකෙරේ.
  • අවසාන පරාමිතිය ඇතුළුව එක් එක් පරාමිතියට පසුව කොමා. සෑම පරාමිතියක්ම වෙනම රේඛාවක ඇත. පරාමිති සහ එක් පරාමිතියක් නොමැතිව නඩුව සඳහා ව්යතිරේකයක් සාදනු ලැබේ: ඔබට එක් පේළියක සහ කොමාවකින් තොරව ලිවිය හැකිය (i.e. resource { 'title': } и resource { 'title': param => value }).
  • පරාමිතීන් මත ඊතල එකම මට්ටමේ විය යුතුය.
  • සම්පත් සම්බන්ධතා ඊතල ඔවුන් ඉදිරියේ ලියා ඇත.

pappetserver හි ගොනු පිහිටීම

වැඩිදුර පැහැදිලි කිරීම සඳහා, මම "root බහලුම" සංකල්පය හඳුන්වා දෙන්නෙමි. මූල නාමාවලිය යනු විශේෂිත නෝඩයක් සඳහා රූකඩ වින්‍යාසය අඩංගු නාමාවලියයි.

රූකඩයේ අනුවාදය සහ භාවිතා කරන පරිසරය අනුව මූල නාමාවලිය වෙනස් වේ. පරිසරය යනු වෙනම නාමාවලි වල ගබඩා කර ඇති ස්වාධීන වින්‍යාස කට්ටල වේ. සාමාන්‍යයෙන් git සමඟ සංයෝජනයක් ලෙස භාවිතා කරයි, එහිදී git ශාඛා වලින් පරිසරයන් නිර්මාණය වේ. ඒ අනුව, එක් එක් නෝඩය එක් පරිසරයක හෝ වෙනත් ස්ථානයක පිහිටා ඇත. මෙය නෝඩයේම හෝ ENC හි වින්‍යාසගත කළ හැකිය, එය මම ඊළඟ ලිපියෙන් කතා කරමි.

  • තෙවන අනුවාදයේ ("පැරණි රූකඩ") මූලික නාමාවලිය විය /etc/puppet. පරිසරය භාවිතා කිරීම වෛකල්පිතයි - උදාහරණයක් ලෙස, අපි පැරණි රූකඩ සමඟ ඒවා භාවිතා නොකරමු. පරිසරයන් භාවිතා කරන්නේ නම්, ඒවා සාමාන්යයෙන් ගබඩා කර ඇත /etc/puppet/environments, මූල නාමාවලිය පරිසර නාමාවලිය වනු ඇත. පරිසරය භාවිතා නොකරන්නේ නම්, මූල නාමාවලිය මූලික නාමාවලිය වනු ඇත.
  • සිව්වන අනුවාදයෙන් ("නව රූකඩ") සිට පරිසරය භාවිතා කිරීම අනිවාර්ය වූ අතර මූලික නාමාවලිය වෙත ගෙන යන ලදී. /etc/puppetlabs/code. ඒ අනුව පරිසරය ගබඩා කර ඇත /etc/puppetlabs/code/environments, root බහලුම යනු පරිසර නාමාවලියයි.

මූල නාමාවලියෙහි උප බහලුමක් තිබිය යුතුය manifests, එහි නෝඩ් විස්තර කරන මැනිෆෙස්ට් එකක් හෝ කිහිපයක් අඩංගු වේ. ඊට අමතරව, උප බහලුමක් තිබිය යුතුය modules, මොඩියුල අඩංගු වේ. මොඩියුල මොනවද කියලා මම ටිකක් පස්සේ කියන්නම්. මීට අමතරව, පැරණි රූකඩයට උප නාමාවලියක් ද තිබිය හැකිය files, අපි නෝඩ් වලට පිටපත් කරන විවිධ ගොනු අඩංගු වේ. නව රූකඩයේ, සියලුම ගොනු මොඩියුලවල තබා ඇත.

මැනිෆෙස්ට් ගොනු වල දිගුව ඇත .pp.

සටන් උදාහරණ කිහිපයක්

එහි ඇති නෝඩය සහ සම්පත පිළිබඳ විස්තරය

නෝඩය මත server1.testdomain ගොනුවක් සෑදිය යුතුය /etc/issue අන්තර්ගතය සමඟ Debian GNU/Linux n l. ගොනුව පරිශීලකයෙකුට සහ කණ්ඩායමකට හිමි විය යුතුය root, ප්රවේශ අයිතිවාසිකම් විය යුතුය 644.

අපි ප්‍රකාශනයක් ලියන්නෙමු:

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

නෝඩයක ඇති සම්පත් අතර සම්බන්ධතා

නෝඩය මත server2.testdomain nginx ක්‍රියාත්මක විය යුතුය, කලින් සකස් කළ වින්‍යාසය සමඟ ක්‍රියා කරයි.

අපි ගැටලුව විසංයෝජනය කරමු:

  • පැකේජය ස්ථාපනය කිරීම අවශ්ය වේ nginx.
  • වින්‍යාස ගොනු සේවාදායකයෙන් පිටපත් කිරීම අවශ්‍ය වේ.
  • සේවාව ක්‍රියාත්මක විය යුතුය nginx.
  • වින්‍යාසය යාවත්කාලීන කර ඇත්නම්, සේවාව නැවත ආරම්භ කළ යුතුය.

අපි ප්‍රකාශනයක් ලියන්නෙමු:

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

මෙය ක්‍රියා කිරීමට, ඔබට රූකඩ සේවාදායකයේ ආසන්න වශයෙන් පහත ගොනු ස්ථානය අවශ්‍ය වේ:

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

සම්පත් වර්ග

සහාය දක්වන සම්පත් වර්ගවල සම්පූර්ණ ලැයිස්තුවක් මෙතැනින් සොයා ගත හැක ලේඛනවල, මෙන්න මම මූලික වර්ග පහක් විස්තර කරමි, මගේ භාවිතයේ දී බොහෝ ගැටලු විසඳීමට ප්රමාණවත් වේ.

ගොනුව

ගොනු, නාමාවලි, සිම්ලින්ක්, ඒවායේ අන්තර්ගතය සහ ප්‍රවේශ හිමිකම් කළමනාකරණය කරයි.

පරාමිතීන්:

  • සම්පත් නාමය - ගොනුව වෙත මාර්ගය (විකල්ප)
  • මාර්ගය - ගොනුව වෙත මාර්ගය (එය නමෙහි සඳහන් කර නොමැති නම්)
  • සහතික - ගොනු වර්ගය:
    • absent - ගොනුවක් මකන්න
    • present — ඕනෑම ආකාරයක ගොනුවක් තිබිය යුතුය (ගොනුවක් නොමැති නම්, සාමාන්‍ය ගොනුවක් සාදනු ලැබේ)
    • file - සාමාන්ය ගොනුව
    • directory - නාමාවලිය
    • link - සිම්ලින්ක්
  • අන්තර්ගතය — ගොනු අන්තර්ගතය (සාමාන්‍ය ලිපිගොනු සඳහා පමණක් සුදුසු, එකට භාවිතා කළ නොහැක මූලාශ්රය හෝ ඉලක්කය)
  • මූලාශ්රය — ඔබට ගොනුවේ අන්තර්ගතය පිටපත් කිරීමට අවශ්‍ය මාර්ගයට සබැඳියක් (එකට භාවිතා කළ නොහැක අන්තර්ගතය හෝ ඉලක්කය) යෝජනා ක්‍රමයක් සහිත URI එකක් ලෙස සඳහන් කළ හැක puppet: (එවිට රූකඩ සේවාදායකයෙන් ගොනු භාවිතා කරනු ඇත), සහ යෝජනා ක්රමය සමඟ http: (මෙම නඩුවේ කුමක් සිදුවේද යන්න පැහැදිලි යැයි මම බලාපොරොත්තු වෙමි), සහ රූප සටහන සමඟ පවා file: හෝ යෝජනා ක්රමයකින් තොරව නිරපේක්ෂ මාර්ගයක් ලෙස (එවිට නෝඩයේ ඇති දේශීය FS වෙතින් ගොනුව භාවිතා කරනු ඇත)
  • ඉලක්කය - සිම්ලින්ක් යොමු කළ යුතු තැන (එකට භාවිතා කළ නොහැක අන්තර්ගතය හෝ මූලාශ්රය)
  • හිමිකරුය — ගොනුව අයිති විය යුතු පරිශීලකයා
  • සමූහය — ගොනුව අයත් විය යුතු කණ්ඩායම
  • මාදිලිය — ගොනු අවසර (තන්තුවක් ලෙස)
  • පසුබෑම - පුනරාවර්තන නාමාවලි සැකසීම සක්‍රීය කරයි
  • පිරිසිදු කරන්න - Puppet හි විස්තර කර නැති ගොනු මකා දැමීම සක්‍රීය කරයි
  • බලය - Puppet හි විස්තර කර නොමැති නාමාවලි මකා දැමීම සක්‍රීය කරයි

පැකේජය

පැකේජ ස්ථාපනය කර ඉවත් කරයි. දැනුම්දීම් හැසිරවීමේ හැකියාව - පරාමිතිය නියම කර ඇත්නම් පැකේජය නැවත ස්ථාපනය කරයි reinstall_on_refresh.

පරාමිතීන්:

  • සම්පත් නාමය - පැකේජයේ නම (විකල්ප)
  • නාමය - පැකේජයේ නම (නමෙහි සඳහන් කර නොමැති නම්)
  • සපයන්නා - භාවිතා කිරීමට පැකේජ කළමනාකරු
  • සහතික - පැකේජයේ අපේක්ෂිත තත්වය:
    • present, installed - ඕනෑම අනුවාදයක් ස්ථාපනය කර ඇත
    • latest - නවතම අනුවාදය ස්ථාපනය කර ඇත
    • absent - මකා දමන ලදී (apt-get remove)
    • purged - වින්‍යාස ගොනු සමඟ මකා දමන ලදී (apt-get purge)
    • held - පැකේජ අනුවාදය අගුළු දමා ඇත (apt-mark hold)
    • любая другая строка - නිශ්චිත අනුවාදය ස්ථාපනය කර ඇත
  • reinstall_on_refresh - නම් true, පසුව දැනුම්දීම ලැබීමෙන් පසු පැකේජය නැවත ස්ථාපනය කරනු ලැබේ. ප්‍රභව මත පදනම් වූ බෙදාහැරීම් සඳහා ප්‍රයෝජනවත් වේ, ගොඩනැගීමේ පරාමිති වෙනස් කිරීමේදී පැකේජ නැවත ගොඩනැංවීම අවශ්‍ය විය හැක. පෙරනිමිය false.

සේවාව

සේවා කළමනාකරණය කරයි. දැනුම්දීම් සැකසීමේ හැකියාව - සේවාව නැවත ආරම්භ කරයි.

පරාමිතීන්:

  • සම්පත් නාමය - කළමනාකරණය කළ යුතු සේවාව (විකල්ප)
  • නාමය - කළමනාකරණය කළ යුතු සේවාව (නමෙහි සඳහන් කර නොමැති නම්)
  • සහතික - අපේක්ෂිත සේවා තත්ත්වය:
    • running - දියත් කරන ලදී
    • stopped - නැවතුණා
  • සක්රිය කරන්න - සේවාව ආරම්භ කිරීමේ හැකියාව පාලනය කරයි:
    • true - autorun සක්රිය කර ඇත (systemctl enable)
    • mask - වෙස්වලාගත් (systemctl mask)
    • false - autorun අබල කර ඇත (systemctl disable)
  • නැවත ආරම්භ - සේවාව නැවත ආරම්භ කිරීමට විධානය
  • තත්ත්වය - සේවා තත්ත්වය පරීක්ෂා කිරීමට විධානය
  • නැවත ආරම්භ කර ඇත — initscript සේවාව නැවත ආරම්භ කිරීමට සහය දක්වන්නේද යන්න දක්වන්න. නම් false සහ පරාමිතිය නියම කර ඇත නැවත ආරම්භ - මෙම පරාමිතියෙහි අගය භාවිතා වේ. නම් false සහ පරාමිතිය නැවත ආරම්භ නිශ්චිතව දක්වා නැත - සේවාව නතර කර නැවත ආරම්භ කිරීමට පටන් ගෙන ඇත (නමුත් systemd විධානය භාවිතා කරයි systemctl restart).
  • hasstatus — initscript සේවාව විධානයට සහය දක්වයිද යන්න දක්වන්න status. එසේ නම් false, එවිට පරාමිති අගය භාවිතා වේ තත්ත්වය. පෙරනිමිය true.

එච්

බාහිර විධාන ක්රියාත්මක කරයි. ඔබ පරාමිතීන් සඳහන් නොකරන්නේ නම් නිර්මාණය කරයි, පමණක් නම්, නම් මිස හෝ නැවුම් ලෙස, Puppet ධාවනය කරන සෑම අවස්ථාවකම විධානය ක්‍රියාත්මක වේ. දැනුම්දීම් සැකසීමට හැකියාව ඇත - විධානයක් ක්රියාත්මක කරයි.

පරාමිතීන්:

  • සම්පත් නාමය - ක්රියාත්මක කළ යුතු විධානය (විකල්ප)
  • විධානය - ක්රියාත්මක කළ යුතු විධානය (එය නමෙහි සඳහන් කර නොමැති නම්)
  • මාර්ගය - ක්‍රියාත්මක කළ හැකි ගොනුව සෙවීමට මාර්ග
  • පමණක් නම් — මෙම පරාමිතියෙහි දක්වා ඇති විධානය ශුන්‍ය ප්‍රතිලාභ කේතයකින් සම්පූර්ණ කළහොත්, ප්‍රධාන විධානය ක්‍රියාත්මක වේ.
  • නම් මිස — මෙම පරාමිතියෙහි දක්වා ඇති විධානය ශුන්‍ය නොවන ප්‍රතිලාභ කේතයකින් සම්පූර්ණ කළහොත්, ප්‍රධාන විධානය ක්‍රියාත්මක වේ.
  • නිර්මාණය කරයි — මෙම පරාමිතියෙහි දක්වා ඇති ගොනුව නොපවතියි නම්, ප්රධාන විධානය ක්රියාත්මක වේ
  • නැවුම් ලෙස - නම් true, එවිට විධානය ක්‍රියාත්මක වන්නේ මෙම විධායකයට වෙනත් සම්පත් වලින් දැනුම්දීමක් ලැබුණු විට පමණි
  • cwd - විධානය ක්‍රියාත්මක කළ යුතු නාමාවලිය
  • පරිශීලක - විධානය ක්‍රියාත්මක කළ යුතු පරිශීලකයා
  • සපයන්නා - විධානය ක්‍රියාත්මක කරන්නේ කෙසේද:
    • පොසික්ස් - ළමා ක්රියාවලිය සරලව නිර්මාණය කර ඇත, සඳහන් කිරීමට වග බලා ගන්න මාර්ගය
    • ෂෙල් - විධානය කවචයේ දියත් කෙරේ /bin/sh, සඳහන් නොකළ හැකිය මාර්ගය, ඔබට globbing, පයිප්ප සහ අනෙකුත් ෂෙල් විශේෂාංග භාවිතා කළ හැකිය. විශේෂ අක්ෂර තිබේ නම් සාමාන්‍යයෙන් ස්වයංක්‍රීයව අනාවරණය වේ (|, ;, &&, || ආදිය).

cron වලින්

Cronjobs පාලනය කරයි.

පරාමිතීන්:

  • සම්පත් නාමය - යම් ආකාරයක හඳුනාගැනීමක් පමණි
  • සහතික - ඔටුන්න හිමි තත්වය:
    • present - නොමැති නම් නිර්මාණය කරන්න
    • absent - පවතී නම් මකන්න
  • විධානය - ක්රියාත්මක කළ යුතු විධානය කුමක්ද?
  • පරිසරය - විධානය ක්‍රියාත්මක කළ යුතු පරිසරය තුළ (පරිසර විචල්‍ය ලැයිස්තුව සහ ඒවායේ අගයන් හරහා =)
  • පරිශීලක - විධානය ක්‍රියාත්මක කළ යුත්තේ කුමන පරිශීලකයාගෙන්ද යන්න
  • විනාඩි, පැය, සතියේ දිනවල, මස, මාසයේ දිනය - ක්‍රෝන් ධාවනය කළ යුත්තේ කවදාද? මෙම ගුණාංගවලින් කිසිවක් නිශ්චිතව දක්වා නොමැති නම්, crontab හි එහි අගය වනු ඇත *.

රූකඩ 6.0 හි cron වලින් වගේ පෙට්ටියෙන් ඉවත් කර ඇත රූකඩ සේවාදායකයේ, එබැවින් සාමාන්‍ය වෙබ් අඩවියේ ලේඛන නොමැත. නමුත් ඔහු පෙට්ටියේ ඇත රූකඩ නියෝජිතයා තුළ, එය වෙනම ස්ථාපනය කිරීමට අවශ්ය නැත. ඔබට ඒ සඳහා ලියකියවිලි බලන්න පුළුවන් Puppet හි පස්වන අනුවාදය සඳහා ලියකියවිලි තුළ, හෝ GitHub මත.

පොදුවේ සම්පත් ගැන

සම්පත් සුවිශේෂත්වය සඳහා අවශ්‍යතා

අප මුහුණ දෙන වඩාත් පොදු වැරැද්ද නම් අනුපිටපත් ප්රකාශය. නාමාවලියෙහි එකම නම සහිත එකම වර්ගයේ සම්පත් දෙකක් හෝ වැඩි ගණනක් දිස්වන විට මෙම දෝෂය ඇතිවේ.

එබැවින්, මම නැවත ලියන්නෙමි: එකම නෝඩය සඳහා මැනිෆෙස්ටයේ එකම මාතෘකාවක් සහිත එකම වර්ගයේ සම්පත් අඩංගු නොවිය යුතුය!

සමහර විට එකම නමින් පැකේජ ස්ථාපනය කිරීමට අවශ්‍ය වේ, නමුත් විවිධ පැකේජ කළමනාකරුවන් සමඟ. මෙම අවස්ථාවේදී, ඔබ පරාමිතිය භාවිතා කළ යුතුය nameදෝෂය වළක්වා ගැනීමට:

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

අනුපිටපත් කිරීම වැළැක්වීම සඳහා වෙනත් සම්පත් වර්ග වලට සමාන විකල්ප ඇත - name у සේවාව, command у එච්, සහ යනාදි.

Metaparameters

සෑම සම්පත් වර්ගයකටම එහි ස්වභාවය කුමක් වුවත් විශේෂ පරාමිතීන් ඇත.

මෙටා පරාමිතීන්ගේ සම්පූර්ණ ලැයිස්තුව රූකඩ ලියකියවිලි වල.

කෙටි ලැයිස්තුව:

  • අවශ්යයි - මෙම පරාමිතිය පෙන්නුම් කරන්නේ මෙම සම්පත රඳා පවතින්නේ කුමන සම්පත් මතද යන්නයි.
  • කලින් - මෙම පරාමිතිය මෙම සම්පත මත රඳා පවතින සම්පත් නියම කරයි.
  • දායක — මෙම පරාමිතිය මෙම සම්පතට දැනුම්දීම් ලැබෙන්නේ කුමන සම්පත් වලින්ද යන්න නියම කරයි.
  • දැනුම් දෙන්න — මෙම පරාමිතිය මෙම සම්පතෙන් දැනුම්දීම් ලැබෙන සම්පත් මොනවාද යන්න සඳහන් කරයි.

ලැයිස්තුගත කර ඇති සියලුම පාරපරාමිති තනි සම්පත් සබැඳියක් හෝ හතරැස් වරහන් තුළ සබැඳි මාලාවක් පිළිගනී.

සම්පත් වෙත සබැඳි

සම්පත් සබැඳියක් යනු සම්පත ගැන සඳහන් කිරීමකි. ඒවා ප්රධාන වශයෙන් පරායත්තතා දැක්වීමට භාවිතා කරයි. නොපවතින සම්පතක් යොමු කිරීම සම්පාදන දෝෂයක් ඇති කරයි.

සබැඳියේ වාක්‍ය ඛණ්ඩය පහත පරිදි වේ: විශාල අකුරක් සහිත සම්පත් වර්ගය (වර්ගයේ නමේ ද්විත්ව තීරු තිබේ නම්, තීරු අතර නමේ සෑම කොටසක්ම ප්‍රාග්ධනීකරණය කර ඇත), පසුව සම්පත් නාමය වර්ග වරහන් තුළ (නමේ අවස්ථාව වෙනස් නොවේ!). හිස් ඉඩක් නොතිබිය යුතුය; වර්ග වරහන් වර්ගය නමට පසුව වහාම ලියා ඇත.

උදාහරණ:

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

යැපීම් සහ දැනුම්දීම්

ලේඛන මෙතනින්.

කලින් සඳහන් කළ පරිදි, සම්පත් අතර සරල පරායත්තතා සංක්‍රාන්ති වේ. මාර්ගය වන විට, පරායත්තතා එකතු කිරීමේදී ප්රවේශම් වන්න - ඔබට චක්රීය පරායත්තතා සෑදිය හැක, එය සම්පාදන දෝෂයක් ඇති කරයි.

පරායත්තතා මෙන් නොව, දැනුම්දීම් සංක්‍රාන්ති නොවේ. දැනුම්දීම් සඳහා පහත නීති අදාළ වේ:

  • සම්පතට දැනුම්දීමක් ලැබුනේ නම්, එය යාවත්කාලීන වේ. යාවත්කාලීන ක්‍රියා සම්පත් වර්ගය මත රඳා පවතී - එච් විධානය ක්‍රියාත්මක කරයි, සේවාව සේවාව නැවත ආරම්භ කරයි, පැකේජය පැකේජය නැවත ස්ථාපනය කරයි. සම්පතට යාවත්කාලීන ක්‍රියාවක් අර්ථ දක්වා නොමැති නම්, කිසිවක් සිදු නොවේ.
  • රූකඩයේ එක් ධාවන කාලයකදී, සම්පත එක් වරකට වඩා යාවත්කාලීන නොවේ. දැනුම්දීම්වල පරායත්තතා ඇතුළත් වන අතර පරායත්ත ප්‍රස්ථාරයේ චක්‍ර අඩංගු නොවන නිසා මෙය කළ හැකිය.
  • රූකඩ සම්පතක තත්වය වෙනස් කරන්නේ නම්, සම්පත එයට දායක වී ඇති සියලුම සම්පත් වෙත දැනුම්දීම් යවයි.
  • සම්පතක් යාවත්කාලීන කර ඇත්නම්, එය එයට දායක වී ඇති සියලුම සම්පත් වෙත දැනුම්දීම් යවයි.

නිශ්චිත නොවන පරාමිතීන් හැසිරවීම

රීතියක් ලෙස, සමහර සම්පත් පරාමිතිය පෙරනිමි අගයක් නොමැති නම් සහ මෙම පරාමිතිය මැනිෆෙස්ටයේ සඳහන් කර නොමැති නම්, නෝඩයේ ඇති අනුරූප සම්පත් සඳහා රූකඩ මෙම ගුණාංගය වෙනස් නොකරනු ඇත. උදාහරණයක් ලෙස, වර්ගයේ සම්පතක් නම් ගොනුව පරාමිතිය නිශ්චිතව දක්වා නැත owner, එවිට Puppet අදාල ගොනුවේ හිමිකරු වෙනස් නොකරනු ඇත.

පන්ති, විචල්යයන් සහ අර්ථ දැක්වීම් සඳහා හැඳින්වීම

අපට වින්‍යාසයේ එකම කොටස ඇති නෝඩ් කිහිපයක් ඇතැයි සිතමු, නමුත් වෙනස්කම් ද ඇත - එසේ නොමැතිනම් අපට ඒ සියල්ල එක කොටසකින් විස්තර කළ හැකිය. node {}. ඇත්ත වශයෙන්ම, ඔබට වින්‍යාසයේ සමාන කොටස් සරලව පිටපත් කළ හැකිය, නමුත් පොදුවේ මෙය නරක විසඳුමකි - වින්‍යාසය වර්ධනය වන අතර, ඔබ වින්‍යාසයේ සාමාන්‍ය කොටස වෙනස් කළහොත්, ඔබට බොහෝ ස්ථානවල එකම දේ සංස්කරණය කිරීමට සිදුවේ. ඒ අතරම, වැරැද්දක් කිරීම පහසු වන අතර, පොදුවේ ගත් කල, DRY (ඔබම නැවත නොකරන්න) මූලධර්මය සොයා ගන්නා ලද්දේ හේතුවක් නිසාය.

මෙම ගැටළුව විසඳීම සඳහා එවැනි නිර්මාණයක් තිබේ класс.

පන්ති

පන්තිය යනු පොපෙට් කේතයේ නම් කරන ලද කොටසකි. කේතය නැවත භාවිතා කිරීමට පන්ති අවශ්‍ය වේ.

පළමුව, පන්තිය විස්තර කළ යුතුය. විස්තරය කොතැනකවත් කිසිදු සම්පත් එකතු නොකරයි. පන්තිය ප්‍රකාශන වලින් විස්තර කර ඇත:

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

මෙයින් පසු, පන්තිය භාවිතා කළ හැකිය:

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

පෙර කාර්යයෙන් උදාහරණයක් - අපි nginx ස්ථාපනය සහ වින්‍යාසය පන්තියකට ගෙන යමු:

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
}

විචල්යයන්

පෙර උදාහරණයේ පන්තිය සෑම විටම එකම nginx වින්‍යාසය ගෙන එන බැවින් කිසිසේත් නම්‍යශීලී නොවේ. අපි වින්‍යාස විචල්‍යයට යන මාර්ගය සකස් කරමු, එවිට මෙම පන්තිය ඕනෑම වින්‍යාසයක් සමඟ nginx ස්ථාපනය කිරීමට භාවිතා කළ හැකිය.

එය කළ හැකිය විචල්යයන් භාවිතා කිරීම.

අවධානය: රූකඩයේ විචල්‍යයන් වෙනස් කළ නොහැක!

මීට අමතරව, විචල්‍යයකට ප්‍රවේශ විය හැක්කේ එය ප්‍රකාශ කිරීමෙන් පසුව පමණි, එසේ නොමැති නම් විචල්‍යයේ අගය වනු ඇත undef.

විචල්යයන් සමඟ වැඩ කිරීමේ උදාහරණය:

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

රූකඩ ඇත නාම අවකාශයන්, සහ විචල්යයන්, ඒ අනුව, ඇත දෘශ්‍ය ප්‍රදේශය: එකම නම සහිත විචල්‍යයක් විවිධ නාම අවකාශයන්හි අර්ථ දැක්විය හැක. විචල්‍යයක අගය නිරාකරණය කිරීමේදී, විචල්‍යය වත්මන් නාම අවකාශයේ, පසුව සංවෘත නාම අවකාශයේ, යනාදී ලෙස සොයනු ලැබේ.

නාම අවකාශයේ උදාහරණ:

  • ගෝලීය - පන්තියෙන් පිටත විචල්‍යයන් හෝ නෝඩ් විස්තරය එහි යයි;
  • නෝඩ් විස්තරයේ node namespace;
  • පන්ති විස්තරයේ class namespace.

විචල්‍යයකට ප්‍රවේශ වීමේදී අපැහැදිලි බව වළක්වා ගැනීම සඳහා, ඔබට විචල්‍ය නාමයෙන් නාම අවකාශය සඳහන් කළ හැක:

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

nginx වින්‍යාසය සඳහා මාර්ගය විචල්‍යයේ පවතින බව අපි එකඟ වෙමු $nginx_conf_source. එවිට පන්තිය මේ ආකාරයෙන් පෙනෙනු ඇත:

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
}

කෙසේ වෙතත්, ලබා දී ඇති උදාහරණය නරක ය, මන්ද කිසියම් “රහස් දැනුමක්” ඇති බැවින් පන්තියේ කොතැනක හෝ එවැනි නමක් සහිත විචල්‍යයක් භාවිතා වේ. මෙම දැනුම සාමාන්‍ය බවට පත් කිරීම වඩාත් නිවැරදියි - පන්තිවලට පරාමිතීන් තිබිය හැකිය.

පන්ති පරාමිතීන් පන්ති නාම අවකාශයේ විචල්‍ය වේ, ඒවා පන්ති ශීර්ෂයේ දක්වා ඇති අතර පන්ති ශරීරයේ සාමාන්‍ය විචල්‍යයන් මෙන් භාවිතා කළ හැකිය. මැනිෆෙස්ටයේ පන්තිය භාවිතා කරන විට පරාමිති අගයන් නියම කර ඇත.

පරාමිතිය පෙරනිමි අගයකට සැකසිය හැක. පරාමිතියක පෙරනිමි අගයක් නොමැති නම් සහ භාවිතා කරන විට අගය සකසා නොමැති නම්, එය සම්පාදන දෝෂයක් ඇති කරයි.

ඉහත උදාහරණයෙන් පන්තිය පරාමිතිකරණය කර පරාමිති දෙකක් එකතු කරමු: පළමු, අවශ්‍ය, වින්‍යාසය සඳහා මාර්ගය වන අතර, දෙවන, විකල්ප, nginx සමඟ පැකේජයේ නම වේ (උදාහරණයක් ලෙස, ඩේබියන් හි, පැකේජ තිබේ. 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',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

Puppet හි, විචල්යයන් ටයිප් කර ඇත. කන්න බොහෝ දත්ත වර්ග. දත්ත වර්ග සාමාන්‍යයෙන් පන්ති සහ නිර්වචන වෙත සම්මත කරන ලද පරාමිති අගයන් වලංගු කිරීමට භාවිතා කරයි. සම්මත කරන ලද පරාමිතිය නිශ්චිත වර්ගයට නොගැලපේ නම්, සම්පාදන දෝෂයක් සිදුවනු ඇත.

වර්ගය පරාමිති නාමයට පෙර වහාම ලියා ඇත:

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

පන්ති: පන්තියේ{'classname':} පන්තියේ නම ඇතුළත්

සෑම පන්තියක්ම වර්ගයේ සම්පතකි පන්තිය. වෙනත් ඕනෑම ආකාරයක සම්පතක් මෙන්, එකම නෝඩයේ එකම පන්තියේ අවස්ථා දෙකක් තිබිය නොහැක.

ඔබ එකම නෝඩයට පන්තියක් දෙවරක් භාවිතා කිරීමට උත්සාහ කරන්නේ නම් class { 'classname':} (වෙනස්කමක් නැත, වෙනස් හෝ සමාන පරාමිති සමඟ), සම්පාදන දෝෂයක් ඇත. නමුත් ඔබ සම්පත් ශෛලියේ පන්තියක් භාවිතා කරන්නේ නම්, ඔබට වහාම මැනිෆෙස්ටයේ එහි සියලු පරාමිති පැහැදිලිව සැකසිය හැක.

කෙසේ වෙතත්, ඔබ භාවිතා කරන්නේ නම් include, එවිට පන්තිය කැමති වාර ගණනක් එකතු කළ හැක. කාරණය එයයි include යනු ඩිරෙක්ටරියට පන්තියක් එක් කර ඇත්දැයි පරීක්ෂා කරන idempotent ශ්‍රිතයකි. පන්තිය නාමාවලියෙහි නොමැති නම්, එය එය එකතු කරයි, එය දැනටමත් පවතී නම්, එය කිසිවක් නොකරයි. නමුත් භාවිතා කිරීමේදී include පන්ති ප්‍රකාශය අතරතුර ඔබට පන්ති පරාමිති සැකසිය නොහැක - අවශ්‍ය සියලුම පරාමිති බාහිර දත්ත මූලාශ්‍රයකින් සැකසිය යුතුය - Hiera හෝ ENC. අපි ඔවුන් ගැන ඊළඟ ලිපියෙන් කතා කරමු.

නිර්වචනය කරයි

කලින් block එකේ කිව්වා වගේ node එකක එකම class එක පාරකට වඩා තියෙන්න බෑ. කෙසේ වෙතත්, සමහර අවස්ථාවලදී එකම නෝඩයේ විවිධ පරාමිති සහිත එකම කේත බ්ලොක් භාවිතා කිරීමට ඔබට හැකි විය යුතුය. වෙනත් වචන වලින් කිවහොත්, තමන්ගේම සම්පත් වර්ගයක අවශ්‍යතාවයක් ඇත.

උදාහරණයක් ලෙස, PHP මොඩියුලය ස්ථාපනය කිරීම සඳහා, අපි Avito හි පහත සඳහන් දේ කරන්නෙමු:

  1. මෙම මොඩියුලය සමඟ පැකේජය ස්ථාපනය කරන්න.
  2. මෙම මොඩියුලය සඳහා වින්‍යාස ගොනුවක් සාදා ගනිමු.
  3. අපි php-fpm සඳහා config වෙත symlink එකක් සාදන්නෙමු.
  4. අපි php cli සඳහා config වෙත symlink එකක් සාදන්නෙමු.

එවැනි අවස්ථාවලදී, වැනි නිර්මාණයක් නිර්වචනය කරන්න (නිර්ණය කරන්න, නිර්වචනය කළ වර්ගය, නිර්වචනය කළ සම්පත් වර්ගය). නිර්වචනය යනු පන්තියකට සමාන වේ, නමුත් වෙනස්කම් ඇත: පළමුව, එක් එක් නිර්වචනය යනු සම්පත් වර්ගයක් මිස සම්පතක් නොවේ; දෙවනුව, සෑම අර්ථකථනයකටම ව්‍යංග පරාමිතියක් ඇත $title, එය ප්‍රකාශ කළ විට සම්පත් නාමය යන්නේ කොතැනටද යන්න. පන්ති සම්බන්ධයෙන් මෙන්ම, අර්ථ දැක්වීමක් මුලින්ම විස්තර කළ යුතු අතර, පසුව එය භාවිතා කළ හැකිය.

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

Duplicate declaration Error එක අල්ලගන්න ලේසිම විදිය Define එකේ. නිර්වචනයකට නියත නමක් සහිත සම්පතක් තිබේ නම් මෙය සිදු වේ, සහ මෙම අර්ථ දැක්වීමේ අවස්ථා දෙකක් හෝ වැඩි ගණනක් යම් නෝඩයක තිබේ නම්.

මෙයින් ඔබව ආරක්ෂා කර ගැනීම පහසුය: අර්ථ දැක්වීම තුළ ඇති සියලුම සම්පත් මත පදනම්ව නමක් තිබිය යුතුය $title. විකල්පයක් වනුයේ සම්පත් බල රහිත එකතු කිරීමයි; සරලම අවස්ථාවෙහිදී, නිර්වචනයේ සියලුම අවස්ථාවන්ට පොදු සම්පත් වෙනම පන්තියකට ගෙනයාම සහ මෙම පන්තිය නිර්වචනය - ශ්‍රිතයට ඇතුළත් කිරීම ප්‍රමාණවත් වේ. include දුර්වලයි.

සම්පත් එකතු කිරීමේදී idempotency ලබා ගැනීමට වෙනත් ක්‍රම තිබේ, එනම් ශ්‍රිත භාවිතා කිරීම defined и ensure_resources, නමුත් මම ඒ ගැන ඊළඟ කථාංගයෙන් කියන්නම්.

පන්ති සහ නිර්වචන සඳහා යැපීම් සහ දැනුම්දීම්

පන්ති සහ නිර්වචන පරායත්තතා සහ දැනුම්දීම් හැසිරවීමට පහත නීති එක් කරයි:

  • පන්තියක් / නිර්වචනය මත යැපීම පන්තියේ සියලු සම්පත් මත යැපීම් එකතු කරයි / නිර්වචනය කරයි;
  • පන්තියක්/නිර්වචන පරායත්තතාවයක් සියලු පන්ති වලට පරායත්තතා එක් කරයි/සම්පත් නිර්වචනය කරයි;
  • class/define notification පන්තියේ සියලුම සම්පත් දැනුම් දෙයි/define;
  • class/define subscription පන්තියේ සියලුම සම්පත් වලට දායක වේ/define.

කොන්දේසි සහිත ප්රකාශ සහ තේරීම්

ලේඛන මෙතනින්.

if

එය මෙහි සරලයි:

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

නම් මිස

ප්‍රතිලෝමව නම් මිස: ප්‍රකාශනය අසත්‍ය නම් කේතයේ වාරණ ක්‍රියාත්මක වේ.

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

නඩුව

මෙහි ද සංකීර්ණ කිසිවක් නොමැත. ඔබට සාමාන්‍ය අගයන් (තන්තු, අංක, ආදිය), සාමාන්‍ය ප්‍රකාශන සහ දත්ත වර්ග අගයන් ලෙස භාවිතා කළ හැක.

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

තේරීම් කරන්නන්

තේරීම් කාරකයක් යනු සමාන භාෂා නිර්මාණයකි case, නමුත් කේතය බ්ලොක් එකක් ක්‍රියාත්මක කරනවා වෙනුවට එය අගයක් ලබා දෙයි.

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

මොඩියුල

වින්‍යාසය කුඩා වූ විට, එය පහසුවෙන් එක් මැනිෆෙස්ට් එකක තබා ගත හැක. නමුත් අපි විස්තර කරන වින්‍යාසයන් වැඩි වන තරමට, මැනිෆෙස්ටයේ පන්ති සහ නෝඩ් වැඩි වන තරමට එය වර්ධනය වන අතර එය සමඟ වැඩ කිරීමට අපහසු වේ.

ඊට අමතරව, කේතය නැවත භාවිතා කිරීමේ ගැටලුවක් ඇත - සියලුම කේතය එක් මැනිෆෙස්ට් එකක ඇති විට, මෙම කේතය අන් අය සමඟ බෙදා ගැනීම අපහසු වේ. මෙම ගැටළු දෙක විසඳීම සඳහා, Puppet හට මොඩියුල ලෙස හැඳින්වෙන ආයතනයක් ඇත.

මොඩියුල - මේවා පන්ති, නිර්වචන සහ වෙනත් රූකඩ ආයතන වෙනම නාමාවලියක තබා ඇත. වෙනත් වචන වලින් කිවහොත්, මොඩියුලයක් යනු රූකඩ තර්කනයේ ස්වාධීන කොටසකි. උදාහරණයක් ලෙස, nginx සමඟ වැඩ කිරීම සඳහා මොඩියුලයක් තිබිය හැකි අතර, එහි nginx සමඟ වැඩ කිරීමට අවශ්‍ය දේ සහ ඒවා පමණක් අඩංගු වේ, නැතහොත් PHP සමඟ වැඩ කිරීම සඳහා මොඩියුලයක් තිබිය හැකිය, යනාදිය.

මොඩියුල අනුවාදනය කර ඇති අතර, මොඩියුල එකිනෙක මත යැපීම් සඳහා ද සහය දක්වයි. මොඩියුලවල විවෘත ගබඩාවක් ඇත - රූකඩ ෆෝජ්.

රූකඩ සේවාදායකයේ, මූල නාමාවලියෙහි මොඩියුල උප බහලුමෙහි මොඩියුල පිහිටා ඇත. එක් එක් මොඩියුලය තුළ සම්මත නාමාවලි ක්‍රමයක් ඇත - ප්‍රකාශන, ගොනු, සැකිලි, ලිබ්, සහ යනාදිය.

මොඩියුලයක ගොනු ව්යුහය

මොඩියුලයේ මූලයේ විස්තරාත්මක නම් සහිත පහත නාමාවලි අඩංගු විය හැක:

  • manifests - එහි ප්‍රකාශන අඩංගු වේ
  • files - එහි ගොනු අඩංගු වේ
  • templates - එහි සැකිලි අඩංගු වේ
  • lib - එහි Ruby කේතය අඩංගු වේ

මෙය නාමාවලි සහ ගොනු සම්පූර්ණ ලැයිස්තුවක් නොවේ, නමුත් දැනට මෙම ලිපිය සඳහා එය ප්රමාණවත් වේ.

මොඩියුලයේ ඇති සම්පත් වල නම් සහ ගොනු වල නම්

ලේඛන මෙතනින්.

මොඩියුලයක ඇති සම්පත් (පන්ති, අර්ථ දැක්වීම්) ඔබ කැමති පරිදි නම් කළ නොහැක. ඊට අමතරව, සම්පතක නම සහ රූකඩ එම සම්පත පිළිබඳ විස්තරයක් සොයන ගොනුවේ නම අතර සෘජු ලිපි හුවමාරුවක් ඇත. ඔබ නම් කිරීමේ නීති උල්ලංඝනය කරන්නේ නම්, රූකඩ හුදෙක් සම්පත් විස්තරය සොයා නොගන්නා අතර, ඔබට සම්පාදන දෝෂයක් ලැබෙනු ඇත.

නීති සරල ය:

  • මොඩියුලයක ඇති සියලුම සම්පත් මොඩියුල නාම අවකාශයේ තිබිය යුතුය. මොඩියුලය හඳුන්වන්නේ නම් foo, එවිට එහි ඇති සියලුම සම්පත් නම් කළ යුතුය foo::<anything>, හෝ හුදෙක් foo.
  • මොඩියුලයේ නම සහිත සම්පත ගොනුවේ තිබිය යුතුය init.pp.
  • අනෙකුත් සම්පත් සඳහා, ගොනු නාම යෝජනා ක්රමය පහත පරිදි වේ:
    • මොඩියුලයේ නම සහිත උපසර්ගය ඉවත දමනු ලැබේ
    • සියලුම ද්විත්ව තීරු, තිබේ නම්, ස්ලැෂ් සමඟ ප්‍රතිස්ථාපනය වේ
    • දිගුව එකතු වේ .pp

මම උදාහරණයකින් පෙන්වන්නම්. මම මොඩියුලයක් ලියනවා කියමු nginx. එහි පහත සම්පත් අඩංගු වේ:

  • класс nginx මැනිෆෙස්ටයේ විස්තර කර ඇත init.pp;
  • класс nginx::service මැනිෆෙස්ටයේ විස්තර කර ඇත service.pp;
  • නිර්වචනය කරන්න nginx::server මැනිෆෙස්ටයේ විස්තර කර ඇත server.pp;
  • නිර්වචනය කරන්න nginx::server::location මැනිෆෙස්ටයේ විස්තර කර ඇත server/location.pp.

රටා

සැකිලි යනු කුමක්දැයි ඔබම දන්නවා ඇත; මම ඒවා මෙහි විස්තරාත්මකව විස්තර නොකරමි. නමුත් මම එය අත්හැර දමමි විකිපීඩියාවට සබැඳිය.

සැකිලි භාවිතා කරන්නේ කෙසේද: අච්චුවක අර්ථය ශ්‍රිතයක් භාවිතයෙන් පුළුල් කළ හැක template, සැකිල්ලට යන මාර්ගය සම්මත කර ඇත. වර්ගයේ සම්පත් සඳහා ගොනුව පරාමිතිය සමඟ එක්ව භාවිතා වේ content. උදාහරණයක් ලෙස, මේ වගේ:

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

මාර්ගය බලන්න <modulename>/<filename> ගොනුව ඇඟවුම් කරයි <rootdir>/modules/<modulename>/templates/<filename>.

ඊට අමතරව, කාර්යයක් ඇත inline_template — එය ගොනු නාමය නොව ආදානය ලෙස සැකිලි පෙළ ලබා ගනී.

සැකිලි තුළ, ඔබට වත්මන් විෂය පථයේ ඇති සියලුම රූකඩ විචල්‍යයන් භාවිතා කළ හැක.

රූකඩ ERB සහ EPP ආකෘතියෙන් සැකිලි සඳහා සහය දක්වයි:

ERB ගැන කෙටියෙන්

පාලන ව්යුහයන්:

  • <%= ВЫРАЖЕНИЕ %> - ප්රකාශනයේ අගය ඇතුල් කරන්න
  • <% ВЫРАЖЕНИЕ %> — ප්රකාශනයක අගය ගණනය කරන්න (එය ඇතුල් නොකර). කොන්දේසි සහිත ප්‍රකාශ (නම්) සහ ලූප (එක් එක්) සාමාන්‍යයෙන් මෙහි යන්න.
  • <%# КОММЕНТАРИЙ %>

ERB හි ප්‍රකාශන Ruby වලින් ලියා ඇත (ERB යනු ඇත්ත වශයෙන්ම Embedded Ruby වේ).

මැනිෆෙස්ටයෙන් විචල්‍ය වෙත ප්‍රවේශ වීමට, ඔබ එක් කිරීමට අවශ්‍ය වේ @ විචල්‍ය නාමයට. පාලන ඉදිකිරීමකින් පසු දිස්වන රේඛා බිඳීමක් ඉවත් කිරීම සඳහා, ඔබ වසා දැමීමේ ටැගයක් භාවිතා කළ යුතුය -%>.

අච්චුව භාවිතා කිරීමේ උදාහරණය

අපි හිතමු මම ZooKeeper පාලනය කරන්න මොඩියුලයක් ලියනවා කියලා. වින්‍යාසය නිර්මාණය කිරීම සඳහා වගකිව යුතු පන්තිය මේ වගේ දෙයක් පෙනේ:

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

සහ අනුරූප අච්චුව zoo.cfg.erb - ඒ නිසා:

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

කරුණු සහ බිල්ට් විචල්‍ය

බොහෝ විට වින්‍යාසයේ නිශ්චිත කොටස දැනට නෝඩයේ සිදුවෙමින් පවතින දේ මත රඳා පවතී. උදාහරණයක් ලෙස, Debian නිකුතුව යනු කුමක්ද යන්න මත පදනම්ව, ඔබ පැකේජයේ එකක් හෝ වෙනත් අනුවාදයක් ස්ථාපනය කළ යුතුය. ඔබට මේ සියල්ල අතින් නිරීක්ෂණය කළ හැකිය, නෝඩ් වෙනස් වුවහොත් නැවත ලිවීම ප්‍රකාශ වේ. නමුත් මෙය බරපතල ප්රවේශයක් නොවේ; ස්වයංක්රීයකරණය වඩා හොඳය.

නෝඩ් පිළිබඳ තොරතුරු ලබා ගැනීම සඳහා, Puppet සතුව කරුණු නම් යාන්ත්‍රණයක් ඇත. කරුණු - මෙය ගෝලීය නාම අවකාශයේ සාමාන්‍ය විචල්‍යයන් ආකාරයෙන් ප්‍රකාශිත ලෙස ලබා ගත හැකි නෝඩය පිළිබඳ තොරතුරු වේ. උදාහරණයක් ලෙස, සත්කාරක නාමය, මෙහෙයුම් පද්ධති අනුවාදය, ප්‍රොසෙසර ගෘහ නිර්මාණ ශිල්පය, පරිශීලකයින්ගේ ලැයිස්තුව, ජාල අතුරුමුහුණත් ලැයිස්තුව සහ ඒවායේ ලිපින සහ තවත් බොහෝ දේ. කරුණු නිත්‍ය විචල්‍යයන් ලෙස මැනිෆෙස්ට් සහ ටෙම්ප්ලේට් වල පවතී.

කරුණු සමඟ වැඩ කිරීමේ උදාහරණයක්:

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

විධිමත් ලෙස කථා කරන විට, සත්‍යයකට නමක් (තන්තුවක්) සහ අගයක් ඇත (විවිධ වර්ග තිබේ: නූල්, අරා, ශබ්දකෝෂ). කන්න ගොඩනඟන ලද කරුණු සමූහයක්. ඔබට ඔබේම ලිවිය හැකිය. කරුණු එකතු කරන්නන් විස්තර කර ඇත Ruby හි ​​කාර්යයන් වැනිඑක්කෝ ක්රියාත්මක කළ හැකි ගොනු. පෝරමයේ ද කරුණු ඉදිරිපත් කළ හැකිය දත්ත සහිත පෙළ ගොනු නෝඩ් මත.

ක්‍රියාත්මක වන අතරතුර, රූකඩ නියෝජිතයා ප්‍රථමයෙන් ලබා ගත හැකි සියලුම කරුණු එකතු කරන්නන් pappetserver සිට node වෙත පිටපත් කරයි, ඉන්පසු එය ඒවා දියත් කර එකතු කරන ලද කරුණු සේවාදායකයට යවයි; මෙයින් පසු, සේවාදායකයා නාමාවලිය සම්පාදනය කිරීමට පටන් ගනී.

ක්‍රියාත්මක කළ හැකි ගොනු ආකාරයෙන් කරුණු

එවැනි කරුණු නාමාවලියෙහි මොඩියුලවල තබා ඇත facts.d. ඇත්ත වශයෙන්ම, ගොනු ක්රියාත්මක කළ හැකි විය යුතුය. ධාවනය කරන විට, ඔවුන් YAML හෝ key=value ආකෘතියෙන් සම්මත ප්‍රතිදානයට තොරතුරු ප්‍රතිදානය කළ යුතුය.

ඔබගේ මොඩියුලය යොදවා ඇති පොපෙට් සේවාදායකය මගින් පාලනය වන සියලුම නෝඩ් සඳහා කරුණු අදාළ වන බව අමතක නොකරන්න. එමනිසා, ස්ක්‍රිප්ට් එකෙහි, ඔබේ සත්‍ය ක්‍රියා කිරීමට අවශ්‍ය සියලුම වැඩසටහන් සහ ගොනු පද්ධතිය සතුව තිබේදැයි පරීක්ෂා කිරීමට වග බලා ගන්න.

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

රූබි කරුණු

එවැනි කරුණු නාමාවලියෙහි මොඩියුලවල තබා ඇත 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

පෙළ කරුණු

එවැනි කරුණු නාමාවලියෙහි නෝඩ් මත තබා ඇත /etc/facter/facts.d පැරණි රූකඩයේ හෝ /etc/puppetlabs/facts.d නව රූකඩයේ.

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

කරුණු වෙත පැමිණීම

කරුණු වෙත ප්රවේශ වීමට ක්රම දෙකක් තිබේ:

  • ශබ්දකෝෂය හරහා $facts: $facts['fqdn'];
  • සත්‍ය නාමය විචල්‍ය නාමය ලෙස භාවිතා කිරීම: $fqdn.

ශබ්දකෝෂයක් භාවිතා කිරීම වඩාත් සුදුසුය $facts, හෝ ඊටත් වඩා හොඳ, ගෝලීය නාම අවකාශය දක්වන්න ($::facts).

ලේඛනයේ අදාළ කොටස මෙන්න.

බිල්ට් විචල්‍ය

කරුණු වලට අමතරව, ද ඇත සමහර විචල්යයන්, ගෝලීය නාම අවකාශයේ ඇත.

  • විශ්වාස කළ කරුණු — සේවාලාභියාගේ සහතිකයෙන් ලබාගත් විචල්‍ය (සහතිකය සාමාන්‍යයෙන් නිකුත් කරනු ලබන්නේ පොපෙට් සේවාදායකයක බැවින්, නියෝජිතයාට එහි සහතිකය ගෙන වෙනස් කළ නොහැක, එබැවින් විචල්‍යයන් “විශ්වාසදායක” වේ): සහතිකයේ නම, සත්කාරක සහ වසම් නාමය, සහතිකයෙන් දිගු.
  • සේවාදායක කරුණු —සේවාදායකය පිළිබඳ තොරතුරු සම්බන්ධ විචල්‍යයන්—අනුවාදය, නම, සේවාදායක IP ලිපිනය, පරිසරය.
  • නියෝජිත කරුණු - විචල්‍ය රූකඩ නියෝජිතයා විසින් සෘජුවම එකතු කරන ලද අතර, සාධකය මගින් නොවේ - සහතිකයේ නම, නියෝජිත අනුවාදය, රූකඩ අනුවාදය.
  • ප්රධාන විචල්යයන් - Pappetmaster විචල්‍ය (sic!). එය තුළ ඇති ආකාරයටම වේ සේවාදායක කරුණු, ප්ලස් වින්‍යාස පරාමිති අගයන් ඇත.
  • සම්පාදක විචල්යයන් — එක් එක් විෂය පථය තුළ වෙනස් වන සම්පාදක විචල්‍යයන්: වත්මන් මොඩියුලයේ නම සහ වත්මන් වස්තුවට ප්‍රවේශ වූ මොඩියුලයේ නම. උදාහරණයක් ලෙස, ඔබේ පුද්ගලික පන්ති වෙනත් මොඩියුල වලින් සෘජුවම භාවිතා නොකරන බව පරීක්ෂා කිරීමට ඒවා භාවිතා කළ හැක.

එකතු කිරීම 1: මේ සියල්ල ධාවනය කර දෝෂහරණය කරන්නේ කෙසේද?

ලිපියේ රූකඩ කේතය පිළිබඳ බොහෝ උදාහරණ අඩංගු විය, නමුත් මෙම කේතය ක්‍රියාත්මක කරන්නේ කෙසේදැයි අපට කීවේ නැත. හොඳයි, මම මාවම නිවැරදි කරනවා.

Puppet ධාවනය කිරීමට නියෝජිතයෙකු ප්‍රමාණවත් වේ, නමුත් බොහෝ අවස්ථා සඳහා ඔබට සේවාදායකයක් ද අවශ්‍ය වේ.

නියෝජිත

අවම වශයෙන් XNUMX වන අනුවාදයේ සිට, රූකඩ නියෝජිත පැකේජ වලින් නිල Puppetlabs ගබඩාව සියලුම පරායත්තතා (රූබි සහ අනුරූප මැණික්) අඩංගු වේ, එබැවින් ස්ථාපන දුෂ්කරතා නොමැත (මම කතා කරන්නේ ඩේබියන් මත පදනම් වූ බෙදාහැරීම් ගැන - අපි RPM මත පදනම් බෙදාහැරීම් භාවිතා නොකරමු).

සරලම අවස්ථාවක, රූකඩ වින්‍යාසය භාවිතා කිරීම සඳහා, නියෝජිතයා සේවාදායක රහිත ප්‍රකාරයේදී දියත් කිරීම ප්‍රමාණවත් වේ: රූකඩ කේතය නෝඩයට පිටපත් කර ඇත්නම්, දියත් කරන්න 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

ඇත්ත වශයෙන්ම, සේවාදායකය සැකසීමට සහ ඩේමන් මාදිලියේ නෝඩ් වල නියෝජිතයන් ධාවනය කිරීම වඩා හොඳය - එවිට සෑම පැය භාගයකට වරක් ඔවුන් සේවාදායකයෙන් බාගත කළ වින්‍යාසය යොදනු ඇත.

ඔබට කාර්යයේ තල්ලු ආකෘතිය අනුකරණය කළ හැකිය - ඔබ උනන්දුවක් දක්වන නෝඩය වෙත ගොස් ආරම්භ කරන්න sudo puppet agent -t. යතුර -t (--test) ඇත්ත වශයෙන්ම තනි තනිව සක්රිය කළ හැකි විකල්ප කිහිපයක් ඇතුළත් වේ. මෙම විකල්පයන් පහත සඳහන් දේ ඇතුළත් වේ:

  • ඩීමන් මාදිලියේ ධාවනය නොකරන්න (පෙරනිමියෙන් නියෝජිතයා ඩීමන් මාදිලියෙන් ආරම්භ වේ);
  • නාමාවලිය යෙදීමෙන් පසු වසා දමන්න (පෙරනිමියෙන්, නියෝජිතයා දිගටම වැඩ කරන අතර පැය භාගයකට වරක් වින්‍යාසය යොදනු ඇත);
  • සවිස්තරාත්මක වැඩ සටහනක් ලියන්න;
  • ගොනු වල වෙනස්කම් පෙන්වන්න.

නියෝජිතයාට වෙනස්කම් නොමැතිව මෙහෙයුම් මාදිලියක් ඇත - ඔබ නිවැරදි වින්‍යාසය ලියා ඇති බව ඔබට විශ්වාස නැති විට සහ ක්‍රියාත්මක වන විට නියෝජිතයා හරියටම වෙනස් වන්නේ කුමක්දැයි පරීක්ෂා කිරීමට අවශ්‍ය විට ඔබට එය භාවිතා කළ හැකිය. මෙම මාදිලිය පරාමිතිය මඟින් සක්රිය කර ඇත --noop විධාන රේඛාව මත: sudo puppet agent -t --noop.

ඊට අමතරව, ඔබට කාර්යයේ නිදොස් කිරීමේ ලඝු-සටහන සක්රිය කළ හැකිය - එය තුළ, රූකඩය එය සිදු කරන සියලුම ක්රියාවන් ගැන ලියයි: එය දැනට සකසන සම්පත ගැන, මෙම සම්පතේ පරාමිතීන් ගැන, එය දියත් කරන වැඩසටහන් ගැන. ඇත්ත වශයෙන්ම මෙය පරාමිතියකි --debug.

සර්වර්

මම මෙම ලිපියෙන් pappetserver හි සම්පූර්ණ සැකසුම සහ එයට කේතය යෙදවීම සලකා බලන්නේ නැත; කුඩා සංඛ්‍යාවක් සමඟ වැඩ කිරීමට අමතර වින්‍යාසයක් අවශ්‍ය නොවන සේවාදායකයේ සම්පූර්ණ ක්‍රියාකාරී අනුවාදයක් කොටුවෙන් පිටත ඇති බව පමණක් මම කියමි. නෝඩ් (කියන්න, සියයක් දක්වා). නෝඩ් විශාල සංඛ්‍යාවක් සුසර කිරීම අවශ්‍ය වනු ඇත - පෙරනිමියෙන්, රූකඩ සේවාදායකය සේවකයින් හතර දෙනෙකුට වඩා දියත් කරයි, වැඩි කාර්ය සාධනයක් සඳහා ඔබ ඔවුන්ගේ සංඛ්‍යාව වැඩි කළ යුතු අතර මතක සීමාවන් වැඩි කිරීමට අමතක නොකරන්න, එසේ නොමැතිනම් සේවාදායකය බොහෝ විට කුණු එකතු කරයි.

කේත යෙදවීම - ඔබට එය ඉක්මනින් සහ පහසුවෙන් අවශ්‍ය නම්, බලන්න (r10k)[https://github.com/puppetlabs/r10k], කුඩා ස්ථාපනයන් සඳහා එය ප්රමාණවත් විය යුතුය.

අතිරේක 2: කේතීකරණ මාර්ගෝපදේශ

  1. සියලුම තර්ක පන්ති සහ නිර්වචන තුළ තබන්න.
  2. පන්ති සහ නිර්වචන නෝඩ් විස්තර කරන ප්‍රකාශනවල නොව මොඩියුලවල තබා ගන්න.
  3. කරුණු භාවිතා කරන්න.
  4. ධාරක නාම මත පදනම්ව ifs සාදන්න එපා.
  5. පන්ති සහ නිර්වචන සඳහා පරාමිති එක් කිරීමට නිදහස් වන්න - මෙය පන්තියේ / නිර්වචනයේ සිරුරේ සැඟවී ඇති ව්‍යංග තර්කනයට වඩා හොඳය.

මෙය කිරීමට මා නිර්දේශ කරන්නේ මන්දැයි මම ඊළඟ ලිපියෙන් පැහැදිලි කරමි.

නිගමනය

හැඳින්වීම සමඟ අවසන් කරමු. මීළඟ ලිපියෙන් Hiera, ENC සහ PuppetDB ගැන කියන්නම්.

සමීක්ෂණයට සහභාගී විය හැක්කේ ලියාපදිංචි පරිශීලකයින්ට පමණි. පුරන්නකරුණාකර.

ඇත්ත වශයෙන්ම, තවත් බොහෝ කරුණු තිබේ - මට පහත මාතෘකා පිළිබඳ ලිපි ලිවිය හැකිය, ඔබ කියවීමට කැමති දේ ගැන ඡන්දය දෙන්න:

  • 59,1%උසස් රූකඩ නිර්මාණ - සමහර මීළඟ මට්ටමේ ජරාව: ලූප, සිතියම්කරණය සහ අනෙකුත් ලැම්ඩා ප්‍රකාශන, සම්පත් එකතු කරන්නන්, අපනයනය කරන ලද සම්පත් සහ රූකඩ, ටැග්, සපයන්නන්, වියුක්ත දත්ත වර්ග හරහා අන්තර් සත්කාරක සන්නිවේදනය.13
  • 31,8%"මම මගේ මවගේ පරිපාලක" හෝ අපි Avito හි විවිධ අනුවාදවල poppet සේවාදායකයන් කිහිපයක් සමඟ මිතුරු වූ ආකාරය සහ, ප්‍රතිපත්තිමය වශයෙන්, poppet සේවාදායකය පරිපාලනය කිරීමේ කොටස.7
  • 81,8%අපි රූකඩ කේතය ලියන ආකාරය: උපකරණ, ලේඛන, පරීක්ෂණ, CI/CD.18

පරිශීලකයින් 22 දෙනෙක් ඡන්දය දුන්හ. පරිශීලකයින් 9 දෙනෙක් ඡන්දය දීමෙන් වැළකී සිටියහ.

මූලාශ්රය: www.habr.com