9. Puppet
Надежные решения для сложной инфраструктуры
9
• С 2005 года, текущая версия 6
• Puppet Platform:
• Server, Agent, PuppetDB
• Puppet Open Source:
• PDK, Bolt, Beaker, Razor, Container Registry, Puppet DB, Facter
• Puppet Enterprise:
• Delivery, Pipelines, CodeManager
10. Опрос
Надежные решения для сложной инфраструктуры
10
• Какую версию Puppet используете?
• Кто планирует обновляться?
• Кто использует community модули?
• У кого есть тесты?
• У кого больше 2-х репозиториев?
• И больше 2-х человек коммитят?
11. Puppet 6
Надежные решения для сложной инфраструктуры
11
• Вышел 18 сентября 2018
• Добавили:
• Pupperware
• New resource API, new type Deffered
• Убрали:
• MCollective, puppet module generate/build
12. Практики из
разработки
12
• Среда разработки и структура репозиториев
• Политики версионирования и разбиение на
модули
• Управление артефактами и внешние зависимости
• Тестирование и ревью изменений
• CI/CD для инфраструктурного кода
13. Проблемы с
разработкой
Надежные решения для сложной инфраструктуры
13
• Старые и разные версии инструментов
• Один репозиторий
• Монолитные модули и одна версия
• Только свои модули или старый форки
• Нет тестирования и ручная выкатка
14. Варианты решений
Надежные решения для сложной инфраструктуры
14
• Документация, best practices, инструкции и регламенты
• Bootstrap скрипты и свои инструменты
• Git Hooks
• Packages (gem, deb, rpm, …)
• Docker
• Development Kit
15. Варианты решений
Надежные решения для сложной инфраструктуры
15
• Документация, best practices, инструкции и регламенты
• Bootstrap скрипты и свои инструменты
• Git Hooks
• Packages (gem, deb, rpm, …)
• Docker
• Development Kit
16. Development Kit
• Локальная разработка и тестирование
• Одно окружение для Linux, OS X, Windows
• Набор CLI инструментов и библиотек
• Workflows и best practices
• Интеграция в CI
Надежные решения для сложной инфраструктуры
16
19. Цели
Надежные решения для сложной инфраструктуры
19
• Обучение Community и повышение качества
публичных модулей
• Общие подходы по созданию и тестированию
Puppet кода
• Единый CLI и официальное окружение
разработки
20. Puppet Development
Kit
Надежные решения для сложной инфраструктуры
20
• Первый коммит - январь 2017
• Сейчас:
• 1000+ коммитов
• 24 релиза
• Текущая версия 1.7.0
21. Что внутри PDK
Надежные решения для сложной инфраструктуры
21
• Ruby (несколько версий)
• Git
• Puppet (facter, hiera, puppet, …)
• 4 (4.7.x-4.10.x)
• 5 (5.0.x-5.5.x)
• 6*
22. PDK и Puppet 6
Надежные решения для сложной инфраструктуры
22
• Будет в релизе 1.7.1
• Релиз должен был быть 19 сентября
• Workaround:
• --puppet-dev
• --puppet-version
23. Что еще в PDK
Надежные решения для сложной инфраструктуры
23
• Утилита pdk
• Шаблоны для модулей, классов, провайдеров, задач, …
• Ссылки на инструменты:
• Линтеры
• Фреймворки для тестирования
• Дополнительные утилиты
• Rake обертки вокруг инструментов
26. Установка PDK
Надежные решения для сложной инфраструктуры
26
• Пакет для Linux, OS X, Windows
• RPM, DEB, MSI
• Есть в Homebrew
• Модуль для Powershell и VScode плагин
27. Создание модуля
• pdk new module
• pdk new class
• pdk new defined_type
• pdk new task
• pdk new provider
Надежные решения для сложной инфраструктуры
27
28. pdk new module
• Имя модуля
• Опции:
• --full-interview
• --skip-interview
• --template-url=<value>
Надежные решения для сложной инфраструктуры
28
29. Имя модуля
• <АВТОР>-<ИМЯ_МОДУЛЯ>
• express42_puppet_module
• express42-puppet-module
• express42-puppet_module
Надежные решения для сложной инфраструктуры
29
30. Имя модуля
• <АВТОР>-<ИМЯ_МОДУЛЯ>
• express42_puppet_module
• express42-puppet-module
• express42-puppet_module
Надежные решения для сложной инфраструктуры
30
31. Имя модуля
• <АВТОР>-<ИМЯ_МОДУЛЯ>
• express42_puppet_module
• express42-puppet-module
• express42-puppet_module
Надежные решения для сложной инфраструктуры
31
32. Версия
• Semantic Versioning 2.0.0 https://semver.org
• Tom Preston-Werner (GitHub)
• X.X.X:
• MAJOR - несовместимые изменения
• MINOR - новый функционал
• PATCH - исправления
Надежные решения для сложной инфраструктуры
32
33. Интервью
• Варианты:
• 9 вопросов (--full-interview)
• 4 вопроса (default)
• 0 вопросов (--skip-interview)
• ~/.pdk/cache/answers.json
Надежные решения для сложной инфраструктуры
33
34. Шаблоны
Надежные решения для сложной инфраструктуры
34
• --template-url=https://github.com/puppetlabs/pdk-
templates
• config_defaults.yml (общий конфиг)
• moduleroot, moduleroot_init (erb шаблоны
конфигов)
• object_templates (шаблоны для pdk new …)
35. .sync.yml
• Делаем fork от pdk-templates или
• Вносим изменения в .sync.yml в репозитории модуля
• Пример:
• appveyor.yml:
• delete: true
Надежные решения для сложной инфраструктуры
35
36. Структура модуля
• /examples
• /files
• /manifests
• /spec
• /task
• /templates
Надежные решения для сложной инфраструктуры
36
41. pdk bundle exec rake
Надежные решения для сложной инфраструктуры
41
42. pdk update
• Когда вышла новая версия PDK
• Когда обновились шаблоны
• Когда обновилась конфигурация в .sync.yml
• Есть --noop и --force опции
• Отчет в update_report.txt
Надежные решения для сложной инфраструктуры
42
50. pdk test unit
• Rspec-puppet
• https://github.com/rodjek/rspec-puppet
• Rspec-puppet-facts
• Puppetlabs-spec-helper
Надежные решения для сложной инфраструктуры
50
55. Roadmap
Надежные решения для сложной инфраструктуры
55
• Публикация модулей в Forge
• Конфигурация для PDK и утилит
• Валидация EPP, ERB и YAML
• Валидация и тестирования Control репозиториев (r10k)
• Интеграция Puppet-strings
• Diff изменений
56. Roadmap
Надежные решения для сложной инфраструктуры
56
• pdk new function
• pdk new fact
• pdk new control
• pdk new dependency
• pdk update metadata
57. Roadmap
Надежные решения для сложной инфраструктуры
57
• https://github.com/puppetlabs/pdk-planning
• https://github.com/puppetlabs/pdk-planning/blob/
master/ROADMAP.md
• https://tickets.puppetlabs.com/projects/PDK/summary
58. pdk bundle exec rake -T
Надежные решения для сложной инфраструктуры
58
75. Workflow
Надежные решения для сложной инфраструктуры
75
pdk test
acceptance
pdk build pdk publish
pdk module
bump
76. Workflow
Надежные решения для сложной инфраструктуры
76
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
77. pdk release
• clean
• tag
• push
• bump_commit
• build
• publish
Надежные решения для сложной инфраструктуры
77
78. Workflow
Надежные решения для сложной инфраструктуры
78
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
79. Workflow
Надежные решения для сложной инфраструктуры
79
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
pdk new
control
80. pdk new control
• Шаблоны:
• Control repo от Puppet
• https://github.com/puppetlabs/control-repo
• PSICK от Example42
• https://github.com/example42/psick
Надежные решения для сложной инфраструктуры
80
83. Workflow
Надежные решения для сложной инфраструктуры
83
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
pdk new
control
84. Workflow
Надежные решения для сложной инфраструктуры
84
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
pdk new
control
pdk update
control
85. pdk update control
• Librarian-puppet http://librarian-puppet.com
• librarian-puppet init/install/update/outdated
• Puppetfile.lock
• R10k https://github.com/puppetlabs/r10k
• r10k puppetfile check/install/purge
Надежные решения для сложной инфраструктуры
85
86. Workflow
Надежные решения для сложной инфраструктуры
86
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
pdk new
control
pdk update
control
87. Workflow
Надежные решения для сложной инфраструктуры
87
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
pdk new
control
pdk update
control
pdk test
control
88. pdk test control
• Onceover
• https://github.com/dylanratcliffe/onceover
• Тестирование Roles и Profiles
• Внутри Beaker и Rake таски
• Есть плагины
Надежные решения для сложной инфраструктуры
88
89. Workflow
Надежные решения для сложной инфраструктуры
89
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
pdk new
control
pdk update
control
pdk test
control
90. Workflow
Надежные решения для сложной инфраструктуры
90
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
pdk new
control
pdk update
control
pdk test
control
pdk upload
96. Workflow
Надежные решения для сложной инфраструктуры
96
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
pdk new
control
pdk update
control
pdk test
control
pdk upload
97. Workflow
Надежные решения для сложной инфраструктуры
97
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
pdk new
control
pdk update
control
pdk test
control
pdk diffpdk upload
98. pdk diff
• Octocatalog-diff
• Diff между бранчами
• Не требует Puppet master
Надежные решения для сложной инфраструктуры
98
100. Workflow
Надежные решения для сложной инфраструктуры
100
pdk test
acceptance
pdk build pdk publish
pdk module
bump
pdk release
pdk new
control
pdk update
control
pdk test
control
pdk diffpdk upload
101. Workflow
Надежные решения для сложной инфраструктуры
101
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
103. Workflow
Надежные решения для сложной инфраструктуры
103
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