பப்பட் அறிமுகம்

பப்பட் என்பது ஒரு கட்டமைப்பு மேலாண்மை அமைப்பு. இது ஹோஸ்ட்களை விரும்பிய நிலைக்கு கொண்டு வந்து இந்த நிலையை பராமரிக்க பயன்படுகிறது.

நான் இப்போது ஐந்து வருடங்களுக்கும் மேலாக பப்பட் உடன் வேலை செய்து வருகிறேன். இந்த உரையானது, அதிகாரப்பூர்வ ஆவணங்களில் இருந்து முக்கிய புள்ளிகளின் மொழிபெயர்க்கப்பட்ட மற்றும் மறுவரிசைப்படுத்தப்பட்ட தொகுப்பாகும், இது ஆரம்பநிலையாளர்கள் பொம்மையின் சாரத்தை விரைவாக புரிந்து கொள்ள அனுமதிக்கும்.

பப்பட் அறிமுகம்

அடிப்படை தகவல்

பப்பட்டின் இயக்க முறைமை கிளையன்ட்-சர்வர் ஆகும், இருப்பினும் இது வரையறுக்கப்பட்ட செயல்பாட்டுடன் சர்வர்லெஸ் செயல்பாட்டையும் ஆதரிக்கிறது.

செயல்பாட்டின் இழுக்கும் மாதிரி பயன்படுத்தப்படுகிறது: இயல்பாக, ஒவ்வொரு அரை மணி நேரத்திற்கும் ஒருமுறை, வாடிக்கையாளர்கள் ஒரு உள்ளமைவுக்காக சேவையகத்தைத் தொடர்புகொண்டு அதைப் பயன்படுத்துகின்றனர். நீங்கள் Ansible உடன் பணிபுரிந்திருந்தால், அவர்கள் வேறு புஷ் மாதிரியைப் பயன்படுத்துகிறார்கள்: நிர்வாகி உள்ளமைவைப் பயன்படுத்துவதற்கான செயல்முறையைத் தொடங்குகிறார், வாடிக்கையாளர்கள் எதையும் பயன்படுத்த மாட்டார்கள்.

நெட்வொர்க் தகவல்தொடர்புகளின் போது, ​​இருவழி TLS குறியாக்கம் பயன்படுத்தப்படுகிறது: சேவையகம் மற்றும் கிளையன்ட் தங்கள் தனிப்பட்ட விசைகள் மற்றும் தொடர்புடைய சான்றிதழ்களைக் கொண்டுள்ளனர். பொதுவாக சர்வர் வாடிக்கையாளர்களுக்கு சான்றிதழ்களை வழங்குகிறது, ஆனால் கொள்கையளவில் வெளிப்புற CA ஐப் பயன்படுத்த முடியும்.

அறிக்கைகளுக்கு அறிமுகம்

பொம்மை சொற்களில் பொம்மை சேவையகத்திற்கு இணைக்க முனைகள் (முனைகள்). முனைகளுக்கான கட்டமைப்பு எழுதப்பட்டுள்ளது அறிக்கைகளில் ஒரு சிறப்பு நிரலாக்க மொழியில் - பப்பட் டிஎஸ்எல்.

பப்பட் டிஎஸ்எல் ஒரு அறிவிப்பு மொழி. இது தனிப்பட்ட வளங்களின் அறிவிப்புகளின் வடிவத்தில் முனையின் விரும்பிய நிலையை விவரிக்கிறது, எடுத்துக்காட்டாக:

  • கோப்பு உள்ளது மற்றும் அதில் குறிப்பிட்ட உள்ளடக்கம் உள்ளது.
  • தொகுப்பு நிறுவப்பட்டுள்ளது.
  • சேவை தொடங்கியுள்ளது.

வளங்கள் ஒன்றோடொன்று இணைக்கப்படலாம்:

  • சார்புகள் உள்ளன, அவை வளங்கள் பயன்படுத்தப்படும் வரிசையை பாதிக்கின்றன.
    எடுத்துக்காட்டாக, "முதலில் தொகுப்பை நிறுவவும், பின்னர் உள்ளமைவு கோப்பைத் திருத்தவும், பின்னர் சேவையைத் தொடங்கவும்."
  • அறிவிப்புகள் உள்ளன - ஒரு ஆதாரம் மாறியிருந்தால், அது குழுசேர்ந்த ஆதாரங்களுக்கு அறிவிப்புகளை அனுப்புகிறது.
    எடுத்துக்காட்டாக, உள்ளமைவு கோப்பு மாறினால், நீங்கள் தானாகவே சேவையை மறுதொடக்கம் செய்யலாம்.

கூடுதலாக, பப்பட் டிஎஸ்எல் செயல்பாடுகள் மற்றும் மாறிகள் மற்றும் நிபந்தனை அறிக்கைகள் மற்றும் தேர்வாளர்களைக் கொண்டுள்ளது. பல்வேறு டெம்ப்ளேட்டிங் வழிமுறைகளும் ஆதரிக்கப்படுகின்றன - EPP மற்றும் ERB.

பப்பட் ரூபியில் எழுதப்பட்டுள்ளது, எனவே பல கட்டுமானங்களும் விதிமுறைகளும் அங்கிருந்து எடுக்கப்பட்டுள்ளன. ரூபி பப்பட் விரிவாக்க உங்களை அனுமதிக்கிறது - சிக்கலான தர்க்கம், புதிய வகையான வளங்கள், செயல்பாடுகளைச் சேர்க்கவும்.

பப்பட் இயங்கும் போது, ​​சர்வரில் உள்ள ஒவ்வொரு குறிப்பிட்ட முனைக்கான வெளிப்பாடுகள் ஒரு கோப்பகத்தில் தொகுக்கப்படும். அடைவு செயல்பாடுகள், மாறிகள் மற்றும் நிபந்தனை அறிக்கைகளின் விரிவாக்கம் ஆகியவற்றின் மதிப்பைக் கணக்கிட்ட பிறகு வளங்கள் மற்றும் அவற்றின் உறவுகளின் பட்டியல்.

தொடரியல் மற்றும் கோட் ஸ்டைல்

வழங்கப்பட்ட எடுத்துக்காட்டுகள் போதுமானதாக இல்லாவிட்டால் தொடரியலைப் புரிந்துகொள்ள உதவும் அதிகாரப்பூர்வ ஆவணங்களின் பிரிவுகள் இங்கே:

