ãã£ãšæ·±ãããå¿
èŠããããŸãã
ã€ã³ã»ãã·ã§ã³ããã§ã¯ãããã°ã©ãã³ã°ã®äŸ/ãã¯ããã¯ã説æããŸãã çç±ã¯åãã§ããã€ã³ã¿ãŒãããäžã«ããã«ããã¯ãå¿
èŠã§ãã
ååã®èšäºã§ã¯ ãCentos 6.5ã䜿çšããŠPuppetããŒãžã§ã³3.8ãã€ã³ã¹ããŒã«ããã³èšå®ããããšãäŸãšããŠèª¬æããŸããã æãç°¡åãªäŸã¯ãã¯ã©ã€ã¢ã³ã/ãµãŒããŒãã³ãã«ã®æ©èœããã¹ãããå Žåã§ãã æ¬¡ã«ããããã©ã®ããã«è€éã«ãªãã®ãããªããããå¿
èŠãªã®ããèŠãŠã¿ãŸãããã
äŸ1ïŒã¢ãžã¥ãŒã«ãããã§ã¹ãã§ãã©ã¡ãŒã¿ãŒã䜿çšãã
class test1 {
ãã©ã¡ãŒã¿ãŒå
ã®ããã¹ãã®éä¿¡ã®ãã§ãŒã³ïŒ
ã¯ã©ã¹ïŒ$ text1 $ text2ïŒ->ãã¡ã€ã«ïŒã³ã³ãã³ãïŒ$ {text1}-$ {text2}ïŒäŸ2ïŒã¢ãžã¥ãŒã«ãããã§ã¹ãå
ã®ãã©ã¡ãŒã¿ãŒã®çµ±åã¹ãã¬ãŒãž
次ã®ã¬ãã«ïŒå€ãã®ã¯ã©ã¹ãããã倿°ã®ã©ã€ãã©ãªã®é¡äŒŒç©ãäœããããšæã£ãŠããŸãã ãã©ã¡ãŒã¿ã¯1ã€ã®ã¬ã·ãã«ä¿åããŠãã¢ãžã¥ãŒã«å
šäœã§äœ¿çšã§ããŸãã ããšãã°ãããã€ãã®ã·ã¹ãã 倿°ãåéããç¬èªã®ãã®ã远å ããŸãã
åºæ¬ãå°ãç¹°ãè¿ããŸãããã
/ etc / puppet / modulesã®ãã¹ã¿ãŒãµãŒããŒã«ç§»åããŠãã¹ã±ã«ãã³ãçæããŸãã
puppet module generate myname-test1
ããããã¹ãŠããçŽãããšãã§ãããããå
¥åã8åæŒããŸãã ãã£ã¬ã¯ããªmyname-test1ãååŸããtest1ã«ååã倿ŽããŸãã ã¢ãžã¥ãŒã«ããã«ãããŠãããªãã¯
Puppet forgeã«ã¢ããããŒãããå Žåã¯ããã«ããŒã ãå¿
èŠã§ãã
ãã¡ã€ã«
/etc/puppet/modules/test1/manifests/init.ppãäœæããŸã
class test1 ( $envname = $test1::params::env,
ãã¡ã€ã«
/etc/puppet/modules/test1/manifests/params.ppãäœæããŸã
class test1::params { $env = $settings::environment
説æïŒ
test1-ã¢ãžã¥ãŒã«å-ããããå€ã·ã¹ãã ã®ãããžã§ã¯ãã®ã«ãŒãåã
init.ppãparams.pp-ãããã§ã¹ã
-1ã€ã®ãããã§ã¹ãã«ã¯1ã€ã®ã¯ã©ã¹ãæ ŒçŽãããŸãã ãã¡ã€ã«åãšã¯ã©ã¹ã¯äžèŽããå¿
èŠããããŸãã
class test1-åæã¯ã©ã¹ãã¯ã©ã¹ã¯åçŽãª
include test1ãä»ããŠåçŽ
ã«åŒã³åºããããšãã«ããã©ã«ãã§åäœã
ãŸãå¿
èŠã«å¿ããŠã空ã®ãŸãŸã«ããŠãåå¥ã®ååã¯ã©ã¹ãäœæã§ããŸãïŒä»¥äžãåç
§ïŒã
ã¯ã©ã¹test1 :: params-ååã¯ã©ã¹ã paramsãšããååã¯ã䟿å®äžéžæãããŠãããã©ã®ãããªååã§ãããŸããŸããã
次ã®2ã€ã®æ¹æ³ã§ã³ãŒãã®æ§æã確èªã§ããŸãã
-次ã®ãããªã³ãã³ãã§æåã«å©çšå¯èœïŒ
puppet parser validate /etc/puppet/modules/test1/manifests/*
-gem install puppet-lint ã䜿çšããŠãããé«åºŠãª
ã¹ãã«ãã§ãã«ãŒppuppet-lintã
ã€ã³ã¹ããŒã«ã ããã¡ã€ã«ã確èªããŸãïŒåæã«ã-fixã¹ã€ããã䜿çšããŠæ§æãå°ã磚ãããšãã§ããŸãïŒã
puppet-lint --fix /etc/puppet/modules/test1/manifests/*
ããããå®éã«ã¯ãããã«äŸåããªãã§ãã ãããééã£ããããã§ã¹ãåã®ãããªãšã©ãŒãç°¡åã«ã¹ãããã§ããŸãã
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find parent resource type 'test::params' of type hostclass in production at /etc/puppet/modules/test1/manifests/init.pp:1 on node stage.test.net
ç¹°ãè¿ãã«ãªããŸããããã©ã³ã3.8.4ã§ã¢ãžã¥ãŒã«ã³ãŒãã倿ŽããããšãpuppetmasterãµãŒãã¹ãŸãã¯httpdãµãŒãã¹ãåèµ·åããŠãã¢ãžã¥ãŒã«ã®å€æŽãç¡èŠãããªããã¡ã«ããã«é©çšãããããšã«æ³šæããŠãã ããã ä»ã®ããŒãžã§ã³ã§ã¯ãããã衚瀺ãããŸããã ã¢ãžã¥ãŒã«ã®ãã£ãã·ã¥ãæ®ã£ãŠããã®ã§ã¯ãªãããšæãããŸãã
test1ã¢ãžã¥ãŒã«ã®åŒã³åºããããã¹ãããŒã
stage.test.netã® /etc/puppet/manifests/site.ppãã¡ã€ã«ã«è¿œå ããŸãã
node default { } node 'stage.test.net' { include test1 }
ã¯ã©ã€ã¢ã³ãã§ç¢ºèªããŸãã
ãµãŒãã¹ãæ§æããXXïŒéåžžã¯30ïŒåéåŸ
æ©ããŠãããåäœãããŸã§ãã°ã確èªã§ããŸãã ãããŠããã¹ãŠãæåã§å®è¡ã§ããŸãã
[root@stage ~]
ã芧ã®ãšããããã¡ã€ã«ã¯æ£åžžã«äœæãããŸããã 誰ãããã©ã¡ãŒã¿ãŒã®äœ¿çšãã©ãã«è¡ãããšãã§ããããèŠãããªããããã«apacheã®ãµã³ãã«ã¢ãžã¥ãŒã«ããããŸãã
ptestintããã¹ãã®éä¿¡ãã§ãŒã³ïŒ
ãããã§ã¹ã/ site.pp->ã¢ãžã¥ãŒã«/ test1 / init.ppïŒ$ test1 :: params :: text1ïŒ-> fileïŒcontentïŒ$ {text1}ïŒããã§ã/ etc / puppet / manifests / site.ppã®ããã©ã«ã倿°ã倿Žããã«ã¯ã©ãããã°ããã§ããããããã¯åªå
床ãé«ãããã§ãã
node 'stage.test.net' {
ã¯ã©ã€ã¢ã³ãã§ç¢ºèªããŸãã
...
-production-ãã¹ãïŒptestint
\ãã¡ã€ã«ã®æåŸã«æ¹è¡ãªã
+çç£-ãã¹ãïŒnewparam
\ãã¡ã€ã«ã®æåŸã«æ¹è¡ãªã
...
ã芧ã®ãšãããæŽæ°ã¯ããŸããããŸããã
ããã¹ãã®éä¿¡ã®ãã§ãŒã³ã¯newparamã§ãïŒ
ãããã§ã¹ã/ site.ppïŒ$ text1ïŒ->ã¢ãžã¥ãŒã«/ test1 / init.ppïŒtext1ïŒ-> fileïŒã³ã³ãã³ãïŒ$ {text1}ïŒ1ã€ã®ãã£ã¬ã¯ããªã«ãã¹ãŠã®ãããã§ã¹ããäœæããã®ã§ã¯ãªãã
/ test1 / manifests / check / time.ppãšãã圢åŒã§
ãã 1ã€ã®ã¬ãã«ãäœæããå Žåã«ãããã®ãããªãã©ã¡ãŒã¿ãŒã®ä¿åã¯äŸ¿å©ã§ã
ãããŠã次ã®åœ¢åŒã®åŒã³åºããéããŠãã©ãã§ããã®ã¯ã©ã¹ã䜿çšããŸãã
class { '::test1::check::time': }
äŸ3ïŒãã³ãã¬ãŒãã远å ããŸãã
åã®äŸã®ããªã¢ã³ãã®ãã€ãã¹ã¯ã
ã³ã³ãã³ãã« 1è¡ãããªã
ããšã§ã ã ãããã£ãŠããã³ãã¬ãŒãã䜿çšããŠå€§ããªãã¡ã€ã«ãçæããããšããå§ãããŸãã
ãã¹ãã«è¿œå ããŸãã
-ãã¡ã€ã«
/etc/puppet/modules/test1/manifests/usetmpl.pp-ãã³ãã¬ãŒããæäœããããã®æ°ããã¯ã©ã¹
class test1::usetmpl ( $envname = $test1::params::env,
ã³ã³ãã³ãããã¹ããpuppetenv.erbãã³ãã¬ãŒããåŒã³åºãããšã§çœ®ãæããããšã«å ããŠããã¹ãŠãåå¥ã®ã¯ã©ã¹ã«å
¥ããŸãããinit.ppã«2çªç®ã®ãã¡ã€ã«ã远å ããããšãã§ããŸãã
-ãã¡ã€ã«
/etc/puppet/modules/test1/templates/puppetenv.erb-ãžã§ãã¬ãŒã¿ãŒãã³ãã¬ãŒãã
ããã§ã®å€æ°
$ {text1}ã¯ãRuby圢åŒã§
<ïŒ
= @ text1ïŒ
>ãšããŠæž¡ãããŸãã $ envnameã¯params.ppããååŸãããsite.ppã§$ text1ãåå®çŸ©ããåæã«ãã·ã¹ãã ã倿°ã远å ããŸããïŒãããã¯puppetã§ãã¡ã¯ããšåŒã°ããŸãïŒ<ïŒ
=
hostname ïŒ
>
ã¯ã©ã€ã¢ã³ãã§ç¢ºèªããŸãã
[root@stage ~]
çµæïŒ
[root@stage ~]
ããã¹ãparam_tmplã®ãªã³ã¯ãã§ãŒã³ïŒ
manifests / site.ppïŒ$ text1ïŒ-> modules / test1 / init.pp :: usetmplïŒ$ text1ïŒ-> fileïŒcontentïŒpuppetenv.erbïŒ<ïŒ
= @ text1ïŒ
>ïŒïŒïŒäŸ4ïŒHieraãŸãã¯ããã«éäžå
1ã10å°ã®ãµãŒããŒã§äœæ¥ããå¿
èŠãããå Žåã¯ãéåžžã®ã¢ãžã¥ãŒã«ã§ååã§ãããããã«å€ãã®ã¢ãžã¥ãŒã«ãããå Žåãããã«åã¢ãžã¥ãŒã«ãç¬èªã®æ¹æ³ã§æ§æãããŠãããµãã¯ã©ã¹ã¿ãŒã«åå²ãããšããã©ã¡ãŒã¿ãŒããèšåŒµããsite.ppã¢ãžã¥ãŒã«ã§æ··ä¹±ããããåãååã®ã¢ãžã¥ãŒã«ãšãã®ããŒãžã§ã³ã ããã«æ·±ããHieraãã»ããã¢ããããŸãã
Hieraã¯Rubyã©ã€ãã©ãªã§ãããããã©ã«ãã§Puppetã«å«ãŸããŠããããã¹ãŠã®ã¢ãžã¥ãŒã«ã®ããŒã¿ãåäžã®ãã£ã¬ã¯ããªã«æŽçããã®ã«åœ¹ç«ã¡ãŸãã
ã¹ãã¬ãŒãžãéçšããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã
-ãã®ã¿ã€ãã«é¢ãã
/etc/puppet/hiera.yamlãã¡ã€ã«ãäœæããŸãã
:hierarchy: - "%{::clientcert}" - "%{::custom_location}" - "nodes/%{::fqdn}" - "nodes/%{::environment}" - "virtual/%{::virtual}" - common - "%{::environment}" :backends: - yaml :yaml: :datadir: "/etc/puppet/hieradata"
ããã§ã¯ããã€ãã£ããã¡ã€ã«/etc/hiera.yamlã®åªå
床ã®åœ¢åŒã§ã·ã¹ãã ããã®ãã©ãã·ã¥ãåŸ
ã£ãŠããŸã
ã€ãŸããã·ã³ããªãã¯ãªã³ã¯/etc/hiera.yaml-> /etc/puppet/hiera.yamlã«çœ®ãæããå¿
èŠããããŸã
-ãã©ã«ããŒ
/ etc / puppet / hieradataãäœæããŸãïŒååãæå®ããŠãdatadirã§æå®ã§ããŸãïŒ
ãã®ãã©ã«ããŒå
ã®ãã¡ã€ã«ã«ã¯ãæ¡åŒµå.yamlãšããŒã¿åœ¢åŒYAMLãå¿
èŠã§ãã
-ãã¡ã€ã«
/etc/puppet/hiera/common.yamlãäœæããŸã
ããšãã°ãããã§ã¯ããã¹ãŠã®ããŒãã§äœ¿çšå¯èœãª2çªç®ã®ãã¹ããã©ã¡ãŒã¿ãŒãèšè¿°ã§ããŸã
test::text2: common-hiera
ãã£ã¬ã¯ããª
ãnodes /ïŒ
{:: fqdn}ããããŒããã©ã¡ãŒã¿ãŒã®ã¹ãã¬ãŒãžãã€ã³ããšããŠæå®ããããããã¹ãããŒãçšã«ãã¡ã€ã«
/etc/puppet/hiera/nodes/stage.test.net.yamlãäœæããŸãã ããã§ã3çªç®ã®ãã¹ããã©ã¡ãŒã¿ãŒãšããã©ã¡ãŒã¿ãŒãšå¥ã®é
åãããå°ããªé
åãèšå®ã§ããŸãã
testparam::text3: 'node stage hiera' arrexmpl::colors: bw: "B&W" rgb: - red - blue - green
ãããã°ã¢ãŒããšã·ã³ãã«ã¢ãŒãã§ã³ãã³ãã©ã€ã³ãããã©ã¡ãŒã¿ãŒã®å¯çšæ§ã確èªããïŒ
[root@pmaster /etc]
次ã«ããããããã©ã¡ãŒã¿ãŒã«ä¿åãããã³ãã¬ãŒãã§äœ¿çšããå¿
èŠããããŸãã
/etc/puppet/modules/test1/manifests/params.pp class test1::params {
/etc/puppet/modules/test1/manifests/usetmpl.pp class test1::usetmpl ( $envname = $test1::params::env, $text1 = $test1::params::text1, $text2 = $test1::params::text2,
/etc/puppet/modules/test1/templates/hieratst.erb
ã¯ã©ã€ã¢ã³ãã§ç¢ºèªããŸãã
[root@stage ~]
äŸ5ïŒR10KãŸãã¯ããã«éäžå
å®éããµãŒããŒã®ã¹ã³ã¢ãæ°äžã«éãããšãããããç°å¢ã«åå²ããæ¹ãå®å
šã«ãªããŸãã ãã³ã§ãããè¡ãããšãã§ããŸãããR10Kã䜿çšããããšããå§ãããŸããR10Kã䜿çšãããšãå人èšå®ã«ä¿åãããŠããã¢ãžã¥ãŒã«ã䜿çšããŠåå¥ã®æ§æãå®è¡ã§ããŸãã ã€ãŸããæ¬è³ªçã«ãåäžã®å·šå€§ãªsite.ppããã®æ§æããªãŒã«çœ®ãæããŸãã
ç§ã¯ãã¹ããè¡ããŸãããäŸãšããŠäœæ¥æ§æã䜿çšããŠããã®ãããªèšå®ã®æ¡ä»¶ä»ãã¢ã«ãŽãªãºã ãæäŸããŸãã
-ãµãŒããŒã¯æ§æã°ã«ãŒãã«åå²ããã
/ etc / puppet / environmentsã®åå¥ã®ãã£ã¬ã¯ããªã«ä¿åãã
ãŸãããšãã°ããµãŒããŒã°ã«ãŒã
test_devopsã§ã¬ã·ãããã¹ãããŸã
ããšã©ããªãŒ-git / bitbucketã«ä¿å
-ãã¹ã¿ãŒãµãŒããŒãžã®å€æŽã®é©çšãæŽæ°ããåŸåããã
-hiera.yamlã§è¿œå ïŒéå±€ïŒ
- %{environment}/%{role}/%{calling_module} - %{environment}/%{role} - %{role} - %{environment}/%{environment}
-ãã©ã¡ãŒã¿ã¯æ¡ä»¶ä»ãã§ãã¡ã€ã«ã«ä¿åãããŸã
/ etc / puppet / hieradata / test_devops /
test_devops.yaml -R10Kã®è¿œå ã©ãã«ãä»ãããã¹ãŠã®ããŒã
classes: - roles::base
/ etc / puppet / hieradata / test_devops /
stage.test.net.yaml for the server plus you need the label for R10K
classes: - roles::stagesrv::test
R10Kãä»ããtest_devopsã®ã¢ãžã¥ãŒã«ã¹ã¿ãŒãã¢ããã®èšå®-stage.test.netããŒãã§ã/ etc / puppet /
puppet.confãã¡ã€ã«ã«è¡ã远å ããŸã
environment = stage_nbc210
-
/ etc / puppet / environments / test_devops / Puppetfile-䜿çšããããã¹ãŠã®ã¢ãžã¥ãŒã«ã¯ããã«ä¿åãããŸãã
èšé²äŸ
mod 'saz/sudo', '3.0.1' mod 'stdlib', :git => 'git://github.com/puppetlabs/puppetlabs-stdlib.git', :ref => '4.1.0' mod 'test1', :git => 'git://github.com/fake_link/test1.git', :ref => 'master'
ãããã¯ã次ã®ãããªã³ãã³ãã䜿çšããŠã³ã³ãœãŒã«ã§ããŠã³ããŒã/æŽæ°ãããŸã
sudo r10k deploy module test1 -e test_devops
/ etc / puppet / environment / test_devops / modules / test1-ã¢ãžã¥ãŒã«ãèœã¡ãå Žæ
-
/ etc / puppet / environment / test_devops / dist / profiles / manifests / -ã¢ãžã¥ãŒã«ãèµ·åããããã®ãããã§ã¹ãããªãŒã ãã¡ã€ã«åã¯ã¢ãžã¥ãŒã«åãšäžèŽããŠã¯ãªããŸã
ã ã
ããã«runtest1.ppã®ãããªãã¡ã€ã«ãäœæããŸã
class profiles::runtest1{ class { 'test1': text1 => 'newparam', }
ã芧ã®ãšãããããŒãã¯è¡šç€ºãããªããªããŸããã ä»ã®ããŒãã«ä»ã®ãã©ã¡ãŒã¿ãŒãå¿
èŠãªå Žåã¯ãruntest2.ppãªã©ãäœæã§ããŸãã远å ã®ã¬ãã«ããµããŒããããŠããŸãã ããšãã°ããã¡ã€ã«/etc/puppet/environments/test_devops/dist/profiles/manifests/ver2/runtest3.ppãäœæã§ããŸã
class profiles::ver2::runtest3 class { 'test1': text1 => 'newparam v2', } }
-次ã«ããããã§ã¹ãèµ·åã¢ãžã¥ãŒã«ãããŒãã«ãã€ã³ãããå¿
èŠããããŸãã
/etc/puppet/environments/test_devops/dist/roles/manifests/init.pp class roles { } class roles::base inherits roles { include profiles::base } class roles::private inherits roles { include profiles::private } class roles::public inherits roles { include profiles::public } class roles::stagesrv::test {
-å®éã«ã¯ããã¥ãŒãã³ã°çµæã®ãã³ãããããŸãã
sudo r10k deploy environment test_devops
ãããŠãèªåå®è¡ããŒãã«é©çšãããããpuppet agent --testã䜿çšããŠæåã§ãã¹ãã§ããŸã
ããã ãã§ãã ãããŸã§èªãã§ãããŠããããšãã
ãã®èšäºã«å«ããããšæã人ããã®ãã®ä»ã®ããŒãžã§ã³ã®ã¢ããªã³ãŸãã¯ãªãã·ã§ã³ã
ã¯ãã¯ããã¯ãæŽçããããã®å®å
šã«ç°ãªãã¢ã«ãŽãªãºã -ãã¢ãžã¥ãŒã«ããšã¬ã·ãã§ã®ããã¯ãªãŒã³ãªRuby-ããããã§ã¹ããããããããã·ã§ãã¯ã©ã€ã¢ã³ããµãŒããŒ/ã·ã§ã+ berkshelf /ã·ã§ã+ AWS Opsworkã®äœ¿çšçµéšãšæ¯èŒããŸããã
远å ã®ããã¯ïŒ
1. Puppetã³ãŒãã®ãã€ã¯ããµã³ãã«ã«ããã
2.
Hieraã®ç޹ä»
3.
R10Kã®å°ã