Slide 1

Slide 1 text

Современные подходы в разработке инфраструктурного кода на Puppet Игорь Курочкин Экспресс 42

Slide 2

Slide 2 text

Опрос Надежные решения для сложной инфраструктуры 2 • Какую версию Puppet используете? • Кто планирует обновляться? • Кто использует community модули? • У кого есть тесты? • У кого больше 2-х репозиториев? • И больше 2-х человек коммитят?

Slide 3

Slide 3 text

О себе 3 • Scalaxy, Qik, Skype, MS, Express 42 • Инфраструктура как код: • Chef, Puppet, Ansible, Salt • Terraform, CloudFormation

Slide 4

Slide 4 text

План 4 • Теория: • Инфраструктура как код • Puppet • Work fl ow • Практика и ДЗ

Slide 5

Slide 5 text

Практика, ДЗ и слайды • https://github.com/express42/mc-puppet Надежные решения для сложной инфраструктуры 5

Slide 6

Slide 6 text

Теория

Slide 7

Slide 7 text

Инфраструктура как код 7 • Ускорение процесса поставки • Снижение количества ошибок • Взаимодействие команд

Slide 8

Slide 8 text

Инструменты 8

Slide 9

Slide 9 text

Надежные решения для сложной инфраструктуры 9

Slide 10

Slide 10 text

Puppet Надежные решения для сложной инфраструктуры 10 • С 2005 года, текущая версия 6 • Puppet Platform: • Server, Agent, PuppetDB • Puppet Open Source: • PDK, Bolt, Beaker, Razor, Container Registry, Puppet DB, Facter • Puppet Enterprise: • Delivery, Pipelines, CodeManager

Slide 11

Slide 11 text

Puppet 6 Надежные решения для сложной инфраструктуры 11 • Вышел 18 сентября 2018 • Добавили: • Pupperware • New resource API, new type Deffered • Убрали: • MCollective, puppet module generate/build

Slide 12

Slide 12 text

Практики из разработки 12 • Среда разработки и структура репозиториев • Политики версионирования и разбиение на модули • Управление артефактами и внешние зависимости • Тестирование и ревью изменений • CI/CD для инфраструктурного кода

Slide 13

Slide 13 text

Проблемы с разработкой Надежные решения для сложной инфраструктуры 13 • Старые и разные версии инструментов • Один репозиторий • Монолитные модули и одна версия • Только свои модули или старый форки • Нет тестирования и ручная выкатка

Slide 14

Slide 14 text

Варианты решений Надежные решения для сложной инфраструктуры 14 • Документация, best practices, инструкции и регламенты • Bootstrap скрипты и свои инструменты • Git Hooks • Packages (gem, deb, rpm, …) • Docker • Development Kit

Slide 15

Slide 15 text

Варианты решений Надежные решения для сложной инфраструктуры 15 • Документация, best practices, инструкции и регламенты • Bootstrap скрипты и свои инструменты • Git Hooks • Packages (gem, deb, rpm, …) • Docker • Development Kit

Slide 16

Slide 16 text

Development Kit • Локальная разработка и тестирование • Одно окружение для Linux, OS X, Windows • Набор CLI инструментов и библиотек • Work fl ows и best practices • Интеграция в CI Надежные решения для сложной инфраструктуры 16

Slide 17

Slide 17 text

Chef DK Надежные решения для сложной инфраструктуры 17

Slide 18

Slide 18 text

Puppet DK Надежные решения для сложной инфраструктуры 18

Slide 19

Slide 19 text

Цели Надежные решения для сложной инфраструктуры 19 • Обучение Community и повышение качества публичных модулей • Общие подходы по созданию и тестированию Puppet кода • Единый CLI и официальное окружение разработки

Slide 20

Slide 20 text

Puppet Development Kit Надежные решения для сложной инфраструктуры 20 • Первый коммит - январь 2017 • Сейчас: • 1000+ коммитов • 24 релиза • Текущая версия 1.7.0

Slide 21

Slide 21 text