மேனிஃபெஸ்ட் எப்படி இருக்கும் என்பதற்கான எடுத்துக்காட்டு இங்கே:

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

உள்தள்ளல் மற்றும் வரி முறிவுகள் மேனிஃபெஸ்ட்டின் அவசியமான பகுதியாக இல்லை, ஆனால் பரிந்துரைக்கப்படுகிறது நடை வழிகாட்டி. சுருக்கம்:

  • இரண்டு இட உள்தள்ளல்கள், தாவல்கள் பயன்படுத்தப்படவில்லை.
  • சுருள் பிரேஸ்கள் ஒரு இடைவெளியால் பிரிக்கப்படுகின்றன; பெருங்குடல்கள் ஒரு இடைவெளியால் பிரிக்கப்படவில்லை.
  • கடைசி அளவுரு உட்பட ஒவ்வொரு அளவுருவிற்கும் காற்புள்ளிகள். ஒவ்வொரு அளவுருவும் ஒரு தனி வரியில் உள்ளது. அளவுருக்கள் மற்றும் ஒரு அளவுரு இல்லாத வழக்கில் விதிவிலக்கு செய்யப்படுகிறது: நீங்கள் ஒரு வரியில் மற்றும் கமா இல்லாமல் எழுதலாம் (அதாவது. resource { 'title': } и resource { 'title': param => value }).
  • அளவுருக்கள் மீது அம்புகள் ஒரே அளவில் இருக்க வேண்டும்.
  • வள உறவு அம்புகள் அவர்களுக்கு முன்னால் எழுதப்பட்டுள்ளன.

pappetserver இல் கோப்புகளின் இருப்பிடம்

மேலும் விளக்கத்திற்கு, "ரூட் டைரக்டரி" என்ற கருத்தை அறிமுகப்படுத்துகிறேன். ரூட் டைரக்டரி என்பது ஒரு குறிப்பிட்ட முனைக்கான பப்பட் உள்ளமைவைக் கொண்டிருக்கும் அடைவு ஆகும்.

பப்பட்டின் பதிப்பு மற்றும் பயன்படுத்தப்படும் சூழல்களைப் பொறுத்து ரூட் அடைவு மாறுபடும். சூழல்கள் என்பது தனித்தனி கோப்பகங்களில் சேமிக்கப்படும் கட்டமைப்புகளின் சுயாதீன தொகுப்புகள். பொதுவாக git உடன் இணைந்து பயன்படுத்தப்படுகிறது, இதில் சூழல்கள் git கிளைகளிலிருந்து உருவாக்கப்படுகின்றன. அதன்படி, ஒவ்வொரு முனையும் ஒரு சூழலில் அல்லது மற்றொரு இடத்தில் அமைந்துள்ளது. இது முனையில் அல்லது ENC இல் கட்டமைக்கப்படலாம், இதைப் பற்றி அடுத்த கட்டுரையில் நான் பேசுவேன்.

  • மூன்றாவது பதிப்பில் ("பழைய பப்பட்") அடிப்படை அடைவு இருந்தது /etc/puppet. சூழல்களைப் பயன்படுத்துவது விருப்பமானது - எடுத்துக்காட்டாக, பழைய பொம்மையுடன் அவற்றைப் பயன்படுத்த மாட்டோம். சூழல்கள் பயன்படுத்தப்பட்டால், அவை பொதுவாக சேமிக்கப்படும் /etc/puppet/environments, ரூட் அடைவு சூழல் கோப்பகமாக இருக்கும். சூழல்கள் பயன்படுத்தப்படாவிட்டால், ரூட் கோப்பகம் அடிப்படை கோப்பகமாக இருக்கும்.
  • நான்காவது பதிப்பிலிருந்து ("புதிய பப்பட்") தொடங்கி, சூழல்களின் பயன்பாடு கட்டாயமானது, மேலும் அடிப்படை அடைவு நகர்த்தப்பட்டது /etc/puppetlabs/code. அதன்படி, சூழல்கள் சேமிக்கப்படுகின்றன /etc/puppetlabs/code/environments, ரூட் அடைவு என்பது சூழல் அடைவு.

ரூட் கோப்பகத்தில் ஒரு துணை அடைவு இருக்க வேண்டும் 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 இலிருந்து கோப்பு பயன்படுத்தப்படும்)
  • இலக்கு - சிம்லிங்க் சுட்டிக்காட்ட வேண்டிய இடத்தில் (ஒன்றாகப் பயன்படுத்த முடியாது உள்ளடக்கம் அல்லது மூல)
  • உரிமையாளர் - கோப்பை வைத்திருக்க வேண்டிய பயனர்
  • குழு - கோப்பு எந்தக் குழுவிற்குச் சொந்தமானது
  • முறையில் — கோப்பு அனுமதிகள் (ஒரு சரமாக)
  • மறுபரிசீலனை - சுழல்நிலை அடைவு செயலாக்கத்தை செயல்படுத்துகிறது
  • களையெடுப்பு - பப்பட்டில் விவரிக்கப்படாத கோப்புகளை நீக்குகிறது
  • படை - பப்பட்டில் விவரிக்கப்படாத கோப்பகங்களை நீக்குகிறது

தொகுப்பு

தொகுப்புகளை நிறுவி நீக்குகிறது. அறிவிப்புகளைக் கையாள முடியும் - அளவுரு குறிப்பிடப்பட்டால் தொகுப்பை மீண்டும் நிறுவுகிறது 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).
  • நிலை — சேவை initscript கட்டளையை ஆதரிக்கிறதா என்பதைக் குறிக்கவும் status. என்றால் false, பின்னர் அளவுரு மதிப்பு பயன்படுத்தப்படுகிறது நிலை. இயல்புநிலை true.

நினைவகத்தில்

வெளிப்புற கட்டளைகளை இயக்குகிறது. நீங்கள் அளவுருக்களைக் குறிப்பிடவில்லை என்றால் உருவாக்குகிறது, இருந்தால் மட்டும், வரை அல்லது புத்துணர்ச்சியுடன், பப்பட் இயக்கப்படும் ஒவ்வொரு முறையும் கட்டளை இயக்கப்படும். அறிவிப்புகளைச் செயலாக்க முடியும் - ஒரு கட்டளையை இயக்குகிறது.

