kainos tech space #1 : devops : pawel chmielinski - dobre praktyki przy pisaniu kodu

22
Dobre praktyki przy pisaniu kodu Puppeta Paweł Chmieliński Senior WebOps Engineer 14/11/2016

Upload: kainos-polska

Post on 14-Apr-2017

35 views

Category:

Technology


0 download

TRANSCRIPT

Dobre praktykiprzy pisaniu kodu Puppeta

Paweł ChmielińskiSenior  WebOps Engineer  

14/11/2016

01/12/2016 2

Organizacja  kodu  i  danych

Rekomendowanenarzędzia

Organizacja  kodu  i  danychTeoria

01/12/2016 3

Organizacja  kodu  i  danychLogika  i  dane  aplikacji

01/12/2016 4

• Instalacja,  konfiguracja  konkretnej  usługi,  komponentu

Zawarta  w  MODUŁACH

• Domyślna,  generyczna  konfiguracja• Logika  pozwalająca  na  wsparcie  

różnych  systemów• Dane  użytkownika  konfigurowane  

przez  parametry  wejściowe

Logika  i  dane  aplikacjiMODUŁY

If  Debian:  apacheIf Redhat:  httpd

Lokalizacja konfiguracji  

Obsługiwane  przez  konfigurację  parametry

Domyślne  wartości  konfiguracji

Nowe typy  wymagane  do  obsługi  aplikacji

Skrypt  inicjalizujący

Organizacja  kodu  i  danychLogika  biznesowa

01/12/2016 5

• Wyższa  warstwa  abstrakcji• Logika  sklejająca  moduły  w  przydatne  

rozwiązanie• Defniuje  zasoby,  które  są  specyficzne  

dla  naszych  potrzeb

Zawarta  w  ROLACH  I  PROFILACH

• Nieprzenośne  -­‐ przydatne  tylko  dla  naszej  organizacji

Logika  biznesowaROLE  I  PROFILE

Maszyna www1  ma  zainstalowany  apache,  php,  wordpress,  iptables

Na  roli  www  dwa vhosty:  wordpress,    wordpress-­‐test

Vhost  wordpress-­‐test  tylkodla  192.168.84.0/24

Firewall  otwarty  na  portach  80,  443

Wordpress  łączy  się  z  bazą  na  hoście  db1

Dostęp do  apache  wymaga  hasła

Organizacja  kodu  i  danychDane  biznesowe

01/12/2016 6

• Rozdzielenie  kodu  od  danych

• Ramię  w  ramię  z  logiką  biznesową

• Dane  specyficzne  dla  organizacji,  projektu

Zawarte  w  HIERZE

• Przydatne  tylko  dla  naszej  organizacji

Logika  biznesowaROLE  I  PROFILE

Dane  biznesoweHIERA

If $local_db { include mysql }

PRODTEST

local_db: falselocal_db:  true

If $wp_test { ... } PRODTEST

wp_test:  falsewp_test:  true

Allow from $net LONWAW

net: 192.168.19.0/24net:  192.168.84.0/24

Firewall::Allow { $fw_ports: }

WWWDB

fw_ports:  80,  443fw_ports:  3306

DB_HOST: $db_host PRODTEST

db_host:  db1db_host:  localhost

PASS: $pass PRODTEST

pass:  zc%63*dm$dpass:  admin  

Organizacja  kodu  i  danychRole  i  profile

01/12/2016 7

modules/role/manifests/www.pp

modules/profile/manifests/base.pp

modules/profile/manifests/wordpress.pp

Organizacja  kodu  i  danychParę  słów  o  hierze

01/12/2016 8

puppet/hiera.yaml

hieradata/tier/prod.yaml

hieradata/common.yaml

Organizacja  kodu  i  danychNajczęstsze  błędy

01/12/2016 9

Organizacja  kodu  i  danychHardcoding  danych  biznesowych  w  module

01/12/2016 10

modules/resolv_conf/manifests/init.pp

modules/resolv_conf/manifests/init.pp

modules/resolv_conf/templates/etc/resolv.conf.erb

NIE!  

OK

Organizacja  kodu  i  danychNieprawidłowe  użycie  hiery

01/12/2016 11

puppet/hiera.yaml

hieradata/osfamily/redhat.yaml

NIE!  

hieradata/osfamily/debian.yamlNIE!  

Organizacja  kodu  i  danychUżycie  hiery  w  module

01/12/2016 12

modules/resolv_conf/manifests/init.pp

modules/profile/manifests/ntp.pp

hieradata/tier/production/common.yaml

NIE!  

OK

OK

Organizacja  kodu  i  danychModuły,  które  robią  za  dużo

01/12/2016 13

modules/tomcat/manifests/package.pp

modules/tomcat/manifests/init.pp

NIE!  

OK

Organizacja  kodu  i  danychNiepotrzebne  interdepedencje

01/12/2016 14

modules/wordpress/manifests/init.pp

modules/profile/manifests/wordpress.pp

NIE!  

OK

OK

hieradata/common.yaml

Rekomendowane  narzędzia

01/12/2016 15

Rekomendowane  narzędziaZarządzanie  wersją  ruby

01/12/2016 16

Rekomendowane  narzędziaZarządzanie  gemami  Ruby

01/12/2016 17

Rekomendowane  narzędziaZarządzanie  zewnętrznymi  modułami  Puppeta

01/12/2016 18

Librarian-­‐puppet

Rekomendowane  narzędziaTestowanie  kodu

01/12/2016 19

Testy  składni:• puppet-­‐syntax  +  puppet-­‐lintTesty  jednostkowe:• puppet-­‐rspecTesty  akceptacyjne:• Beaker  i/lub  VagrantA  uruchamiać  testy  można  za  pomocą  Rake

Rekomendowane  narzędziaSzkielety

01/12/2016 20

• Szkielet  modułu  -­‐https://github.com/garethr/puppet-­‐module-­‐skeleton• Szkielet  repozytorium  -­‐https://github.com/gds-­‐operations/puppet-­‐skeleton• Szkielet  Control  Repo  R10K  -­‐https://github.com/puppetlabs/control-­‐repo

Materiały  pomocniczeGdzie  znaleźć  dodatkowe  informacje

01/12/2016 21

01/12/2016 22