Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Puppet development kit and best practices

Puppet development kit and best practices

  • Be the first to comment

  • Be the first to like this

Puppet development kit and best practices

  1. 1. Современные подходы в разработке инфраструктурного кода на Puppet Игорь Курочкин Экспресс 42
  2. 2. О себе 2 • Scalaxy, Qik, Skype, MS, Express 42 • Инфраструктура как код: • Chef, Puppet, Ansible, Salt
  3. 3. План 3 • Теория: • Инфраструктура как код • Puppet • Workflow • Практика и ДЗ
  4. 4. Практика, ДЗ и слайды • https://github.com/express42/mc-puppet Надежные решения для сложной инфраструктуры 4
  5. 5. Теория
  6. 6. Инфраструктура как код 6 • Ускорение процесса поставки • Снижение количества ошибок • Взаимодействие команд
  7. 7. Инструменты 7
  8. 8. Надежные решения для сложной инфраструктуры 8
  9. 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. Опрос Надежные решения для сложной инфраструктуры 10 • Какую версию Puppet используете? • Кто планирует обновляться? • Кто использует community модули? • У кого есть тесты? • У кого больше 2-х репозиториев? • И больше 2-х человек коммитят?
  11. 11. Puppet 6 Надежные решения для сложной инфраструктуры 11 • Вышел 18 сентября 2018 • Добавили: • Pupperware • New resource API, new type Deffered • Убрали: • MCollective, puppet module generate/build
  12. 12. Практики из разработки 12 • Среда разработки и структура репозиториев • Политики версионирования и разбиение на модули • Управление артефактами и внешние зависимости • Тестирование и ревью изменений • CI/CD для инфраструктурного кода
  13. 13. Проблемы с разработкой Надежные решения для сложной инфраструктуры 13 • Старые и разные версии инструментов • Один репозиторий • Монолитные модули и одна версия • Только свои модули или старый форки • Нет тестирования и ручная выкатка
  14. 14. Варианты решений Надежные решения для сложной инфраструктуры 14 • Документация, best practices, инструкции и регламенты • Bootstrap скрипты и свои инструменты • Git Hooks • Packages (gem, deb, rpm, …) • Docker • Development Kit
  15. 15. Варианты решений Надежные решения для сложной инфраструктуры 15 • Документация, best practices, инструкции и регламенты • Bootstrap скрипты и свои инструменты • Git Hooks • Packages (gem, deb, rpm, …) • Docker • Development Kit
  16. 16. Development Kit • Локальная разработка и тестирование • Одно окружение для Linux, OS X, Windows • Набор CLI инструментов и библиотек • Workflows и best practices • Интеграция в CI Надежные решения для сложной инфраструктуры 16
  17. 17. Chef DK Надежные решения для сложной инфраструктуры 17
  18. 18. Puppet DK Надежные решения для сложной инфраструктуры 18
  19. 19. Цели Надежные решения для сложной инфраструктуры 19 • Обучение Community и повышение качества публичных модулей • Общие подходы по созданию и тестированию Puppet кода • Единый CLI и официальное окружение разработки
  20. 20. Puppet Development Kit Надежные решения для сложной инфраструктуры 20 • Первый коммит - январь 2017 • Сейчас: • 1000+ коммитов • 24 релиза • Текущая версия 1.7.0
  21. 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. 22. PDK и Puppet 6 Надежные решения для сложной инфраструктуры 22 • Будет в релизе 1.7.1 • Релиз должен был быть 19 сентября • Workaround: • --puppet-dev • --puppet-version
  23. 23. Что еще в PDK Надежные решения для сложной инфраструктуры 23 • Утилита pdk • Шаблоны для модулей, классов, провайдеров, задач, … • Ссылки на инструменты: • Линтеры • Фреймворки для тестирования • Дополнительные утилиты • Rake обертки вокруг инструментов
  24. 24. Workflow
  25. 25. Workflow Надежные решения для сложной инфраструктуры 25
  26. 26. Установка PDK Надежные решения для сложной инфраструктуры 26 • Пакет для Linux, OS X, Windows • RPM, DEB, MSI • Есть в Homebrew • Модуль для Powershell и VScode плагин
  27. 27. Создание модуля • pdk new module • pdk new class • pdk new defined_type • pdk new task • pdk new provider Надежные решения для сложной инфраструктуры 27
  28. 28. pdk new module • Имя модуля • Опции: • --full-interview • --skip-interview • --template-url=<value> Надежные решения для сложной инфраструктуры 28
  29. 29. Имя модуля • <АВТОР>-<ИМЯ_МОДУЛЯ> • express42_puppet_module • express42-puppet-module • express42-puppet_module Надежные решения для сложной инфраструктуры 29
  30. 30. Имя модуля • <АВТОР>-<ИМЯ_МОДУЛЯ> • express42_puppet_module • express42-puppet-module • express42-puppet_module Надежные решения для сложной инфраструктуры 30
  31. 31. Имя модуля • <АВТОР>-<ИМЯ_МОДУЛЯ> • express42_puppet_module • express42-puppet-module • express42-puppet_module Надежные решения для сложной инфраструктуры 31
  32. 32. Версия • Semantic Versioning 2.0.0 https://semver.org • Tom Preston-Werner (GitHub) • X.X.X: • MAJOR - несовместимые изменения • MINOR - новый функционал • PATCH - исправления Надежные решения для сложной инфраструктуры 32
  33. 33. Интервью • Варианты: • 9 вопросов (--full-interview) • 4 вопроса (default) • 0 вопросов (--skip-interview) • ~/.pdk/cache/answers.json Надежные решения для сложной инфраструктуры 33
  34. 34. Шаблоны Надежные решения для сложной инфраструктуры 34 • --template-url=https://github.com/puppetlabs/pdk- templates • config_defaults.yml (общий конфиг) • moduleroot, moduleroot_init (erb шаблоны конфигов) • object_templates (шаблоны для pdk new …)
  35. 35. .sync.yml • Делаем fork от pdk-templates или • Вносим изменения в .sync.yml в репозитории модуля • Пример: • appveyor.yml: • delete: true Надежные решения для сложной инфраструктуры 35
  36. 36. Структура модуля • /examples • /files • /manifests • /spec • /task • /templates Надежные решения для сложной инфраструктуры 36
  37. 37. Структура модуля • metadata.json • README.md • CHANGELOG.md • Gemfile • Rakefile Надежные решения для сложной инфраструктуры 37
  38. 38. Структура модуля • .fixtures.yml • .gitattributes • .gitignore • .gitlab-ci.yml • .pdkignore • .rspec • .rubocop.yml • .travis.yml • .yardopts • appveyor.yml Надежные решения для сложной инфраструктуры 38
  39. 39. Gemfile Надежные решения для сложной инфраструктуры 39 • group :development • gem puppet-module-posix-dev-rX.X • metadata-json-lint • puppet-lint, puppet-syntax • rubocop • puppet-blacksmith • puppet-strings, …
  40. 40. pdk bundle exec Надежные решения для сложной инфраструктуры 40 • pdk bundle exec puppet • pdk bundle exec ruby • pdk bundle exec rubocop • pdk bundle exec rake
  41. 41. pdk bundle exec rake Надежные решения для сложной инфраструктуры 41
  42. 42. pdk update • Когда вышла новая версия PDK • Когда обновились шаблоны • Когда обновилась конфигурация в .sync.yml • Есть --noop и --force опции • Отчет в update_report.txt Надежные решения для сложной инфраструктуры 42
  43. 43. metadata.json "pdk-version": "1.7.0" "template-url": "file:///opt/puppetlabs/pdk/share/cache/ pdk-templates.git", “template-ref": “1.7.0-0-g57412ed" Надежные решения для сложной инфраструктуры 43
  44. 44. pdk convert • Конвертация старых модулей • Есть --noop и --force опции • Diff в convert_report.txt Надежные решения для сложной инфраструктуры 44
  45. 45. pdk new task • Bolt + Puppet tasks • Ad-Hoc: • Запустить puppet run • Обновить пакеты • Перезапустить сервис Надежные решения для сложной инфраструктуры 45
  46. 46. Workflow Надежные решения для сложной инфраструктуры 46
  47. 47. pdk validate • pdk validate --list • pdk (INFO): Available validators: metadata, puppet, ruby • pdk validate -a • pdk validate --puppet-dev • pdk validate --puppet-version Надежные решения для сложной инфраструктуры 47
  48. 48. pdk validate Надежные решения для сложной инфраструктуры 48
  49. 49. pdk validate • Metadata: • Metadata-json-lint • Puppet: • Puppet Style Guide, puppet-lint, puppet-syntax • Ruby: • Rubocop, .rubocop.yml Надежные решения для сложной инфраструктуры 49
  50. 50. pdk test unit • Rspec-puppet • https://github.com/rodjek/rspec-puppet • Rspec-puppet-facts • Puppetlabs-spec-helper Надежные решения для сложной инфраструктуры 50
  51. 51. pdk test unit Надежные решения для сложной инфраструктуры 51
  52. 52. pdk test unit Надежные решения для сложной инфраструктуры 52
  53. 53. pdk test unit Надежные решения для сложной инфраструктуры 53
  54. 54. Workflow Надежные решения для сложной инфраструктуры 54
  55. 55. Roadmap Надежные решения для сложной инфраструктуры 55 • Публикация модулей в Forge • Конфигурация для PDK и утилит • Валидация EPP, ERB и YAML • Валидация и тестирования Control репозиториев (r10k) • Интеграция Puppet-strings • Diff изменений
  56. 56. Roadmap Надежные решения для сложной инфраструктуры 56 • pdk new function • pdk new fact • pdk new control • pdk new dependency • pdk update metadata
  57. 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. 58. pdk bundle exec rake -T Надежные решения для сложной инфраструктуры 58
  59. 59. Workflow Надежные решения для сложной инфраструктуры 59
  60. 60. Workflow Надежные решения для сложной инфраструктуры 60
  61. 61. Workflow Надежные решения для сложной инфраструктуры 61 pdk test acceptance
  62. 62. pdk test acceptance • Beaker • rake beaker, rake beaker:sets • Test Kitchen Надежные решения для сложной инфраструктуры 62
  63. 63. 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 Надежные решения для сложной инфраструктуры 63
  64. 64. Beaker-rspec Надежные решения для сложной инфраструктуры 64
  65. 65. Workflow Надежные решения для сложной инфраструктуры 65 pdk test acceptance
  66. 66. Workflow Надежные решения для сложной инфраструктуры 66 pdk test acceptance pdk module bump
  67. 67. pdk module bump Надежные решения для сложной инфраструктуры 67 • Puppet-blacksmith: • https://github.com/voxpupuli/puppet-blacksmith • rake module:bump • rake module:bump_commit
  68. 68. pdk module bump Надежные решения для сложной инфраструктуры 68
  69. 69. Workflow Надежные решения для сложной инфраструктуры 69 pdk test acceptance pdk module bump
  70. 70. Workflow Надежные решения для сложной инфраструктуры 70 pdk test acceptance pdk build pdk module bump
  71. 71. pdk build • ./pkg • forgeusername-module_name-version.tar.gz • interview • cleaning Надежные решения для сложной инфраструктуры 71
  72. 72. Workflow Надежные решения для сложной инфраструктуры 72 pdk test acceptance pdk build pdk module bump
  73. 73. Workflow Надежные решения для сложной инфраструктуры 73 pdk test acceptance pdk build pdk publish pdk module bump
  74. 74. pdk publish • Puppet-blacksmith: • rake module:push • .puppetforge.yml • metadata.json, README, CHANGELOG, LICENSE • <10Mb Надежные решения для сложной инфраструктуры 74
  75. 75. Workflow Надежные решения для сложной инфраструктуры 75 pdk test acceptance pdk build pdk publish pdk module bump
  76. 76. Workflow Надежные решения для сложной инфраструктуры 76 pdk test acceptance pdk build pdk publish pdk module bump pdk release
  77. 77. pdk release • clean • tag • push • bump_commit • build • publish Надежные решения для сложной инфраструктуры 77
  78. 78. Workflow Надежные решения для сложной инфраструктуры 78 pdk test acceptance pdk build pdk publish pdk module bump pdk release
  79. 79. Workflow Надежные решения для сложной инфраструктуры 79 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control
  80. 80. pdk new control • Шаблоны: • Control repo от Puppet • https://github.com/puppetlabs/control-repo • PSICK от Example42 • https://github.com/example42/psick Надежные решения для сложной инфраструктуры 80
  81. 81. Control repo Надежные решения для сложной инфраструктуры 81
  82. 82. Puppetfile Надежные решения для сложной инфраструктуры 82
  83. 83. Workflow Надежные решения для сложной инфраструктуры 83 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control
  84. 84. Workflow Надежные решения для сложной инфраструктуры 84 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control
  85. 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. 86. Workflow Надежные решения для сложной инфраструктуры 86 pdk test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control
  87. 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. 88. pdk test control • Onceover • https://github.com/dylanratcliffe/onceover • Тестирование Roles и Profiles • Внутри Beaker и Rake таски • Есть плагины Надежные решения для сложной инфраструктуры 88
  89. 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. 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
  91. 91. pdk upload • R10k • r10k deploy environment • r10k deploy module • Code Manager (PE) Надежные решения для сложной инфраструктуры 91
  92. 92. R10k Надежные решения для сложной инфраструктуры 92
  93. 93. R10k Надежные решения для сложной инфраструктуры 93
  94. 94. R10k Надежные решения для сложной инфраструктуры 94
  95. 95. R10k Надежные решения для сложной инфраструктуры 95
  96. 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. 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. 98. pdk diff • Octocatalog-diff • Diff между бранчами • Не требует Puppet master Надежные решения для сложной инфраструктуры 98
  99. 99. pdk diff Надежные решения для сложной инфраструктуры 99
  100. 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. 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
  102. 102. pdk doc • CHANGELOG: • GitHub Changelog Generator • rake changelog • Metadata • Puppet strings Надежные решения для сложной инфраструктуры 102
  103. 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
  104. 104. Итого Надежные решения для сложной инфраструктуры 104
  105. 105. Книга Надежные решения для сложной инфраструктуры 105
  106. 106. Конференция Надежные решения для сложной инфраструктуры 106
  107. 107. Ссылки 107 • Митапы DevOps Meetup Moscow • Подкаст и телеграм канал DevOps Deflope • http://hangops.ru • Slack • Рассылка • Hangouts
  108. 108. Вакансия 108 • Мы ищем людей, которым это интересно • Пишите на dontpanic@express42.com
  109. 109. Вопросы?
  110. 110. Практика
  111. 111. Практика и ДЗ • https://github.com/express42/mc-puppet Надежные решения для сложной инфраструктуры 111
  112. 112. Результат Надежные решения для сложной инфраструктуры 112

×