விருப்பங்கள்:

  • வளத்தின் பெயர் - செயல்படுத்தப்பட வேண்டிய கட்டளை (விரும்பினால்)
  • கட்டளை - செயல்படுத்தப்பட வேண்டிய கட்டளை (அது பெயரில் குறிப்பிடப்படவில்லை என்றால்)
  • பாதை - இயங்கக்கூடிய கோப்பைத் தேடுவதற்கான பாதைகள்
  • இருந்தால் மட்டும் — இந்த அளவுருவில் குறிப்பிடப்பட்ட கட்டளை பூஜ்ஜிய திரும்பக் குறியீட்டுடன் நிறைவு செய்யப்பட்டால், முக்கிய கட்டளை செயல்படுத்தப்படும்
  • வரை — இந்த அளவுருவில் குறிப்பிடப்பட்ட கட்டளை பூஜ்ஜியம் அல்லாத திரும்பக் குறியீட்டுடன் முடிக்கப்பட்டால், முக்கிய கட்டளை செயல்படுத்தப்படும்
  • உருவாக்குகிறது — இந்த அளவுருவில் குறிப்பிடப்பட்ட கோப்பு இல்லை என்றால், முக்கிய கட்டளை செயல்படுத்தப்படும்
  • புத்துணர்ச்சியுடன் - என்றால் true, இந்த exec பிற ஆதாரங்களில் இருந்து அறிவிப்பைப் பெறும்போது மட்டுமே கட்டளை இயக்கப்படும்
  • cwd — கட்டளையை இயக்க வேண்டிய அடைவு
  • பயனர் — கட்டளையை இயக்கும் பயனர்
  • வழங்குநர் - கட்டளையை எவ்வாறு இயக்குவது:
    • பொசிக்ஸ் - ஒரு குழந்தை செயல்முறை வெறுமனே உருவாக்கப்பட்டது, குறிப்பிட வேண்டும் பாதை
    • ஓடு - கட்டளை ஷெல்லில் தொடங்கப்பட்டது /bin/sh, குறிப்பிடப்படாமல் இருக்கலாம் பாதை, நீங்கள் குளோபிங், குழாய்கள் மற்றும் பிற ஷெல் அம்சங்களைப் பயன்படுத்தலாம். பொதுவாக ஏதேனும் சிறப்பு எழுத்துகள் இருந்தால் தானாகவே கண்டறியப்படும் (|, ;, &&, || முதலியன).

கிரான்

கிரான்ஜோப்களைக் கட்டுப்படுத்துகிறது.

விருப்பங்கள்:

  • வளத்தின் பெயர் - ஒருவித அடையாளங்காட்டி
  • உறுதி - கிரவுன்ஜாப் நிலை:
    • present - இல்லை என்றால் உருவாக்கவும்
    • absent - இருந்தால் நீக்கவும்
  • கட்டளை - என்ன கட்டளையை இயக்க வேண்டும்
  • சூழல் - எந்த சூழலில் கட்டளையை இயக்க வேண்டும் (சுற்றுச்சூழல் மாறிகளின் பட்டியல் மற்றும் அவற்றின் மதிப்புகள் வழியாக =)
  • பயனர் — எந்த பயனரிடமிருந்து கட்டளையை இயக்க வேண்டும்
  • நிமிடம், மணி, வார நாள், மாதம், மாத நாள் - எப்போது கிரானை இயக்க வேண்டும். இந்த பண்புக்கூறுகளில் ஏதேனும் குறிப்பிடப்படவில்லை என்றால், அதன் மதிப்பு க்ரான்டாப்பில் இருக்கும் *.

பப்பட் 6.0 இல் கிரான் என பெட்டியில் இருந்து அகற்றப்பட்டது puppetserver இல், எனவே பொது தளத்தில் எந்த ஆவணமும் இல்லை. ஆனால் அவன் பெட்டியில் உள்ளது பொம்மை-ஏஜெண்டில், தனித்தனியாக நிறுவ வேண்டிய அவசியமில்லை. அதற்கான ஆவணங்களை நீங்கள் பார்க்கலாம் பப்பட்டின் ஐந்தாவது பதிப்பிற்கான ஆவணத்தில், அல்லது GitHub இல்.

பொதுவாக வளங்களைப் பற்றி

வள தனித்துவத்திற்கான தேவைகள்

நாம் சந்திக்கும் பொதுவான தவறு நகல் அறிவிப்பு. கோப்பகத்தில் ஒரே பெயரில் இரண்டு அல்லது அதற்கு மேற்பட்ட ஆதாரங்கள் தோன்றும் போது இந்தப் பிழை ஏற்படுகிறது.

எனவே, நான் மீண்டும் எழுதுகிறேன்: ஒரே முனைக்கான மேனிஃபெஸ்டுகள் ஒரே தலைப்பில் ஒரே மாதிரியான ஆதாரங்களைக் கொண்டிருக்கக்கூடாது!

சில நேரங்களில் அதே பெயரில் தொகுப்புகளை நிறுவ வேண்டிய அவசியம் உள்ளது, ஆனால் வெவ்வேறு தொகுப்பு மேலாளர்களுடன். இந்த வழக்கில், நீங்கள் அளவுருவைப் பயன்படுத்த வேண்டும் nameபிழையைத் தவிர்க்க:

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

பிற ஆதார வகைகளும் நகலெடுப்பதைத் தவிர்க்க உதவும் ஒத்த விருப்பங்களைக் கொண்டுள்ளன - name у சேவை, command у நினைவகத்தில், மற்றும் பல.

மெட்டாபரமீட்டர்கள்

ஒவ்வொரு வள வகைக்கும் அதன் தன்மையைப் பொருட்படுத்தாமல் சில சிறப்பு அளவுருக்கள் உள்ளன.

மெட்டா அளவுருக்களின் முழு பட்டியல் பொம்மை ஆவணத்தில்.

சிறு பட்டியல்:

  • தேவைப்படும் — இந்த அளவுரு இந்த ஆதாரம் எந்த ஆதாரங்களைச் சார்ந்துள்ளது என்பதைக் குறிக்கிறது.
  • முன் - இந்த அளவுரு இந்த வளத்தை சார்ந்திருக்கும் வளங்களைக் குறிப்பிடுகிறது.
  • பதிவு — எந்த ஆதாரங்களில் இருந்து இந்த ஆதாரம் அறிவிப்புகளைப் பெறுகிறது என்பதை இந்த அளவுரு குறிப்பிடுகிறது.
  • அறிவிக்குமாறு — எந்த ஆதாரங்கள் இந்த ஆதாரத்திலிருந்து அறிவிப்புகளைப் பெறுகின்றன என்பதை இந்த அளவுரு குறிப்பிடுகிறது.

