Slide 1

Slide 1 text

ItamaeΛָ͘͠࢖͏ͨΊͷ޻෉ @k0kubun itamae meetup #1

Slide 2

Slide 2 text

ࣗݾ঺հ • Twitter, GitHub: @k0kubun • Itamaeίϛολʔ • Cookpad • 2015ଔ • ٕज़෦։ൃج൫άϧʔϓ itamae-kitchen

Slide 3

Slide 3 text

ࣗݾ঺հ

Slide 4

Slide 4 text

ࠓ೔࿩͢͜ͱ • ࢲ͕Itamaeʹ௥Ճͨ͠ػೳͷ঺հ • Itamae applyͷলྗԽ • Itamae applyͷߴ଎Խ

Slide 5

Slide 5 text

ࢲ͕Itamaeʹ௥Ճͨ͠ػೳ

Slide 6

Slide 6 text

itamae generate / destroy • WikiͷϕετϓϥΫςΟεͷεέϧτϯੜ੒ • itamae [g|generate] [role|cookbook] [NAME] $ itamae g cookbook ruby create create default.rb create files/.keep create templates/.keep ϩά͓͔͍͚͠Ͳ cookbooks/ruby/ ҎԼʹ࡞ΒΕΔ

Slide 7

Slide 7 text

node.yml • itamae ssh -y node.yml • node.jsonΛJSONͷ͔ΘΓʹYAMLͰॻ͚Δ # node.yml rbenv: global: 2.2.0 versions: - 2.2.0 - 2.1.5

Slide 8

Slide 8 text

ϨγϐϓϥάΠϯͷ௚઀࣮ߦ • include_recipe 'foo::bar' ͠ͳͯ͘΋applyͰ͖Δ • itamae ssh foo::bar Ͱitamae-plugin-recipe-fooͷ bar.rb͕࣮ߦ͞ΕΔ # ྫ $ itamae local rbenv::user $ itamae ssh docker::install

Slide 9

Slide 9 text

remote_directory • σΟϨΫτϦ·ͱΊͯsync • ͍͔ͭ͘·ͱΊͯૹΓ͍ͨ࣌ʹهड़ָ͕ remote_directory '/etc/apache2' do source 'apache2' owner 'root' group 'root' mode '755' action :create end

Slide 10

Slide 10 text

Ϩγϐهड़ྔͷ࡟ݮ • include_recipe ͷҾ਺ʹ.rbෆཁʹͨ͠ • include_recipe 'foo.rb' ͸ϨΨγʔίʔυ • resource pluginͷautoload • foo resource͕ݺ͹Εͨ࣌ఆٛ͞Εͯͳ͚Ε͹ࣗಈͰ require itamae/plugin/resource/foo ͞ΕΔ

Slide 11

Slide 11 text

Itamae applyͷলྗԽ

Slide 12

Slide 12 text

Capistranoͷ׆༻ • झຯαʔόʔ΁ͷItamae applyʹ͸Capistrano࢖ͬͯΔ • ௕͍ίϚϯυΛଧͪࠐΈͨ͘ͳ͍ # before $ itamae ssh -h foo -u user -p port -r --dry-run ./lib/ recipe_helper.rb ./roles/name/default.rb $ itamae ssh -h foo -u user -p port -r ./lib/recipe_helper.rb ./roles/name/default.rb # after $ ROLES=name cap itamae dry-run $ ROLES=name cap itamae apply

Slide 13

Slide 13 text

Capistranoͷ׆༻

Slide 14

Slide 14 text

Capistranoͷ׆༻ • ެ։ͯ͠Δ࣮૷͸ͪ͜Β • GitHub: k0kubun/itamae-template • templateσΟϨΫτϦͷதʹ͋Γ·͢ • ߴ଎ԽͷͨΊitamae sshΛitamae localʹ͢Δࡶ࣮૷ೖΓ • https://github.com/k0kubun/itamae-template/tree/v0.1.4/template

Slide 15

Slide 15 text

Rakeͷ׆༻ • ROLES=name bundle exec cap itamae apply΋௕͍ͷͰɺ rake name͚ͩͰͰ͖ΔΑ͏ʹ͍ͯ͠Δ • k0kubun/dotfiles ͷapply͕rake͚ͩͰͰ͖Δ

Slide 16

Slide 16 text

Rakeͷ׆༻ $ rake -T rake apply # apply configuretion for current OS rake debug # debugging apply for current OS rake dry-run # dry-run for current OS rake profile # profile configuration for current OS rake darwin # configure darwin rake linux # configure linux • task default: :apply ʹ͍ͯͯ͠ɺ͔ͭ Rakefile಺Ͱ require 'bundler/setup' ͯ͠bundle exec΋লུ

