Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Современные подходы в разработке инфраструктурн...

Современные подходы в разработке инфраструктурного кода на Puppet @DevOpsConf 2018

Современные подходы в разработке инфраструктурного кода на Puppet.
Слайды с выступления Игоря Курочкина на конференции DevOpsConf 2018.

Igor Kurochkin

October 01, 2018
Tweet

More Decks by Igor Kurochkin

Other Decks in Programming

Transcript

  1. Опрос Надежные решения для сложной инфраструктуры 2 • Какую версию

    Puppet используете? • Кто планирует обновляться? • Кто использует community модули? • У кого есть тесты? • У кого больше 2-х репозиториев? • И больше 2-х человек коммитят?
  2. О себе 3 • Scalaxy, Qik, Skype, MS, Express 42

    • Инфраструктура как код: • Chef, Puppet, Ansible, Salt • Terraform, CloudFormation
  3. Инфраструктура как код 7 • Ускорение процесса поставки • Снижение

    количества ошибок • Взаимодействие команд
  4. 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
  5. Puppet 6 Надежные решения для сложной инфраструктуры 11 • Вышел

    18 сентября 2018 • Добавили: • Pupperware • New resource API, new type Deffered • Убрали: • MCollective, puppet module generate/build
  6. Практики из разработки 12 • Среда разработки и структура репозиториев

    • Политики версионирования и разбиение на модули • Управление артефактами и внешние зависимости • Тестирование и ревью изменений • CI/CD для инфраструктурного кода
  7. Проблемы с разработкой Надежные решения для сложной инфраструктуры 13 •

    Старые и разные версии инструментов • Один репозиторий • Монолитные модули и одна версия • Только свои модули или старый форки • Нет тестирования и ручная выкатка
  8. Варианты решений Надежные решения для сложной инфраструктуры 14 • Документация,

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

    best practices, инструкции и регламенты • Bootstrap скрипты и свои инструменты • Git Hooks • Packages (gem, deb, rpm, …) • Docker • Development Kit
  10. Development Kit • Локальная разработка и тестирование • Одно окружение

    для Linux, OS X, Windows • Набор CLI инструментов и библиотек • Work fl ows и best practices • Интеграция в CI Надежные решения для сложной инфраструктуры 16
  11. Цели Надежные решения для сложной инфраструктуры 19 • Обучение Community

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

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

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

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

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

    для Linux, OS X, Windows • RPM, DEB, MSI • Есть в Homebrew • Модуль для Powershell и VScode плагин
  17. Создание модуля • pdk new module • pdk new class

    • pdk new de fi ned_type • pdk new task • pdk new provider Надежные решения для сложной инфраструктуры 27
  18. pdk new module • Имя модуля • Опции: • --full-interview

    • --skip-interview • --template-url=<value> Надежные решения для сложной инфраструктуры 28
  19. Версия • Semantic Versioning 2.0.0 https://semver.org • Tom Preston-Werner (GitHub)

    • X.X.X: • MAJOR - несовместимые изменения • MINOR - новый функционал • PATCH - исправления Надежные решения для сложной инфраструктуры 32
  20. Интервью • Варианты: • 9 вопросов (--full-interview) • 4 вопроса

    (default) • 0 вопросов (--skip-interview) • ~/.pdk/cache/answers.json Надежные решения для сложной инфраструктуры 33
  21. Шаблоны Надежные решения для сложной инфраструктуры 34 • --template-url=https://github.com/puppetlabs/pdk- templates

    • con fi g_defaults.yml (общий конфиг) • moduleroot, moduleroot_init (erb шаблоны конфигов) • object_templates (шаблоны для pdk new …)
  22. .sync.yml • Делаем fork от pdk-templates или • Вносим изменения

    в .sync.yml в репозитории модуля • Пример: • appveyor.yml: • delete: true Надежные решения для сложной инфраструктуры 35
  23. Структура модуля • /examples • / fi les • /manifests

    • /spec • /task • /templates Надежные решения для сложной инфраструктуры 36
  24. Структура модуля • metadata.json • README.md • CHANGELOG.md • Gem

    fi le • Rake fi le Надежные решения для сложной инфраструктуры 37
  25. Структура модуля • . fi xtures.yml • .gitattributes • .gitignore

    • .gitlab-ci.yml • .pdkignore • .rspec • .rubocop.yml • .travis.yml • .yardopts • appveyor.yml Надежные решения для сложной инфраструктуры 38
  26. 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, …
  27. pdk bundle exec Надежные решения для сложной инфраструктуры 40 •

    pdk bundle exec puppet • pdk bundle exec ruby • pdk bundle exec rubocop • pdk bundle exec rake
  28. pdk update • Когда вышла новая версия PDK • Когда

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

    --force опции • Diff в convert_report.txt Надежные решения для сложной инфраструктуры 44
  30. pdk new task • Bolt + Puppet tasks • Ad-Hoc:

    • Запустить puppet run • Обновить пакеты • Перезапустить сервис Надежные решения для сложной инфраструктуры 45
  31. pdk validate • pdk validate --list • pdk (INFO): Available

    validators: metadata, puppet, ruby • pdk validate -a • pdk validate --puppet-dev • pdk validate --puppet-version Надежные решения для сложной инфраструктуры 47
  32. pdk validate • Metadata: • Metadata-json-lint • Puppet: • Puppet

    Style Guide, puppet-lint, puppet-syntax • Ruby: • Rubocop, .rubocop.yml Надежные решения для сложной инфраструктуры 49
  33. pdk test unit • Rspec-puppet • https://github.com/rodjek/rspec-puppet • Rspec-puppet-facts •

    Puppetlabs-spec-helper Надежные решения для сложной инфраструктуры 50
  34. Roadmap Надежные решения для сложной инфраструктуры 56 • Публикация модулей

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

    function • pdk new fact • pdk new control • pdk new dependency • pdk update metadata
  36. 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
  37. pdk test acceptance • Beaker • rake beaker, rake beaker:sets

    • Test Kitchen Надежные решения для сложной инфраструктуры 63
  38. 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
  39. pdk module bump Надежные решения для сложной инфраструктуры 68 •

    Puppet-blacksmith: • https://github.com/voxpupuli/puppet-blacksmith • rake module:bump • rake module:bump_commit
  40. pdk build • ./pkg • forgeusername-module_name-version.tar.gz • interview • cleaning

    Надежные решения для сложной инфраструктуры 72
  41. pdk publish • Puppet-blacksmith: • rake module:push • .puppetforge.yml •

    metadata.json, README, CHANGELOG, LICENSE • <10Mb Надежные решения для сложной инфраструктуры 75
  42. Work fl ow Надежные решения для сложной инфраструктуры 77 pdk

    test acceptance pdk build pdk publish pdk module bump pdk release
  43. pdk release • clean • tag • push • bump_commit

    • build • publish Надежные решения для сложной инфраструктуры 78
  44. Work fl ow Надежные решения для сложной инфраструктуры 79 pdk

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

    test acceptance pdk build pdk publish pdk module bump pdk release pdk new control
  46. pdk new control • Шаблоны: • Control repo от Puppet

    • https://github.com/puppetlabs/control-repo • PSICK от Example42 • https://github.com/example42/psick Надежные решения для сложной инфраструктуры 81
  47. Work fl ow Надежные решения для сложной инфраструктуры 84 pdk

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

    test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control
  49. 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
  50. Work fl ow Надежные решения для сложной инфраструктуры 87 pdk

    test acceptance pdk build pdk publish pdk module bump pdk release pdk new control pdk update control
  51. 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
  52. pdk test control • Onceover • https://github.com/dylanratcliffe/onceover • Тестирование Roles

    и Pro fi les • Внутри Beaker и Rake таски • Есть плагины Надежные решения для сложной инфраструктуры 89
  53. 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
  54. 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
  55. pdk upload • R10k • r10k deploy environment • r10k

    deploy module • Code Manager (PE) Надежные решения для сложной инфраструктуры 92
  56. 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
  57. 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
  58. pdk di f • Octocatalog-diff • Diff между бранчами •

    Не требует Puppet master Надежные решения для сложной инфраструктуры 99
  59. 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
  60. 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
  61. pdk doc • CHANGELOG: • GitHub Changelog Generator • rake

    changelog • Metadata • Puppet strings Надежные решения для сложной инфраструктуры 103
  62. 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
  63. Ссылки 108 • Митапы DevOps Meetup Moscow • Подкаст и

    телеграм канал DevOps De fl ope • http://hangops.ru • Slack • Рассылка • Hangouts