பட்டியலிடப்பட்ட அனைத்து மெட்டாபரமீட்டர்களும் ஒற்றை ஆதார இணைப்பு அல்லது சதுர அடைப்புக்குறிக்குள் உள்ள இணைப்புகளின் வரிசையை ஏற்கின்றன.

ஆதாரங்களுக்கான இணைப்புகள்

ஆதார இணைப்பு என்பது வளத்தைப் பற்றிய குறிப்பு மட்டுமே. அவை முக்கியமாக சார்புகளைக் குறிக்கப் பயன்படுத்தப்படுகின்றன. இல்லாத ஆதாரத்தைக் குறிப்பிடுவது தொகுத்தல் பிழையை ஏற்படுத்தும்.

இணைப்பின் தொடரியல் பின்வருமாறு: ஒரு பெரிய எழுத்துடன் வள வகை (வகைப் பெயரில் இரட்டைப் பெருங்குடல்கள் இருந்தால், பெருங்குடல்களுக்கு இடையில் உள்ள பெயரின் ஒவ்வொரு பகுதியும் பெரியதாக இருக்கும்), பின்னர் சதுர அடைப்புக்குறிக்குள் உள்ள வளத்தின் பெயர் (பெயரின் வழக்கு மாறாது!). இடைவெளிகள் இருக்கக்கூடாது; வகைப் பெயருக்குப் பிறகு உடனடியாக சதுர அடைப்புக்குறிகள் எழுதப்படும்.

உதாரணம்:

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

சார்புகள் மற்றும் அறிவிப்புகள்

ஆவணங்கள் இங்கே.

முன்பு கூறியது போல், வளங்களுக்கிடையேயான எளிய சார்புகள் மாறக்கூடியவை. மூலம், சார்புகளைச் சேர்க்கும்போது கவனமாக இருங்கள் - நீங்கள் சுழற்சி சார்புகளை உருவாக்கலாம், இது தொகுத்தல் பிழையை ஏற்படுத்தும்.

சார்புகளைப் போலன்றி, அறிவிப்புகள் மாறக்கூடியவை அல்ல. அறிவிப்புகளுக்கு பின்வரும் விதிகள் பொருந்தும்:

  • ஆதாரம் அறிவிப்பைப் பெற்றால், அது புதுப்பிக்கப்படும். புதுப்பித்தல் செயல்கள் ஆதார வகையைப் பொறுத்தது - நினைவகத்தில் கட்டளையை இயக்குகிறது, சேவை சேவையை மீண்டும் தொடங்குகிறது, தொகுப்பு தொகுப்பை மீண்டும் நிறுவுகிறது. ஆதாரத்தில் புதுப்பிப்பு செயல் வரையறுக்கப்படவில்லை என்றால், எதுவும் நடக்காது.
  • பப்பட்டின் ஒரு ஓட்டத்தின் போது, ​​ஆதாரம் ஒன்றுக்கு மேற்பட்ட முறை புதுப்பிக்கப்படாது. அறிவிப்புகளில் சார்புகள் மற்றும் சார்பு வரைபடத்தில் சுழற்சிகள் இல்லாததால் இது சாத்தியமாகும்.
  • பப்பட் ஒரு வளத்தின் நிலையை மாற்றினால், அந்த ஆதாரம் சந்தா பெற்ற அனைத்து ஆதாரங்களுக்கும் அறிவிப்புகளை அனுப்புகிறது.
  • ஒரு ஆதாரம் புதுப்பிக்கப்பட்டால், அது குழுசேர்ந்த அனைத்து ஆதாரங்களுக்கும் அறிவிப்புகளை அனுப்புகிறது.

குறிப்பிடப்படாத அளவுருக்களைக் கையாளுதல்

ஒரு விதியாக, சில ஆதார அளவுரு இயல்புநிலை மதிப்பைக் கொண்டிருக்கவில்லை மற்றும் இந்த அளவுரு மேனிஃபெஸ்டில் குறிப்பிடப்படவில்லை என்றால், கணுவில் உள்ள தொடர்புடைய ஆதாரத்திற்காக பப்பட் இந்த சொத்தை மாற்றாது. எடுத்துக்காட்டாக, ஒரு வகை வளம் என்றால் கோப்பு அளவுரு குறிப்பிடப்படவில்லை owner, பின்னர் பப்பட் தொடர்புடைய கோப்பின் உரிமையாளரை மாற்றாது.

வகுப்புகள், மாறிகள் மற்றும் வரையறைகள் அறிமுகம்

உள்ளமைவின் ஒரே பகுதியைக் கொண்ட பல முனைகள் எங்களிடம் உள்ளன, ஆனால் வேறுபாடுகளும் உள்ளன - இல்லையெனில் அனைத்தையும் ஒரே தொகுதியில் விவரிக்கலாம். 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}"

பப்பட் உண்டு பெயர்வெளிகள், மற்றும் மாறிகள், அதன்படி, வேண்டும் காணக்கூடிய பகுதி: ஒரே பெயரைக் கொண்ட ஒரு மாறியை வெவ்வேறு பெயர்வெளிகளில் வரையறுக்கலாம். ஒரு மாறியின் மதிப்பைத் தீர்க்கும் போது, ​​மாறி தற்போதைய பெயர்வெளியில் தேடப்படும், பின்னர் இணைக்கப்பட்ட பெயர்வெளியில், மற்றும் பல.

பெயர்வெளி எடுத்துக்காட்டுகள்:

  • உலகளாவிய - வகுப்பு அல்லது முனை விளக்கத்திற்கு வெளியே மாறிகள் அங்கு செல்கின்றன;
  • முனை விளக்கத்தில் முனை பெயர்வெளி;
  • வகுப்பு விளக்கத்தில் வர்க்க பெயர்வெளி.

மாறியை அணுகும் போது தெளிவின்மையைத் தவிர்க்க, நீங்கள் பெயர்வெளியை மாறி பெயரில் குறிப்பிடலாம்:

# переменная без пространства имён
$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',   # задаём параметры класса точно так же, как параметры для других ресурсов
  }
}