Что внутри PDK Надежные решения для сложной инфраструктуры 21 • Ruby (несколько версий) • Git • Puppet (facter, hiera, puppet, …) • 4 (4.7.x-4.10.x) • 5 (5.0.x-5.5.x) • 6*

Slide 22

Slide 22 text

PDK и Puppet 6 Надежные решения для сложной инфраструктуры 22 • Будет в релизе 1.7.1 • Релиз должен был быть 19 сентября • Workaround: • --puppet-dev • --puppet-version

Slide 23

Slide 23 text

Что еще в PDK Надежные решения для сложной инфраструктуры 23 • Утилита pdk • Шаблоны для модулей, классов, провайдеров, задач, … • Ссылки на инструменты: • Линтеры • Фреймворки для тестирования • Дополнительные утилиты • Rake обертки вокруг инструментов

Slide 24

Slide 24 text

Work fl ow

Slide 25

Slide 25 text

Work fl ow Надежные решения для сложной инфраструктуры 25

Slide 26

Slide 26 text

Установка PDK Надежные решения для сложной инфраструктуры 26 • Пакет для Linux, OS X, Windows • RPM, DEB, MSI • Есть в Homebrew • Модуль для Powershell и VScode плагин

Slide 27

Slide 27 text

Создание модуля • pdk new module • pdk new class • pdk new de fi ned_type • pdk new task • pdk new provider Надежные решения для сложной инфраструктуры 27

Slide 28

Slide 28 text

pdk new module • Имя модуля • Опции: • --full-interview • --skip-interview • --template-url= Надежные решения для сложной инфраструктуры 28

Slide 29

Slide 29 text

Имя модуля • <АВТОР>-<ИМЯ_МОДУЛЯ> • express42_puppet_module • express42-puppet-module • express42-puppet_module Надежные решения для сложной инфраструктуры 29

Slide 30

Slide 30 text

Имя модуля • <АВТОР>-<ИМЯ_МОДУЛЯ> • express42_puppet_module • express42-puppet-module • express42-puppet_module Надежные решения для сложной инфраструктуры 30

Slide 31

Slide 31 text

Имя модуля • <АВТОР>-<ИМЯ_МОДУЛЯ> • express42_puppet_module • express42-puppet-module • express42-puppet_module Надежные решения для сложной инфраструктуры 31

Slide 32

Slide 32 text

Версия • Semantic Versioning 2.0.0 https://semver.org • Tom Preston-Werner (GitHub) • X.X.X: • MAJOR - несовместимые изменения • MINOR - новый функционал • PATCH - исправления Надежные решения для сложной инфраструктуры 32

Slide 33

Slide 33 text

Интервью • Варианты: • 9 вопросов (--full-interview) • 4 вопроса (default) • 0 вопросов (--skip-interview) • ~/.pdk/cache/answers.json Надежные решения для сложной инфраструктуры 33

Slide 34

Slide 34 text

Шаблоны Надежные решения для сложной инфраструктуры 34 • --template-url=https://github.com/puppetlabs/pdk- templates • con fi g_defaults.yml (общий конфиг) • moduleroot, moduleroot_init (erb шаблоны конфигов) • object_templates (шаблоны для pdk new …)

Slide 35

Slide 35 text

.sync.yml • Делаем fork от pdk-templates или • Вносим изменения в .sync.yml в репозитории модуля • Пример: • appveyor.yml: • delete: true Надежные решения для сложной инфраструктуры 35

Slide 36

Slide 36 text

Структура модуля • /examples • / fi les • /manifests • /spec • /task • /templates Надежные решения для сложной инфраструктуры 36

Slide 37

Slide 37 text

Структура модуля • metadata.json • README.md • CHANGELOG.md • Gem fi le • Rake fi le Надежные решения для сложной инфраструктуры 37

Slide 38

Slide 38 text

Структура модуля • . fi xtures.yml • .gitattributes • .gitignore • .gitlab-ci.yml • .pdkignore • .rspec • .rubocop.yml • .travis.yml • .yardopts • appveyor.yml Надежные решения для сложной инфраструктуры 38