Slide 17

Slide 17 text

Itamae applyͷߴ଎Խ

Slide 18

Slide 18 text

Itamae apply͕஗͍ • γΣϧεΫϦϓτͰߏ੒؅ཧͯͨ͠dotfilesΛitamaeʹҠ ߦͨ͠ΒMac༻ͷapply͕5ඵˠ30ඵ͘Β͍ʹ rake 16.45s user 8.84s system 83% cpu 30.446 total

Slide 19

Slide 19 text

Itamae applyͷϓϩϑΝΠϦϯά • k0kubun/dotfiles Ͱ rake profile ͢Δͱ stackprof_runner.rb ΛಡΈࠐΈϞϯΩʔύονͯ͠stackprofΛࠩ͠ࠐΉ module StackProfRunner def run(*) super StackProf.stop report = StackProf::Report.new(StackProf.results) report.print_text(false) end end Itamae::Runner.prepend(StackProfRunner) require 'stackprof' StackProf.start(mode: :wall, interval: 4, raw: false)

Slide 20

Slide 20 text

Itamae applyͷϓϩϑΝΠϦϯά ================================== Mode: wall(4) Samples: 1763800 (86.86% miss rate) GC: 20875 (1.18%) ================================== TOTAL (pct) SAMPLES (pct) FRAME 349300 (19.8%) 336438 (19.1%) Specinfra::Backend::Exec#spawn_command 261870 (14.8%) 261870 (14.8%) String#to_snake_case 74045 (4.2%) 74045 (4.2%) block in Specinfra::Backend::Exec#with_env 65376 (3.7%) 65376 (3.7%) block in Class#subclasses • ී௨ʹίϚϯυ͕஗͍ • ద౰ʹinclude_recipeΛ࡟ͬͯΈΔͱhomebrew͕΍͹͍ • String#to_snake_case ...?

Slide 21

Slide 21 text

Itamae applyͷϓϩϑΝΠϦϯά class String def to_snake_case self.gsub(/::/, '/'). gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). gsub(/([a-z\d])([A-Z])/,'\1_\2'). tr("-", "_"). downcase end end • ͬͪ͜͸Ұ୴ݟͳ͔ͬͨ͜ͱʹ͢Δ

Slide 22

Slide 22 text

package resource ͷߴ଎Խ • brew listܹ஗໰୊ • darwinͷpackage resource͸Πϯετʔϧ֬ೝͷͨΊ ʹຖճbrew listΛୟ͘

Slide 23

Slide 23 text

package resource ͷߴ଎Խ

Slide 24

Slide 24 text

package resource ͷߴ଎Խ • ࣮ମͷ ls "$(brew --prefix)/Celler" ʹͯ͠rubyܦ༝ͤ͞ͳ͍ • 30ඵˠ11ඵ • (લͷεϥΠυͱ਺ࣈҧ͏ͷ͸ͦͷͱ͖։ൃதͩͬͨͨΊ) rake 5.21s user 2.21s system 65% cpu 11.302 total

Slide 25

Slide 25 text

package resource ͷߴ଎Խ ࠓ೔ specinfra v2.44.7 ͰϦϦʔε͞Ε·ͨ͠

Slide 26

Slide 26 text

package resource ͷߴ଎Խ • ·ͩ଎͘Ͱ͖Δ • όʔδϣϯνΣοΫ͕༨ܭ

Slide 27

Slide 27 text

package resource ͷߴ଎Խ

Slide 28

Slide 28 text

package resource ͷߴ଎Խ • 11ඵˠ7.9ඵ rake 3.38s user 1.30s system 59% cpu 7.921 total

Slide 29

Slide 29 text

git resourceͷߴ଎Խ • git resource஗͍ • git fetch origin͕஗͍

Slide 30

Slide 30 text

git resourceͷߴ଎Խ

Slide 31

Slide 31 text

git resourceͷߴ଎Խ • rbenvͷgit fetch originʹ3.2ඵ…?

Slide 32

Slide 32 text

git resourceͷߴ଎Խ • revisionࢦఆ͞ΕͯͯมΘͬͯͳ͚Ε͹fetch͠ͳ͍Α͏ʹ

Slide 33

Slide 33 text

• 7.9ඵˠ4.6ඵ!!! • ׬શʹշద git resourceͷߴ଎Խ rake 3.37s user 1.28s system 99% cpu 4.690 total

Slide 34

Slide 34 text

• itamaeͱspecinfraΛ࠷৽ʹ͢Δͱָ͍͠৽ػೳ͕Ұഋ͋ Δ͠ߴ଎ͳͷͰ࠷৽ͷౕʹ্͛Α͏!!!! ݁࿦