பப்பட்டில், மாறிகள் தட்டச்சு செய்யப்படுகின்றன. சாப்பிடு பல தரவு வகைகள். வகுப்புகள் மற்றும் வரையறைகளுக்கு அனுப்பப்பட்ட அளவுரு மதிப்புகளை சரிபார்க்க தரவு வகைகள் பொதுவாகப் பயன்படுத்தப்படுகின்றன. அனுப்பப்பட்ட அளவுரு குறிப்பிட்ட வகையுடன் பொருந்தவில்லை என்றால், தொகுத்தல் பிழை ஏற்படும்.

அளவுரு பெயருக்கு முன் வகை எழுதப்பட்டது:

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

வகுப்புகள்: வகுப்பின் பெயர் மற்றும் வகுப்பு{'வகுப்புப்பெயர்':}

ஒவ்வொரு வகுப்பும் ஒரு வகை வளமாகும் வர்க்கம். வேறு எந்த வகையான வளத்தையும் போலவே, ஒரே முனையில் ஒரே வகுப்பின் இரண்டு நிகழ்வுகள் இருக்க முடியாது.

இரண்டு முறை பயன்படுத்தி ஒரே முனையில் ஒரு வகுப்பைச் சேர்க்க முயற்சித்தால் class { 'classname':} (வேறுபாடு இல்லை, வெவ்வேறு அல்லது ஒரே மாதிரியான அளவுருக்களுடன்), தொகுத்தல் பிழை இருக்கும். ஆனால் நீங்கள் ஒரு வகுப்பை வள பாணியில் பயன்படுத்தினால், உடனடியாக அதன் அனைத்து அளவுருக்களையும் வெளிப்படையாக மேனிஃபெஸ்ட்டில் அமைக்கலாம்.

இருப்பினும், நீங்கள் பயன்படுத்தினால் include, பின்னர் வகுப்பை எத்தனை முறை வேண்டுமானாலும் சேர்க்கலாம். உண்மை அதுதான் include கோப்பகத்தில் ஒரு வகுப்பு சேர்க்கப்பட்டுள்ளதா என்பதைச் சரிபார்க்கும் ஒரு idempotent செயல்பாடு ஆகும். வகுப்பானது கோப்பகத்தில் இல்லை என்றால், அது அதைச் சேர்க்கிறது, அது ஏற்கனவே இருந்தால், அது எதுவும் செய்யாது. ஆனால் பயன்படுத்தும் விஷயத்தில் include வகுப்பு அறிவிப்பின் போது வகுப்பு அளவுருக்களை அமைக்க முடியாது - தேவையான அனைத்து அளவுருக்களும் வெளிப்புற தரவு மூலத்தில் அமைக்கப்பட வேண்டும் - Hiera அல்லது ENC. அவற்றைப் பற்றி அடுத்த கட்டுரையில் பேசுவோம்.

வரையறுக்கிறது

முந்தைய பிளாக்கில் கூறியது போல், ஒரே வகுப்பை ஒரு முறைக்கு மேல் ஒரு முனையில் இருக்க முடியாது. இருப்பினும், சில சந்தர்ப்பங்களில், ஒரே முனையில் வெவ்வேறு அளவுருக்களுடன் ஒரே தொகுதி குறியீட்டைப் பயன்படுத்த முடியும். வேறு வார்த்தைகளில் கூறுவதானால், அதன் சொந்த வள வகை தேவை.

எடுத்துக்காட்டாக, PHP தொகுதியை நிறுவ, Avito இல் பின்வருவனவற்றைச் செய்கிறோம்:

  1. இந்த தொகுதியுடன் தொகுப்பை நிறுவவும்.
  2. இந்த தொகுதிக்கான உள்ளமைவு கோப்பை உருவாக்குவோம்.
  3. php-fpm க்கான கட்டமைப்பிற்கு ஒரு சிம்லிங்கை உருவாக்குகிறோம்.
  4. php cliக்கான கட்டமைப்பிற்கு ஒரு சிம்லிங்கை உருவாக்குகிறோம்.

அத்தகைய சந்தர்ப்பங்களில், போன்ற ஒரு வடிவமைப்பு வரையறு (வரையறு, வரையறுக்கப்பட்ட வகை, வரையறுக்கப்பட்ட வள வகை). ஒரு வரையறை என்பது ஒரு வகுப்பைப் போன்றது, ஆனால் வேறுபாடுகள் உள்ளன: முதலில், ஒவ்வொரு வரையறையும் ஒரு வள வகை, ஒரு ஆதாரம் அல்ல; இரண்டாவதாக, ஒவ்வொரு வரையறைக்கும் ஒரு மறைமுகமான அளவுரு உள்ளது $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' }
}

டூப்ளிகேட் டிக்ளரேஷன் பிழையைப் பிடிக்க எளிதான வழி Define இல் உள்ளது. ஒரு வரையறைக்கு நிலையான பெயருடன் வளம் இருந்தால், சில முனைகளில் இந்த வரையறையின் இரண்டு அல்லது அதற்கு மேற்பட்ட நிகழ்வுகள் இருந்தால் இது நடக்கும்.

இதிலிருந்து உங்களைப் பாதுகாத்துக் கொள்வது எளிது: வரையறைக்குள் உள்ள அனைத்து வளங்களும் பொறுத்து ஒரு பெயரைக் கொண்டிருக்க வேண்டும் $title. ஒரு மாற்று வளங்களைச் சேர்க்கிறது; எளிமையான வழக்கில், வரையறையின் அனைத்து நிகழ்வுகளுக்கும் பொதுவான வளங்களை ஒரு தனி வகுப்பிற்கு நகர்த்தி, இந்த வகுப்பை வரையறை - செயல்பாட்டில் சேர்த்தால் போதும். include முட்டாள்தனமான.

ஆதாரங்களைச் சேர்க்கும் போது, ​​செயல்பாடுகளைப் பயன்படுத்தும்போது, ​​இயலாமையை அடைவதற்கு வேறு வழிகள் உள்ளன defined и ensure_resources, ஆனால் அதை பற்றி அடுத்த அத்தியாயத்தில் சொல்கிறேன்.

வகுப்புகள் மற்றும் வரையறைகளுக்கான சார்புகள் மற்றும் அறிவிப்புகள்