Slide 39

Slide 39 text

Gem fi le Надежные решения для сложной инфраструктуры 39 • group :development • gem puppet-module-posix-dev-rX.X • metadata-json-lint • puppet-lint, puppet-syntax • rubocop • puppet-blacksmith • puppet-strings, …

Slide 40

Slide 40 text

pdk bundle exec Надежные решения для сложной инфраструктуры 40 • pdk bundle exec puppet • pdk bundle exec ruby • pdk bundle exec rubocop • pdk bundle exec rake

Slide 41

Slide 41 text

pdk bundle exec rake Надежные решения для сложной инфраструктуры 41

Slide 42

Slide 42 text

pdk update • Когда вышла новая версия PDK • Когда обновились шаблоны • Когда обновилась конфигурация в .sync.yml • Есть --noop и --force опции • Отчет в update_report.txt Надежные решения для сложной инфраструктуры 42

Slide 43

Slide 43 text

metadata.json "pdk-version": "1.7.0" "template-url": " fi le:///opt/puppetlabs/pdk/share/cache/ pdk-templates.git", “template-ref": “1.7.0-0-g57412ed" Надежные решения для сложной инфраструктуры 43

Slide 44

Slide 44 text

pdk convert • Конвертация старых модулей • Есть --noop и --force опции • Diff в convert_report.txt Надежные решения для сложной инфраструктуры 44

Slide 45

Slide 45 text

pdk new task • Bolt + Puppet tasks • Ad-Hoc: • Запустить puppet run • Обновить пакеты • Перезапустить сервис Надежные решения для сложной инфраструктуры 45

Slide 46

Slide 46 text

Work fl ow Надежные решения для сложной инфраструктуры 46

Slide 47

Slide 47 text

pdk validate • pdk validate --list • pdk (INFO): Available validators: metadata, puppet, ruby • pdk validate -a • pdk validate --puppet-dev • pdk validate --puppet-version Надежные решения для сложной инфраструктуры 47

Slide 48

Slide 48 text

pdk validate Надежные решения для сложной инфраструктуры 48

Slide 49

Slide 49 text

pdk validate • Metadata: • Metadata-json-lint • Puppet: • Puppet Style Guide, puppet-lint, puppet-syntax • Ruby: • Rubocop, .rubocop.yml Надежные решения для сложной инфраструктуры 49

Slide 50

Slide 50 text

pdk test unit • Rspec-puppet • https://github.com/rodjek/rspec-puppet • Rspec-puppet-facts • Puppetlabs-spec-helper Надежные решения для сложной инфраструктуры 50

Slide 51

Slide 51 text

pdk test unit Надежные решения для сложной инфраструктуры 51

Slide 52

Slide 52 text

pdk test unit Надежные решения для сложной инфраструктуры 52

Slide 53

Slide 53 text

pdk test unit Надежные решения для сложной инфраструктуры 53

Slide 54

Slide 54 text

Work fl ow Надежные решения для сложной инфраструктуры 54

Slide 55

Slide 55 text

Итого Надежные решения для сложной инфраструктуры 55

Slide 56

Slide 56 text

Roadmap Надежные решения для сложной инфраструктуры 56 • Публикация модулей в Forge • Конфигурация для PDK и утилит • Валидация EPP, ERB и YAML • Валидация и тестирования Control репозиториев (r10k) • Интеграция Puppet-strings • Diff изменений

Slide 57

Slide 57 text

Roadmap Надежные решения для сложной инфраструктуры 57 • pdk new function • pdk new fact • pdk new control • pdk new dependency • pdk update metadata

Slide 58

Slide 58 text

Roadmap Надежные решения для сложной инфраструктуры 58 • https://github.com/puppetlabs/pdk-planning • https://github.com/puppetlabs/pdk-planning/blob/ master/ROADMAP.md • https://tickets.puppetlabs.com/projects/PDK/summary

