Пишем первый код (“Hello World”) 📝
Давай прикажем Паппету создать файл. Не вручную, а через код.
- Перейди в папку с “манифестами” (это инструкции для Puppet):
cd /etc/puppetlabs/code/environments/production/manifests- Создай главный файл
site.pp:
sudo nano site.pp- Вставь туда этот код (это язык Puppet DSL):
file { '/tmp/hello_vitaliy.txt':
ensure => present,
content => "Привет! Это мой первый файл, созданный через Puppet.\n",
mode => '0644',
}(Мы говорим: “Я хочу, чтобы файл /tmp/hello_vitaliy.txt существовал, с таким-то текстом”).
-
Сохрани (
Ctrl+O,Enter,Ctrl+X). -
Примени магию: Запусти агента:
sudo puppet agent -tЕсли ты увидишь Notice: /Stage[main]/Main/File[/tmp/hello_vitaliy.txt]/ensure: created, значит Puppet сам создал файл!
Можешь проверить: cat /tmp/hello_vitaliy.txt.
Пробуем применять на клиенте
1. Иди на Linux-сервер: Открой главный файл манифеста:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp2. Добавь туда этот код: (Сотри старое, если есть, или добавь в конец).
node 'srv-dc01.vbo.local' {
file { 'c:/hello_from_linux.txt':
ensure => present,
content => "Привет, Windows! Я управляю тобой из Linux.\n",
}
}Важно: Имя srv-dc01.vbo.local. Оно должно точно совпадать с именем клиента.
3. Сохрани файл (Ctrl+O, Enter, Ctrl+X).
4. Иди на клиента и примени: В PowerShell снова введи:
puppet agent -tЕсли увидишь File[c:/hello_from_linux.txt]/ensure: created, беги проверять диск C:\. Там должен появиться файл! 📄
Создаем пользователя👤
Создавать текстовые файлы — это для тренировки. Админы используют Puppet, чтобы управлять пользователями, устанавливать программы и запускать службы. Давай прикажем Паппету создать нового пользователя на твоем клиенте и дать ему права.
1. На Linux-сервере: Снова открой site.pp:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp2. Измени код: Можешь удалить старый блок file или просто добавить новый ниже. Впиши это (обрати внимание на пароль — Windows требует, чтобы он был сложным!):
node 'srv-dc01.vbo.local' {
user { 'pup_admin':
ensure => present,
password => 'SuperSecretPass123!',
groups => ['Administrators'],
comment => 'Админ, созданный через Puppet',
managehome => true,
}
}(Этот код говорит: “Хочу пользователя pup_admin с таким-то паролем, и чтобы он был в группе Администраторы”).
3. Сохрани (Ctrl+O, Enter, Ctrl+X).
4. На Windows Server: Запускай команду применения:
puppet agent -tУстановка софта (Делаем из Windows веб-сервер) 🌐
Создавать пользователей скучно. Давай установим настоящий сервис. Мы превратим твой Windows Server 2022 в веб-сервер (IIS), чтобы он мог показывать сайты. В Puppet для этого есть готовые “модули” (как плагины). Но чтобы не усложнять сейчас установкой модулей, мы сделаем это через команду PowerShell, обернутую в Puppet.
1. Чтобы Puppet научился работать с PowerShell, нужно скачать официальное расширение. Выполни на Linux-сервере:
sudo /opt/puppetlabs/bin/puppet module install puppetlabs-powershell
2. На Linux-сервере: Открой файл site.pp:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp3. Добавь задачу установки IIS: Вставь этот блок внутрь node 'srv-dc01.vbo.local' { ... }. Внимание: Не удаляй старое, просто добавь это ниже создания пользователя, но до закрывающей скобки }.
# Задача 3: Превращаем сервер в Веб-сервер (IIS)
exec { 'Install-IIS':
command => 'Install-WindowsFeature -Name Web-Server -IncludeManagementTools',
provider => powershell,
# Эта магия проверяет: "Если IIS уже стоит, то ничего не делать"
onlyif => 'if ((Get-WindowsFeature -Name Web-Server).InstallState -eq "Installed") { exit 1 } else { exit 0 }',
logoutput => true,
}4. Сохрани и выходи.
5. На Windows: Запускай:
puppet agent -tПодмена сайта 🎩🐇
Стандартная синяя картинка — это скучно. Давай докажем, что мы владеем этим сервером полностью. Мы заменим главную страницу сайта на свою собственную, не заходя на Windows.
1. На Linux-сервере: Открой site.pp:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp2. Добавь новый код: Внутрь блока node 'srv-dc01.vbo.local', ниже установки IIS, добавь вот эти строки:
# Задача 4: Удаляем стандартную заставку IIS
file { 'c:/inetpub/wwwroot/iisstart.htm':
ensure => absent,
}
# Задача 5: Создаем свой сайт
file { 'c:/inetpub/wwwroot/index.html':
ensure => present,
content => "<html>
<body style='background-color: black; color: green; font-family: monospace;'>
<h1>MISSION ACCOMPLISHED</h1>
<p>Этот сайт захвачен и управляется через Puppet!</p>
<p>Vitaliy + Gemi = Dream Team 🚀</p>
</body>
</html>",
}3. Сохрани (Ctrl+O, Enter, Ctrl+X).
4. На Windows: Примени изменения:
puppet agent -tПрофессиональный стиль. ISS. (Modules) 🏗️
Мы установили IIS “грязным” способом — через команду PowerShell (exec). Это работает, но это не Puppet Way.
Шаг 1. Скачиваем “Драйвер” для IIS (На сервере Linux) 🧩
Нам нужен официальный модуль от PuppetLabs, который учит сервер управлять IIS. Введи на Linux:
sudo /opt/puppetlabs/bin/puppet module install puppetlabs-iis
sudo /opt/puppetlabs/bin/puppet module install puppetlabs-pwshlibТы должен увидеть: Notice: Installing -- do not interrupt ... И в конце: └─ puppetlabs-iis (v...).
Шаг 2. Переписываем код 📝
Теперь самое интересное. Мы удалим страшный кусок с PowerShell и заменим его на элегантный ресурс iis_feature. Заодно, как мы и договаривались, исправим опечатку в слове created.
- Открой файл:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp- Полностью замени содержимое блока
nodeна этот код:
node 'srv-dc01.vbo.local' {
# --- Блок 1: Пользователь (Оставляем как было) ---
user { 'pup_admin':
ensure => present,
password => 'SuperSecretPass123!',
groups => ['Administrators'],
managehome => true,
}
# --- Блок 2: IIS (ПРОФЕССИОНАЛЬНЫЙ СТИЛЬ) ---
# Вместо exec мы используем родной ресурс модуля
iis_feature { 'Web-Server':
ensure => present,
include_management_tools => true,
}
# --- Блок 3: Сайт (С ИСПРАВЛЕНИЕМ ОПЕЧАТКИ) ---
# Удаляем старую заглушку
file { 'c:/inetpub/wwwroot/iisstart.htm':
ensure => absent,
}
# Наш сайт (исправил creted -> created)
file { 'c:/inetpub/wwwroot/index.html':
ensure => present,
content => "<html>
<body style='background-color: black; color: green; font-family: monospace;'>
<h1>MISSION ACCOMPLISHED</h1>
<p>This site was created with Gemini and Puppet!</p>
<p>Vitaliy + Gemi = Dream Team 🚀</p>
</body>
</html>",
}
}- Сохрани (
Ctrl+O,Enter,Ctrl+X).
Шаг 3. Проверка на Windows 🧪
Сейчас произойдет важная вещь. IIS у тебя уже установлен.
- Если бы это был глупый скрипт, он бы попытался установить его снова и выдал ошибку.
- Умный модуль проверит: “Ага, Web-Server уже стоит. Инструменты управления тоже. Значит, я ничего не делаю”. Запускай на Windows:
puppet agent -tВторой сайт на порту 8080 🏗️
Мы используем ресурсы iis_site и iis_application_pool. Это то, ради чего мы ставили модуль.
1. Выполняй на Linux-сервере:
sudo /opt/puppetlabs/bin/puppetserver gem install ruby-pwsh
sudo systemctl restart puppetserver2. На Linux-сервере: Открой site.pp:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp3. Добавь этот код ВНУТРЬ блока node: (Можешь добавить это в самый низ, перед закрывающей фигурной скобкой }).
# --- Блок 4: Новый сайт "Secret Project" на порту 8080 ---
# 1. Создаем папку для нового сайта
file { 'c:/inetpub/secret_site':
ensure => directory,
}
# 2. Кладем туда файл
file { 'c:/inetpub/secret_site/index.html':
ensure => present,
content => "<h1>SECRET AREA 51</h1><p>Доступ только для Виталия и Gemi.</p>",
}
# 3. Создаем Application Pool (для изоляции процессов - это Best Practice)
iis_application_pool { 'SecretPool':
ensure => present,
state => 'started',
}
# 4. Создаем сам Сайт и вешаем его на порт 8080
iis_site { 'SecretSite':
ensure => started,
physicalpath => 'c:\\inetpub\\secret_site',
applicationpool => 'SecretPool',
bindings => [
{
'protocol' => 'http',
'bindinginformation' => '*:8080:',
}
],
require => File['c:/inetpub/secret_site'], # Сначала папка, потом сайт!
}
# 5. Открываем порт в Брандмауэре (иначе не зайти снаружи)
exec { 'Open-Port-8080':
command => 'New-NetFirewallRule -DisplayName "Puppet-8080" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow',
provider => powershell,
onlyif => 'if (Get-NetFirewallRule -DisplayName "Puppet-8080" -ErrorAction SilentlyContinue) { exit 1 } else { exit 0 }',
}4. Сохрани и выходи.
5. На Windows: Запускай агента:
puppet agent -t