வகுப்புகள் மற்றும் வரையறைகள் சார்புகள் மற்றும் அறிவிப்புகளைக் கையாள பின்வரும் விதிகளைச் சேர்க்கின்றன:

  • ஒரு வர்க்கம்/வரையறுப்பில் சார்ந்திருத்தல் வர்க்கத்தின் அனைத்து வளங்களிலும் சார்புகளை சேர்க்கிறது/வரையறுக்கிறது;
  • ஒரு வர்க்கம்/வரையறை சார்பு அனைத்து வர்க்கங்களுக்கும் சார்புகளை சேர்க்கிறது/வளங்களை வரையறுக்கிறது;
  • வகுப்பு/வரையறுத்தல் அறிவிப்பு வகுப்பின் அனைத்து ஆதாரங்களையும் அறிவிக்கிறது/வரையறுக்கிறது;
  • வர்க்கம்/வரையறுத்தல் சந்தா வகுப்பின் அனைத்து ஆதாரங்களுக்கும் சந்தா செலுத்துகிறது/வரையறுக்கிறது.

நிபந்தனை அறிக்கைகள் மற்றும் தேர்வாளர்கள்

ஆவணங்கள் இங்கே.

if

இது இங்கே எளிது:

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

வரை

தலைகீழாக இருந்தால் தவிர: வெளிப்பாடு தவறாக இருந்தால் குறியீட்டின் தொகுதி செயல்படுத்தப்படும்.

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

வழக்கு

இங்கேயும் சிக்கலான எதுவும் இல்லை. நீங்கள் வழக்கமான மதிப்புகள் (சரங்கள், எண்கள், முதலியன), வழக்கமான வெளிப்பாடுகள் மற்றும் தரவு வகைகளை மதிப்புகளாகப் பயன்படுத்தலாம்.

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

தேர்வாளர்கள்

தேர்வாளர் என்பது ஒரு மொழி கட்டமைப்பாகும் case, ஆனால் குறியீட்டின் தொகுதியை இயக்குவதற்குப் பதிலாக, அது ஒரு மதிப்பை வழங்குகிறது.

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

தொகுதிகள்

உள்ளமைவு சிறியதாக இருக்கும்போது, ​​அதை எளிதாக ஒரு மேனிஃபெஸ்டில் வைத்திருக்க முடியும். ஆனால் நாம் விவரிக்கும் அதிகமான உள்ளமைவுகள், மேனிஃபெஸ்ட்டில் அதிக வகுப்புகள் மற்றும் முனைகள் உள்ளன, அது வளர்கிறது, மேலும் அது வேலை செய்ய சிரமமாகிறது.

கூடுதலாக, குறியீட்டை மீண்டும் பயன்படுத்துவதில் சிக்கல் உள்ளது - எல்லா குறியீடுகளும் ஒரே மேனிஃபெஸ்டில் இருக்கும்போது, ​​இந்தக் குறியீட்டை மற்றவர்களுடன் பகிர்வது கடினம். இந்த இரண்டு சிக்கல்களைத் தீர்க்க, பப்பட் தொகுதிகள் எனப்படும் ஒரு நிறுவனத்தைக் கொண்டுள்ளது.

தொகுதிகள் - இவை வகுப்புகள், வரையறைகள் மற்றும் பிற பப்பட் நிறுவனங்களின் தொகுப்புகள் தனி அடைவில் வைக்கப்பட்டுள்ளன. வேறு வார்த்தைகளில் கூறுவதானால், ஒரு தொகுதி என்பது பொம்மை தர்க்கத்தின் ஒரு சுயாதீனமான பகுதி. எடுத்துக்காட்டாக, nginx உடன் பணிபுரிய ஒரு தொகுதி இருக்கலாம், மேலும் அதில் nginx உடன் பணிபுரிய தேவையானவற்றை மட்டுமே கொண்டிருக்கும் அல்லது PHP உடன் பணிபுரிய ஒரு தொகுதி இருக்கலாம், மற்றும் பல.

தொகுதிகள் பதிப்பு செய்யப்படுகின்றன, மேலும் ஒன்றுக்கொன்று தொகுதிகளின் சார்புகளும் ஆதரிக்கப்படுகின்றன. தொகுதிகளின் திறந்த களஞ்சியம் உள்ளது - பொம்மை ஃபோர்ஜ்.

பப்பட் சர்வரில், ரூட் டைரக்டரியின் தொகுதிகள் துணை அடைவில் தொகுதிகள் அமைந்துள்ளன. ஒவ்வொரு தொகுதியின் உள்ளேயும் ஒரு நிலையான அடைவு திட்டம் உள்ளது - மேனிஃபெஸ்டுகள், கோப்புகள், டெம்ப்ளேட்கள், லிப் மற்றும் பல.

ஒரு தொகுதியில் கோப்பு அமைப்பு

தொகுதியின் மூலமானது விளக்கமான பெயர்களுடன் பின்வரும் கோப்பகங்களைக் கொண்டிருக்கலாம்:

  • manifests - இது அறிக்கைகளைக் கொண்டுள்ளது
  • files - இது கோப்புகளைக் கொண்டுள்ளது
  • templates - இது வார்ப்புருக்களைக் கொண்டுள்ளது
  • lib - அதில் ரூபி குறியீடு உள்ளது

இது கோப்பகங்கள் மற்றும் கோப்புகளின் முழுமையான பட்டியல் அல்ல, ஆனால் இப்போதைக்கு இந்த கட்டுரைக்கு இது போதுமானது.

தொகுதியில் உள்ள ஆதாரங்களின் பெயர்கள் மற்றும் கோப்புகளின் பெயர்கள்

ஆவணங்கள் இங்கே.

ஒரு தொகுதியில் உள்ள வளங்களை (வகுப்புகள், வரையறைகள்) நீங்கள் விரும்பியபடி பெயரிட முடியாது. கூடுதலாக, ஒரு ஆதாரத்தின் பெயருக்கும் பப்பட் அந்த வளத்தின் விளக்கத்தைத் தேடும் கோப்பின் பெயருக்கும் இடையே நேரடி தொடர்பு உள்ளது. நீங்கள் பெயரிடும் விதிகளை மீறினால், பப்பட் வெறுமனே ஆதார விளக்கத்தைக் கண்டுபிடிக்காது, மேலும் நீங்கள் தொகுத்தல் பிழையைப் பெறுவீர்கள்.