Slide 59

Slide 59 text

pdk bundle exec rake -T Надежные решения для сложной инфраструктуры 59

Slide 60

Slide 60 text

Work fl ow Надежные решения для сложной инфраструктуры 60

Slide 61

Slide 61 text

Work fl ow Надежные решения для сложной инфраструктуры 61

Slide 62

Slide 62 text

Work fl ow Надежные решения для сложной инфраструктуры 62 pdk test acceptance

Slide 63

Slide 63 text

pdk test acceptance • Beaker • rake beaker, rake beaker:sets • Test Kitchen Надежные решения для сложной инфраструктуры 63

Slide 64

Slide 64 text

Beaker • Официальные инструмент для acceptance/integration тестов • Поддерживает тестирование в: • Vagrant, LXC, AWS, GCE, DO, VmWare, Docker, OpenStack • Beaker DSL vs Rspec/Serverspec • https://github.com/puppetlabs/beaker • https://github.com/puppetlabs/beaker-rspec Надежные решения для сложной инфраструктуры 64

Slide 65

Slide 65 text

Beaker-rspec Надежные решения для сложной инфраструктуры 65

Slide 66

Slide 66 text

Work fl ow Надежные решения для сложной инфраструктуры 66 pdk test acceptance

Slide 67

Slide 67 text

Work fl ow Надежные решения для сложной инфраструктуры 67 pdk test acceptance pdk module bump

Slide 68

Slide 68 text

pdk module bump Надежные решения для сложной инфраструктуры 68 • Puppet-blacksmith: • https://github.com/voxpupuli/puppet-blacksmith • rake module:bump • rake module:bump_commit

Slide 69

Slide 69 text

pdk module bump Надежные решения для сложной инфраструктуры 69

Slide 70

Slide 70 text

Work fl ow Надежные решения для сложной инфраструктуры 70 pdk test acceptance pdk module bump

Slide 71

Slide 71 text

Work fl ow Надежные решения для сложной инфраструктуры 71 pdk test acceptance pdk build pdk module bump

Slide 72

Slide 72 text

pdk build • ./pkg • forgeusername-module_name-version.tar.gz • interview • cleaning Надежные решения для сложной инфраструктуры 72

Slide 73

Slide 73 text

Work fl ow Надежные решения для сложной инфраструктуры 73 pdk test acceptance pdk build pdk module bump

Slide 74

Slide 74 text

Work fl ow Надежные решения для сложной инфраструктуры 74 pdk test acceptance pdk build pdk publish pdk module bump

Slide 75

Slide 75 text

pdk publish • Puppet-blacksmith: • rake module:push • .puppetforge.yml • metadata.json, README, CHANGELOG, LICENSE • <10Mb Надежные решения для сложной инфраструктуры 75

Slide 76

Slide 76 text

Work fl ow Надежные решения для сложной инфраструктуры 76 pdk test acceptance pdk build pdk publish pdk module bump

Slide 77

Slide 77 text

Work fl ow Надежные решения для сложной инфраструктуры 77 pdk test acceptance pdk build pdk publish pdk module bump pdk release

Slide 78

Slide 78 text

pdk release • clean • tag • push • bump_commit • build • publish Надежные решения для сложной инфраструктуры 78

Slide 79

Slide 79 text

Work fl ow Надежные решения для сложной инфраструктуры 79 pdk test acceptance pdk build pdk publish pdk module bump pdk release

Slide 80

Slide 80 text

Work fl ow Надежные решения для сложной инфраструктуры 80 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control

Slide 81

Slide 81 text

pdk new control • Шаблоны: • Control repo от Puppet • https://github.com/puppetlabs/control-repo • PSICK от Example42 • https://github.com/example42/psick Надежные решения для сложной инфраструктуры 81

Slide 82

Slide 82 text

Control repo Надежные решения для сложной инфраструктуры 82

Slide 83

Slide 83 text

Puppet fi le Надежные решения для сложной инфраструктуры 83

Slide 84

Slide 84 text

Work fl ow Надежные решения для сложной инфраструктуры 84 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control

Slide 85

Slide 85 text

Work fl ow Надежные решения для сложной инфраструктуры 85 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control

Slide 86

Slide 86 text

pdk update control • Librarian-puppet http://librarian-puppet.com • librarian-puppet init/install/update/outdated • Puppet fi le.lock • R10k https://github.com/puppetlabs/r10k • r10k puppet fi le check/install/purge Надежные решения для сложной инфраструктуры 86

Slide 87

Slide 87 text

Work fl ow Надежные решения для сложной инфраструктуры 87 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control

Slide 88

Slide 88 text

Work fl ow Надежные решения для сложной инфраструктуры 88 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control pdk test control

Slide 89

Slide 89 text

pdk test control • Onceover • https://github.com/dylanratcliffe/onceover • Тестирование Roles и Pro fi les • Внутри Beaker и Rake таски • Есть плагины Надежные решения для сложной инфраструктуры 89

Slide 90

Slide 90 text

Work fl ow Надежные решения для сложной инфраструктуры 90 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control pdk test control

Slide 91

Slide 91 text

Work fl ow Надежные решения для сложной инфраструктуры 91 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control pdk test control pdk upload

Slide 92

Slide 92 text

pdk upload • R10k • r10k deploy environment • r10k deploy module • Code Manager (PE) Надежные решения для сложной инфраструктуры 92

Slide 93

Slide 93 text

R10k Надежные решения для сложной инфраструктуры 93

Slide 94

Slide 94 text

R10k Надежные решения для сложной инфраструктуры 94

Slide 95

Slide 95 text

R10k Надежные решения для сложной инфраструктуры 95

Slide 96

Slide 96 text

R10k Надежные решения для сложной инфраструктуры 96

Slide 97

Slide 97 text

Work fl ow Надежные решения для сложной инфраструктуры 97 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control pdk test control pdk upload

Slide 98

Slide 98 text

Work fl ow Надежные решения для сложной инфраструктуры 98 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control pdk test control pdk diff pdk upload

Slide 99

Slide 99 text

pdk di f • Octocatalog-diff • Diff между бранчами • Не требует Puppet master Надежные решения для сложной инфраструктуры 99

Slide 100

Slide 100 text

pdk di f Надежные решения для сложной инфраструктуры 100

Slide 101

Slide 101 text

Work fl ow Надежные решения для сложной инфраструктуры 101 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control pdk test control pdk diff pdk upload

Slide 102

Slide 102 text

Work fl ow Надежные решения для сложной инфраструктуры 102 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk diff pdk doc pdk new control pdk update control pdk test control pdk upload

Slide 103

Slide 103 text

pdk doc • CHANGELOG: • GitHub Changelog Generator • rake changelog • Metadata • Puppet strings Надежные решения для сложной инфраструктуры 103

Slide 104

Slide 104 text

Work fl ow Надежные решения для сложной инфраструктуры 104 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk diff pdk doc pdk new control pdk update control pdk test control pdk upload

Slide 105

Slide 105 text

Итого Надежные решения для сложной инфраструктуры 105

Slide 106

Slide 106 text

Книга Надежные решения для сложной инфраструктуры 106

Slide 107

Slide 107 text

Конференция Надежные решения для сложной инфраструктуры 107

Slide 108

Slide 108 text

Ссылки 108 • Митапы DevOps Meetup Moscow • Подкаст и телеграм канал DevOps De fl ope • http://hangops.ru • Slack • Рассылка • Hangouts

Slide 109

Slide 109 text

Вакансия 109 • Мы ищем людей, которым это интересно • Пишите на [email protected]

Slide 110

Slide 110 text

Вопросы?

Slide 111

Slide 111 text

Практика

Slide 112

Slide 112 text

Практика и ДЗ • https://github.com/express42/mc-puppet Надежные решения для сложной инфраструктуры 112

Slide 113

Slide 113 text

Результат Надежные решения для сложной инфраструктуры 113