விதிகள் எளிமையானவை:

  • ஒரு தொகுதியில் உள்ள அனைத்து ஆதாரங்களும் தொகுதி பெயர்வெளியில் இருக்க வேண்டும். தொகுதி என்று அழைக்கப்பட்டால் 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 இல் உள்ள வெளிப்பாடுகள் ரூபியில் எழுதப்பட்டுள்ளன (ERB என்பது உண்மையில் உட்பொதிக்கப்பட்ட ரூபி).

மேனிஃபெஸ்டில் இருந்து மாறிகளை அணுக, நீங்கள் சேர்க்க வேண்டும் @ மாறி பெயருக்கு. கட்டுப்பாட்டு கட்டமைப்பிற்குப் பிறகு தோன்றும் வரி முறிவை அகற்ற, நீங்கள் மூடும் குறிச்சொல்லைப் பயன்படுத்த வேண்டும் -%>.

டெம்ப்ளேட்டைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டு

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

உண்மைகள் மற்றும் உள்ளமைக்கப்பட்ட மாறிகள்

பெரும்பாலும் உள்ளமைவின் குறிப்பிட்ட பகுதி தற்போது முனையில் என்ன நடக்கிறது என்பதைப் பொறுத்தது. எடுத்துக்காட்டாக, டெபியன் வெளியீடு என்ன என்பதைப் பொறுத்து, நீங்கள் தொகுப்பின் ஒன்று அல்லது மற்றொரு பதிப்பை நிறுவ வேண்டும். இதையெல்லாம் நீங்கள் கைமுறையாக கண்காணிக்கலாம், முனைகள் மாறினால் மீண்டும் எழுதுவது வெளிப்படும். ஆனால் இது ஒரு தீவிரமான அணுகுமுறை அல்ல; ஆட்டோமேஷன் மிகவும் சிறந்தது.

முனைகளைப் பற்றிய தகவல்களைப் பெற, பப்பட் உண்மைகள் எனப்படும் ஒரு பொறிமுறையைக் கொண்டுள்ளது. உண்மைகளை - இது கணு பற்றிய தகவல், உலகளாவிய பெயர்வெளியில் சாதாரண மாறிகள் வடிவில் வெளிப்படும். எடுத்துக்காட்டாக, ஹோஸ்ட் பெயர், இயக்க முறைமை பதிப்பு, செயலி கட்டமைப்பு, பயனர்களின் பட்டியல், பிணைய இடைமுகங்களின் பட்டியல் மற்றும் அவற்றின் முகவரிகள் மற்றும் பல. உண்மைகள் மானிஃபெஸ்டுகள் மற்றும் டெம்ப்ளேட்களில் வழக்கமான மாறிகளாகக் கிடைக்கும்.

உண்மைகளுடன் வேலை செய்வதற்கான எடுத்துக்காட்டு:

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

முறையாகச் சொன்னால், ஒரு உண்மைக்கு ஒரு பெயர் (சரம்) மற்றும் ஒரு மதிப்பு (பல்வேறு வகைகள் உள்ளன: சரங்கள், வரிசைகள், அகராதிகள்). சாப்பிடு உள்ளமைக்கப்பட்ட உண்மைகளின் தொகுப்பு. நீங்களும் சொந்தமாக எழுதலாம். உண்மை சேகரிப்பாளர்கள் விவரிக்கப்படுகிறார்கள் ரூபியில் செயல்பாடுகளைப் போன்றது, அல்லது இரண்டும் இயங்கக்கூடிய கோப்புகள். உண்மைகள் படிவத்திலும் வழங்கப்படலாம் தரவுகளுடன் உரை கோப்புகள் முனைகளில்.

செயல்பாட்டின் போது, ​​கைப்பாவை முகவர் முதலில் கிடைக்கக்கூடிய அனைத்து உண்மை சேகரிப்பாளர்களையும் pappetserver இலிருந்து முனைக்கு நகலெடுக்கிறார், அதன் பிறகு அது அவற்றைத் துவக்கி, சேகரிக்கப்பட்ட உண்மைகளை சேவையகத்திற்கு அனுப்புகிறது; இதற்குப் பிறகு, சர்வர் பட்டியலைத் தொகுக்கத் தொடங்குகிறது.

இயங்கக்கூடிய கோப்புகளின் வடிவத்தில் உள்ள உண்மைகள்

அத்தகைய உண்மைகள் கோப்பகத்தில் தொகுதிகளில் வைக்கப்பட்டுள்ளன 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).

ஆவணத்தின் தொடர்புடைய பகுதி இங்கே.

உள்ளமைக்கப்பட்ட மாறிகள்

உண்மைகள் தவிர, மேலும் உள்ளது சில மாறிகள், உலகளாவிய பெயர்வெளியில் கிடைக்கும்.

  • நம்பகமான உண்மைகள் — வாடிக்கையாளரின் சான்றிதழிலிருந்து எடுக்கப்பட்ட மாறிகள் (சான்றிதழ் பொதுவாக பாப்பட் சேவையகத்தில் வழங்கப்படுவதால், முகவர் அதன் சான்றிதழை எடுத்து மாற்ற முடியாது, எனவே மாறிகள் "நம்பிக்கைக்குரியவை"): சான்றிதழின் பெயர், அதன் பெயர் ஹோஸ்ட் மற்றும் டொமைன், சான்றிதழிலிருந்து நீட்டிப்புகள்.
  • சேவையக உண்மைகள் —சர்வர் பற்றிய தகவல் தொடர்பான மாறிகள்—பதிப்பு, பெயர், சர்வர் ஐபி முகவரி, சூழல்.
  • முகவர் உண்மைகள் — சான்றிதழின் பெயர், முகவர் பதிப்பு, பொம்மலாட்ட பதிப்பு, காரணியால் அல்ல, நேரடியாக பொம்மை-ஏஜெண்டால் சேர்க்கப்படும் மாறிகள்.
  • முதன்மை மாறிகள் - Pappetmaster மாறிகள் (sic!). உள்ளதைப் போலவே உள்ளது சேவையக உண்மைகள், பிளஸ் கட்டமைப்பு அளவுரு மதிப்புகள் உள்ளன.
  • கம்பைலர் மாறிகள் — ஒவ்வொரு ஸ்கோப்பிலும் வேறுபடும் கம்பைலர் மாறிகள்: தற்போதைய தொகுதியின் பெயர் மற்றும் தற்போதைய பொருள் அணுகப்பட்ட தொகுதியின் பெயர். உதாரணமாக, உங்கள் தனிப்பட்ட வகுப்புகள் மற்ற தொகுதிகளில் இருந்து நேரடியாகப் பயன்படுத்தப்படவில்லை என்பதைச் சரிபார்க்க அவற்றைப் பயன்படுத்தலாம்.

கூட்டல் 1: இதை எப்படி இயக்குவது மற்றும் பிழை நீக்குவது?

கட்டுரையில் பொம்மைக் குறியீட்டின் பல எடுத்துக்காட்டுகள் உள்ளன, ஆனால் இந்தக் குறியீட்டை எவ்வாறு இயக்குவது என்பதை எங்களிடம் கூறவில்லை. சரி, நான் என்னைத் திருத்திக் கொள்கிறேன்.

பப்பட்டை இயக்க ஒரு ஏஜென்ட் போதுமானது, ஆனால் பெரும்பாலான சந்தர்ப்பங்களில் உங்களுக்கு ஒரு சேவையகமும் தேவைப்படும்.

முகவர்

குறைந்தபட்சம் பதிப்பு XNUMX முதல், பொம்மலாட்ட முகவர் தொகுப்புகள் அதிகாரப்பூர்வ பப்பட்லேப்ஸ் களஞ்சியம் அனைத்து சார்புகளையும் கொண்டுள்ளது (ரூபி மற்றும் தொடர்புடைய கற்கள்), எனவே நிறுவல் சிரமங்கள் இல்லை (நான் டெபியன் அடிப்படையிலான விநியோகங்களைப் பற்றி பேசுகிறேன் - நாங்கள் 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.

Сервер

இந்த கட்டுரையில் பாப்பெட்சர்வரின் முழு அமைப்பையும் அதற்கான குறியீட்டை வரிசைப்படுத்துவதையும் நான் கருத்தில் கொள்ள மாட்டேன்; சிறிய எண்ணிக்கையில் வேலை செய்ய கூடுதல் உள்ளமைவு தேவையில்லாத சேவையகத்தின் முழு செயல்பாட்டு பதிப்பு பெட்டிக்கு வெளியே உள்ளது என்று மட்டுமே கூறுவேன். முனைகள் (சொல்லுங்கள், நூறு வரை). அதிக எண்ணிக்கையிலான முனைகளுக்கு ட்யூனிங் தேவைப்படும் - முன்னிருப்பாக, பொம்மலாட்ட சேவையகம் நான்கு தொழிலாளர்களுக்கு மேல் இல்லை, அதிக செயல்திறனுக்காக நீங்கள் அவர்களின் எண்ணிக்கையை அதிகரிக்க வேண்டும் மற்றும் நினைவக வரம்புகளை அதிகரிக்க மறக்காதீர்கள், இல்லையெனில் சர்வர் பெரும்பாலான நேரத்தை குப்பை சேகரிக்கும்.

குறியீடு வரிசைப்படுத்தல் - உங்களுக்கு விரைவாகவும் எளிதாகவும் தேவைப்பட்டால், பார்க்கவும் (r10k இல்)[https://github.com/puppetlabs/r10k], சிறிய நிறுவல்களுக்கு இது போதுமானதாக இருக்க வேண்டும்.

இணைப்பு 2: குறியீட்டு வழிகாட்டுதல்கள்

  1. அனைத்து தர்க்கங்களையும் வகுப்புகள் மற்றும் வரையறைகளில் வைக்கவும்.
  2. வகுப்புகள் மற்றும் வரையறைகளை தொகுதிகளில் வைத்திருங்கள், முனைகளை விவரிக்கும் மேனிஃபெஸ்ட்களில் அல்ல.
  3. உண்மைகளைப் பயன்படுத்தவும்.
  4. ஹோஸ்ட் பெயர்களின் அடிப்படையில் ifs ஐ உருவாக்க வேண்டாம்.
  5. வகுப்புகள் மற்றும் வரையறைகளுக்கான அளவுருக்களைச் சேர்க்க தயங்க - இது வகுப்பின்/வரையறையின் உடலில் மறைந்திருக்கும் மறைமுக தர்க்கத்தை விட சிறந்தது.

இதை ஏன் செய்ய பரிந்துரைக்கிறேன் என்பதை அடுத்த கட்டுரையில் விளக்குகிறேன்.

முடிவுக்கு

அறிமுகத்துடன் முடிப்போம். அடுத்த கட்டுரையில் நான் உங்களுக்கு Hiera, ENC மற்றும் PuppetDB பற்றி கூறுவேன்.

பதிவு செய்த பயனர்கள் மட்டுமே கணக்கெடுப்பில் பங்கேற்க முடியும். உள்நுழையவும், தயவு செய்து.

உண்மையில், இன்னும் நிறைய விஷயங்கள் உள்ளன - பின்வரும் தலைப்புகளில் நான் கட்டுரைகளை எழுத முடியும், நீங்கள் எதைப் படிக்க விரும்புகிறீர்கள் என்பதில் வாக்களியுங்கள்:

  • 59,1%மேம்பட்ட கைப்பாவை கட்டுமானங்கள் - சில அடுத்த நிலை ஷிட்: லூப்கள், மேப்பிங் மற்றும் பிற லாம்ப்டா வெளிப்பாடுகள், வள சேகரிப்பாளர்கள், ஏற்றுமதி செய்யப்பட்ட வளங்கள் மற்றும் பப்பட், குறிச்சொற்கள், வழங்குநர்கள், சுருக்க தரவு வகைகள் வழியாக இடை-ஹோஸ்ட் தொடர்பு.13
  • 31,8%"நான் எனது தாயின் நிர்வாகி" அல்லது அவிடோவில் பல்வேறு பதிப்புகளின் பல பாப்பேட் சேவையகங்களுடன் நாங்கள் எப்படி நண்பர்களை உருவாக்கினோம், கொள்கையளவில், பாப்பட் சேவையகத்தை நிர்வகிப்பது பற்றிய பகுதி.7
  • 81,8%பொம்மைக் குறியீட்டை எவ்வாறு எழுதுகிறோம்: கருவி, ஆவணப்படுத்தல், சோதனை, CI/CD.18

22 பயனர்கள் வாக்களித்தனர். 9 பயனர்கள் வாக்களிக்கவில்லை.

ஆதாரம்: www.habr.com