![](https://habrastorage.org/files/89d/af3/365/89daf3365e114253a0824d4651683504.png)
ãã®èšäºã¯ãPuppetã䜿çšããŠå€§èŠæš¡ãªã€ã³ãã©ã¹ãã©ã¯ãã£ã管çããåé¡ã«ã€ããŠã®ç§ã®ããžã§ã³ã瀺ããã3ã€ã®èšäºã®æåã®èšäºã§ãã æåã®éšåã¯ã匷åãªé局線æããŒã«Puppet Hieraã®çŽ¹ä»ã§ãã ãã®èšäºã¯ããã§ã«Pappetã«ç²ŸéããŠããããHieraã«ã¯ãŸã 粟éããŠããªã人ã察象ãšããŠããŸãã ãã®äžã§ããã®åŒ·åãªããŒã«ãšããããå€æ°ã®ãµãŒããŒã®ç®¡çã容æã«ããæ¹æ³ã«ã€ããŠã®åºæ¬çãªç¥èãæäŸããããšããŸãã
ããããã Puppetã䜿çšããŠå€§èŠæš¡ãªã€ã³ãã©ã¹ãã©ã¯ãã£ã管çããã®ã¯ç°¡åãªããšã§ã¯ãªãããšããåãã§ãããã 10å°ã®ãµãŒããŒã§Pappetãå¿ èŠãªãå Žåã50ã®å Žåãå¿ èŠã«å¿ããŠã³ãŒããèšè¿°ã§ããŸãã500å°ä»¥äžã®ãµãŒããŒã®å Žåã¯ããã®å Žåãäœæ¥ã®æé©åãçå£ã«æ€èšããå¿ èŠããããŸãã Pappetãåœåã¯å€§èŠæš¡ãªã€ã³ãã©ã¹ãã©ã¯ãã£ã®ãœãªã¥ãŒã·ã§ã³ãèããŠããªãã£ãããã«æãããŸããå°ãªããšããã®äžã®éå±€ã¯æåã¯éåžžã«ã²ã©ãã¬ã€ã¢ãŠããããŠããŸããã æšæºããŒãã®å®çŸ©ã¯ ã倧äŒæ¥ã§ã¯ãŸã£ããé©çšã§ããŸãã ã ããŒãã®ç¶æ¿ ïŒããã³ã¯ã©ã¹ã®ç¶æ¿ ïŒã¯Puppetlabsã«ã¯ãŸã£ãããå§ãã§ããŸããã代ããã«ãHieraãExternal Node Classifier ïŒENCïŒãªã©ã®å€éšãœãŒã¹ããéå±€ããŒã¿ãããŒãããããšããå§ãããŸãã
æåã¯ENCã®æŠå¿µã¯Hieraãšããã»ã©å€ãããªããšããäºå®ã«ãããããããäœããã®çç±ã§ã Puppet DashboardãForemanãªã©ã®ç¹å®ã®ENCå®è£ ãããŸã奜ãã§ã¯ãããŸããã çç±ã説æããŸãã
1ïŒã€ã³ãã©ã¹ãã©ã¯ãã£ã«é¢ããããŒã¿ã¯ãã¢ããªã±ãŒã·ã§ã³ããŒã¿ããŒã¹ã®ã©ããã«ãããŸãã ã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããå Žåã«ããããã©ã®ããã«ååŸããã®ã§ããïŒ ç¥ããŸãã æšæž¬ããããšã¯ã§ããŸããã確ããªããšã¯ããããŸããã
2ïŒåŒ·åãªENCã¯ããã®èœåã®ããã«æ¡åŒµãé£ãããå°é£ã§ãã å¯Ÿç §çã«ãHieraã¯åœŒã®ãã¹ãŠã®ããŒã¿ãããã¹ã圢åŒã§ä¿åããŸãã ããã¹ãããŒã¿ã¯ããã®ãããªå¿ èŠãçããå Žåãè€æ°ã®Pappetãã¹ã¿ãŒéã§gitãšr10kã䜿çšããŠéåžžã«ç°¡åã«åæã§ããŸãã äžè¬çã«ãããã¹ãæ§æã¯ãæãªããã®é³ã«é¢ä¿ãªããUNIXã®æ¹æ³ã§ãã
ç¹°ãè¿ããŸãããç£èŠããã³ã¬ããŒãããŒã«ãšããŠã®Puppet Dashboardããã³Foremanã®å¯èœæ§ãæåŠããŸããã ã°ã©ããšç»åãåããçŸããWebã€ã³ã¿ãŒãã§ãŒã¹ãå¿ èŠã§ãããããã¯è¡šç€ºã®æ段ãšããŠã®ã¿ã§ãããã€ã³ãã©ã¹ãã©ã¯ãã£ã®æ§æãå€æŽããæ段ãšããŠã§ã¯ãããŸããã ãŸããForemanã¯Pappet以å€ã«ãå€ãã®ããšãã§ããããšãç¥ã£ãŠããŸãïŒ Red Hat Satellite Server 6ããã³ForemanããŒã¹ã®Katelloãããžã§ã¯ãã代衚çãªäŸã§ãïŒã ããã§ããªããç§ã¯Hieraã€ã³ãã©ã¹ãã©ã¯ãã£å šäœã®æ§æã®ä¿ç®¡å Žæã奜ãã§ãã
ããšã©ãšã¯ïŒ ããã¯Rubyã©ã€ãã©ãªã§ãããããã©ã«ãã§Pappetã«å«ãŸããŠãããPappetã§ã®ããŒã¿ã®æŽçã«åœ¹ç«ã¡ãŸãã ãããªãã§è¡ãããšã¯å¯èœã§ããïŒ ã§ããŸãã ãããã§ã¹ãã«ãã¹ãŠã®æ°å€ãšãã©ã¡ãŒã¿ãŒãæžã蟌ãããšãã§ããŸããããã®åŸãéçºã®ç¹å®ã®æ®µéããå®å šã«æããããªããäœãä¿åãããäœãåå ã§ããããèŠããã®ããŸããŸãé£ãããªããŸãã
Hieraã䜿çšããã¡ãªããã¯äœã§ããïŒ ã€ã³ãã©ã¹ãã©ã¯ãã£ã«å®éã«é©çšããPappetã³ãŒããããã€ã³ãã©ã¹ãã©ã¯ãã£ã®ç¹å®ã®ãã©ã¡ãŒã¿ãŒïŒãŠãŒã¶ãŒuidãsshããŒãdnsèšå®ãããããçš®é¡ã®éäžãã¡ã€ã«ãªã©ïŒãåé¢ãå§ããŸãã ããã«ãããããæ¥ããã®ãããªãµãŒããŒãŸãã¯ãµãŒããŒã®ã°ã«ãŒãäžã®ç¹å®ã®ãŠãŒã¶ãŒã®ã©ã®UIDãèŠã€ããå¿ èŠãããå Žåããã®æ å ±ãã©ãã«ä¿åãããŠããããããã«ããããŸããé©åãªãŠãŒã¶ãŒãæ¢ããŠãUIDã®å€æŽãããããã«ã€ãªããããšãäºæž¬ããŠã¿ãŠãã ããã ãã¡ãããããšã©ã®å¥è·¡ãæåŸ ããã¹ãã§ã¯ãããŸããã çµå±ã®ãšãããããã¯ããŒã¿ãä¿åããã³æŽçããããã®åãªãæ¹æ³ã§ãã
ããããååãªæè©ã¯ ãããžãã¹ã«åãæãããŸããã ã HieraïŒéå±€ããïŒã¯éå±€ã§åäœããŸãã ãããŠã/ etc / puppet / hiera.yamlã«æ¬¡ã®éå±€ãæžããŸããã
:hierarchy: - "%{::environment}/nodes/%{::fqdn}" - "%{::environment}/roles" - "%{::environment}/%{::environment}" - common :backends: - yaml :yaml: :datadir: '/etc/puppet/hiera'
ãã®éå±€ãèŠããŠãããŠãã ãããå°æ¥çã«ã¯ç©æ¥µçã«äœ¿çšããŸãã
Hieraã«ããŸã詳ãããªã人ã®ããã«èª¬æããŸãã ã/ etc / puppet / hieraããã©ã«ããŒãHieraããŒã¿ã¹ãã¢ãšããŠèšå®ããŸãã ãã®ãã©ã«ããŒå ã®ãã¡ã€ã«ã«ã¯ãæ¡åŒµå.yamlãšããŒã¿åœ¢åŒYAMLãå¿ èŠã§ãã 次ã«ãHieraããã©ã«ããŒã«è¡šç€ºãããã¡ã€ã«åãèšå®ããŸãã Hieraã¯Pappetã®ã³ãŒãããåŒã³åºãããããã ãã¡ã¯ããå«ããPappetãšåãå€æ°ã䜿çšã§ããŸãã åããŒãã®çµã¿èŸŒã¿ãã¡ã¯ãã¯ãã®ç°å¢ã§ãããHieraã§å€æ°ïŒ {:: environment}ãšããŠäœ¿çšã§ããŸãã Hieraã®ããŒãã®FQDNã¯ãäºæ³ã©ããïŒ {:: fqdn}ã®ããã«èŠããŸãã ãããã£ãŠããã®éå±€ã¯åæ§ã®ãã¡ã€ã«æ§é ã«å¯Ÿå¿ããŠããŸãã
/ etc / puppet / hiera /
|-common.yaml
|-ãããã¯ã·ã§ã³/
| ----- production.yaml
| ----- roles.yaml
| -----ããŒã/
| -------- prod-node1.yaml
| -------- prod-node2.yaml
|-éçº/
| ----- development.yaml
| ----- roles.yaml
| -----ããŒã/
| -------- dev-node1.yaml
| -------- dev-node2.yaml
hiera.yamlã®ã¬ãã«ã®é åºïŒãã¡ã€ã«æ§é ã§ã¯ãªãïŒãéèŠã§ãã Hieraã¯äžããäžãžãã©ãŠãžã³ã°ãéå§ããããã¯ãã¹ãŠãPappetãããã§ã¹ãã§äœ¿çšããHieraã®åŒã³åºãæ¹æ³ã«äŸåããŸãã 3ã€ã®æ¹æ³ããããŸãããäŸãæããŠèª¬æããŸãã äžèšã®hiera.yamlãã¡ã€ã«ã§éå±€ãèšè¿°ãã次ã®å 容ã®3ã€ã®ãã¡ã€ã«ãäœæããŸãã
/etc/puppet/hiera/common.yaml
ã¯ã©ã¹ïŒ -common_class1 -common_class2 圹å²ïŒ common_role1ïŒ key1ïŒvalue1 key2ïŒvalue2 å ±éïŒcommon_value
/etc/puppet/hiera/production/production.yaml
ã¯ã©ã¹ïŒ -production_class1 -production_class2 圹å²ïŒ production_role1ïŒ key1ïŒvalue1 key2ïŒvalue2 çç£ïŒproduction_value
/etc/puppet/hiera/production/nodes/testnode.yaml
ã¯ã©ã¹ïŒ -node_class1 -node_class2 圹å²ïŒ node_role1ïŒ key1ïŒvalue1 key2ïŒvalue2 ããŒãïŒnode_value
Hieraã¯ã³ãã³ãã©ã€ã³ã¯ãšãªããµããŒãããŠããŸãã å®éãæäœã®åçãç解ããæãç°¡åãªæ¹æ³ã¯ã³ã³ãœãŒã«ããã§ãã Hieraã¯ããã©ã«ãã§ãã®èšå®ã/etc/hiera.yamlã«ä¿æããŸãã ãã®ãã¡ã€ã«ã/etc/puppet/hiera.yamlãžã®ã·ã³ããªãã¯ãªã³ã¯ã«ããå¿ èŠããããŸãã ãã®åŸãç°¡åãªåŒã³åºããè¡ããŸãã
[root@testnode]# hiera classes ["common_class1", "common_class2"]
ãã®ãªã¯ãšã¹ãã§ã¯ç°å¢ã«é¢ããæ
å ±ãæäŸããªãã£ããããHieraã®fqdnã¯éå±€ã®æäžäœã¬ãã«ã§ããcommon.yamlãã¡ã€ã«ããããŒã¿ãååŸããŸãã é
åèŠçŽ ã¯è§æ¬åŒ§å
ã«è¡šç€ºãããŸãã ç°å¢ã«é¢ããããŒã¿ãæäŸããŠã¿ãŸãããã [root@testnode]# hiera classes ::environment=production ["production_class1", "production_class2"] [root@testnode]# hiera classes ::environment=production ::fqdn=testnode ["node_class1", "node_class2"]
production.yamlããã®ããŒã¿ã¯éå±€å
ã§ããé«ãããããããã¯ããåªå
ãããcommon.yamlããåä¿¡ããããŒã¿ãäžæžãããŸãã åæ§ã«ãtestnode.yamlã®ããŒã¿ã¯production.yamlã®ããŒã¿ãäžæžãããŸãã ãã ããäžäœéå±€ã«ããŒã¿ããªãå Žåãè«ççãªæ¹æ³ã§ããŒã¿ã¯äžäœéå±€ããååŸãããŸãã
[root@testnode]# hiera common ::environment=production common_value [root@testnode]# hiera production ::environment=production ::fqdn=testnode production_value
ãã®å Žåãäžèšã®ãã¡ã€ã«ã«åŸã£ãŠãé
åã§ã¯ãªãæååãè¿ãããŸãã
ãã®ã¿ã€ãã®èŠæ±ã¯ã åªå é äœæ€çŽ¢ãšåŒã°ããŸã ã ã芧ã®ãšãããåžžã«éå±€å ã§èŠã€ãã£ãæåã®å€ïŒæãé«ãåªå 床ãæã€ïŒãè¿ãããã®åŸãåºç€ãšãªãéå±€ã調ã¹ãã«çµäºããŸãã Pappetã§ã¯ãæšæºã®hieraïŒïŒé¢æ°ãããã«å¯Ÿå¿ããŸãã ãã®äŸã§ã¯ãããã¯hieraïŒãã¯ã©ã¹ãïŒã®åŒã³åºãã«ãªããŸãã Pappetã¯åžžã«ã³ã³ããã¹ãå€ã§HieraãåŒã³åºããããã¯ãšãªè¡ã§ä»ã®äœããæå®ããå¿ èŠã¯ãããŸããã
次ã®ã¿ã€ãã®ãªã¯ãšã¹ãã¯ã Array mergeã§ãã ç§ãã¡ã¯èŠãŸãïŒ
[root@testnode]# hiera --array classes ["common_class1", "common_class2"] [root@testnode]# hiera --array classes ::environment=production ["production_class1", "production_class2", "common_class1", "common_class2"] [root@testnode]# hiera --array classes ::environment=production ::fqdn=testnode ["node_class1", "node_class2", "production_class1", "production_class2", "common_class1", "common_class2"]
ãã®ã¿ã€ãã®ã¯ãšãªã¯ãéå±€ã®ãã¹ãŠã®ã¬ãã«ãééããæ€åºããããã¹ãŠã®å€ïŒæååãšé
åïŒã1ã€ã®å€§ããªåäžé
åã«åéããŸãã Pappetã®çšèªã§ã¯ããã®ã¯ãšãªã¯hiera_arrayïŒïŒãšåŒã°ããŸãã ãã ãããã®ã¿ã€ãã®ãªã¯ãšã¹ãã¯ããã·ã¥ãåéã§ããŸããã ããã»ãŒãžäžã«ããã·ã¥ã«ééãããšããšã©ãŒãã¹ããŒãããŸãã
[root@testnode]# hiera --array roles /usr/share/ruby/vendor_ruby/hiera/backend/yaml_backend.rb:38:in `block in lookup': Hiera type mismatch: expected Array and got Hash (Exception)
åæ§ã®ç¶æ³ã§ã¯ãåªå
é äœã®ã«ãã¯ã¢ããã¯ããŸããããããã·ã¥ãïŒäžæ¬åŒ§ã§ïŒè¿ããŸãïŒ
[root@testnode]# hiera roles {"common_role1"=>{"key1"=>"value1", "key2"=>"value2"}}
ããã·ã¥ãåéããå¿ èŠãããå Žåã¯ã©ããªããŸããïŒ 3çªç®ã®ã¿ã€ãã®ãªã¯ãšã¹ãã䜿çšããŸãïŒ Hash merge ïŒ
[root@testnode]# hiera --hash roles {"common_role1"=>{"key1"=>"value1", "key2"=>"value2"}} [root@testnode]# hiera --hash roles ::environment=production {"common_role1"=>{"key1"=>"value1", "key2"=>"value2"}, "production_role1"=>{"key1"=>"value1", "key2"=>"value2"}} [root@testnode]# hiera --hash roles ::environment=production ::fqdn=testnode {"common_role1"=>{"key1"=>"value1", "key2"=>"value2"}, "production_role1"=>{"key1"=>"value1", "key2"=>"value2"}, "node_role1"=>{"key1"=>"value1", "key2"=>"value2"}}
ãã®èŠæ±ã¯ãåã®èŠæ±ãšåæ§ã«ãéå±€ã®ãã¹ãŠã®ã¬ãã«ãééãããã¹ãŠã®ããã·ã¥ã1ã€ã®å€§ããªå
±éããã·ã¥ã«åéããŸãã é
åãŸãã¯æååãåéããããšãããšããšã©ãŒãè¿ããããšæšæž¬ããã®ã¯ç°¡åã§ãã
[root@testnode]# hiera --hash classes /usr/share/ruby/vendor_ruby/hiera/backend/yaml_backend.rb:42:in `block in lookup': Hiera type mismatch: expected Hash and got Array (Exception)
Pappetã§ã¯ããã®ãªã¯ãšã¹ãã¯hiera_hashïŒïŒãšåŒã°ããŸãã åãéå±€ã¬ãã«ã§ãåãããã·ã¥ã«ç°ãªããããŒ=>å€ãã®ã»ãããããå Žåã¯ã©ããªããŸããïŒ ããšãã°ãå
±éã¬ãã«ã®ãŠãŒã¶ãŒãã¹ãã«ã¯UID = 100ããããããŒãã¬ãã«ã§ã¯testnodeã«UID = 200ããããŸããïŒ ãã®å Žåãç¹å®ã®ããŒããšã«ãããã·ã¥ã«ãã¯ã¢ããã¯åªå
床ã«ãã¯ã¢ããã®ããã«åäœããŸããã€ãŸããããé«ãåªå
床å€ãè¿ããŸãã 詳现ã«ã€ããŠã¯ãã¡ããã芧ãã ãã ã
ããŠãã¯ãŒã« ïŒ ãŸãããã㧠ã¯ãªã ïŒã§ããããªãããããã¹ãŠå¿ èŠãªã®ã§ããããïŒ
Pappetã¯èªåçã« ïŒããŒãžã§ã³3.xã§ã¯ãã®ããã«äœãèšå®ããå¿ èŠãããããŸããïŒåœŒã䜿çšã§ãããã©ã¡ãŒã¿ãŒãHieraã§ã¹ãã£ã³ããŸãã
ããããã Pappetã®ãµã€ãããå°ãå€æŽããåçŽãªäŸã§ã ïŒã¡ãªã¿ã«ããã®äŸã§ã¯å»æ¢ãããntp :: autoupdateããã³ntp :: enableãã©ã¡ãŒã¿ãŒã瀺ããŠããŸããçŸåšã®ååã¯ä»¥äžã«ãããŸãïŒã é·ãéèŠããã§ããpuppetlabs-ntpã¢ãžã¥ãŒã«ãèŠãããŸãã Pappetã§æ¬¡ã®ntpèšå®ãè¡šçŸããããšããŸãïŒ
/etc/ntp.conf
ããããåããããã¯0
restrictããã©ã«ããå¶éããkod nomodify notrap nopeer noquery
restrict restrict -6ããã©ã«ãkod nomodify notrap nopeer noquery
å¶éãã127.0.0.1
å¶éãã-6 :: 1
ãµãŒããŒ0.pool.ntp.org iburst burst
ãµãŒããŒ1.pool.ntp.org iburst burst
ãµãŒããŒ2.pool.ntp.org iburst burst
ãµãŒããŒ3.pool.ntp.org iburst burst
driftfile / var / lib / ntp /ããªãã
restrictããã©ã«ããå¶éããkod nomodify notrap nopeer noquery
restrict restrict -6ããã©ã«ãkod nomodify notrap nopeer noquery
å¶éãã127.0.0.1
å¶éãã-6 :: 1
ãµãŒããŒ0.pool.ntp.org iburst burst
ãµãŒããŒ1.pool.ntp.org iburst burst
ãµãŒããŒ2.pool.ntp.org iburst burst
ãµãŒããŒ3.pool.ntp.org iburst burst
driftfile / var / lib / ntp /ããªãã
ãããè¡ãã«ã¯ãHierã®common.yamlã«æ¬¡ã®è¡ãè¿œå ããŸãã
classes: - ntp ntp::restrict: - restrict default kod nomodify notrap nopeer noquery - restrict -6 default kod nomodify notrap nopeer noquery - restrict 127.0.0.1 - restrict -6 ::1 ntp::service_ensure: running ntp::service_enable: true ntp::servers: - 0.pool.ntp.org iburst burst - 1.pool.ntp.org iburst burst - 2.pool.ntp.org iburst burst - 3.pool.ntp.org iburst burst
ã¯ã©ã¹ãåŒã³åºããããšãã«ã¯ã©ã¹ã«æž¡ãããntpã¯ã©ã¹å€æ°ã®ç¹å®ã®å€ããããã«åçŽã«ãªã¹ããããŠããããšãç°¡åã«ããããŸãã ãããã®å€æ°ã¯ãntpã¯ã©ã¹ã®ããããŒã§å®£èšãããŠããŸãïŒãã¡ã€ã«ã¢ãžã¥ãŒã«/ ntp / manifests / init.ppïŒã Hieraããã¯ã©ã¹ã«ãã©ã¡ãŒã¿ãŒãæž¡ããã®æ¹æ³ã§ã¯ãPappetãç®çã®ã¹ã³ãŒã ïŒã¹ã³ãŒãïŒã«æ£ããããŒãããããã«ã å®å
šä¿®é£Ÿå€æ°åã䜿çšããããšã絶察ã«å¿
èŠã§ãã
ããšã¯ãç°å¢ã®ã¡ã€ã³Pappetãããã§ã¹ãïŒsite.ppïŒã«1è¡è¿œå ããã ãã§ãã
hiera_include('classes')
ãã®ã©ã€ã³ã¯ããã®ã·ã³ãã«ããšç°¡æœãã«ãããããããèå°è£ã§å€ãã®äœæ¥ãè¡ããŸãã ãŸããPappetã¯Hieraã®ãã¹ãŠã®ïŒïŒïŒéå±€ã調ã¹ãHieraã®ã¯ã©ã¹ã® ãã¹ãŠã®ã»ã¯ã·ã§ã³ã§å®£èšãããŠãããã¹ãŠã®ã¯ã©ã¹ãèªã¿èŸŒã¿ãŸãã ãã®åŸãPappetã¯Hieraã®ãã¹ãŠã®å®å
šä¿®é£Ÿå€æ°ã調ã¹ãŠã察å¿ããã¯ã©ã¹ã®ã¹ã³ãŒãã«ããŒãããŸãã ã¯ã©ã¹ãªã¹ãããntpã¯ã©ã¹ãåé€ããŠããYAMLãã¡ã€ã«ã§ãã®ã¯ã©ã¹ã®å€æ°ãåé€ãå¿ãããšãPappetã¯ã宣èšãããã¯ã©ã¹ntpãèŠã€ããããšãã§ããŸããããªã©ã®ãšã©ãŒãã¹ããŒããŸãã ããŒããããã¯ã©ã¹ããªããšããã®å€æ°ã¯ãã¹ãŠã®æå³ã倱ããŸãã
ããã§ãHieraã®YAMLãã¡ã€ã«å ã®åèªã¯ã©ã¹ïŒä»ã®ãã¹ãŠã®äººãšåæ§ïŒã«ã¯ãç¹å¥ãªæå³ãäºçŽãããæå³ã¯ãããŸããã ã¯ã©ã¹ã®ä»£ããã«ãproduction_classesãmy_classesãmy-ïŒ {:: environment}ãªã©ã®ä»ã®åèªãæžãããšãã§ããŸãã ã¯ããåŸè ãåæ§ã§ããPappet å€æ°ã¯Hieraã»ã¯ã·ã§ã³ãšããã·ã¥ããŒã®ååã§ã䜿çšã§ããŸãã æååå€æ°ãé åãšåæ§ã«ãããã·ã¥å€ã§å€æ°ã䜿çšããããšã¯ã§ããŸãããæã«ã¯æ®å¿µã§ãïŒ
ãããã£ãŠãHieraéå±€ã®Pappetã®ãããã§ã¹ãããntpãµãŒãã¹ãã©ã¡ãŒã¿ãå¹æçã«åé€ããŸããã ããã§ãèšäºã®åé ã§èª¬æããéå±€ã«åŸã£ãŠããããã®ntpãã©ã¡ãŒã¿ãŒãã€ã³ãã©ã¹ãã©ã¯ãã£å ã®ãã¹ãŠã®ããŒãã«å®å šã«é©çšãããŸãã ããããç°å¢ã®ããé«ãã¬ãã«ãŸãã¯ç¹å®ã®ãµãŒããŒã®ã¬ãã«ã§ãããã®ãã©ã¡ãŒã¿ãŒãåå®çŸ©ããå Žåã¯ãå¿ èŠãªéå±€ã®ã¬ãã«ã§å¿ èŠãªå€æ°ã®å€ãæå®ããããšã§ç°¡åã«ãããè¡ãããšãã§ããŸãã
å®éãHieraããPappetã«ããŒã¿ãèªåçã«ã€ã³ããŒããããã®æ¹æ³ãå¯äžã®æ¹æ³ã§ã¯ãããŸããã
é衚瀺ã®ããã¹ã
![ç»å](https://habrastorage.org/getpro/habr/post_images/ac2/057/0de/ac20570deeffc2c63339243b31b5b2e5.jpg)
åã®æ¹æ³ã«ã¯1ã€ã®é倧ãªæ¬ ç¹ããããŸããããã¯ããŸãã«ãèªååãããŠããŸãã åçŽãªæ§æã§ãã®åäœãç°¡åã«äºæž¬ã§ããå Žåãå€æ°ã®ãã¹ãã®å Žåãã€ã³ããŒããããã¯ã©ã¹ã®ãªã¹ãã«å¥ã®ã¯ã©ã¹ãè¿œå ããçµæã確å®ã«äŒããããšãåžžã«å¯èœãšã¯éããŸããã ããšãã°ã puppetlabs-apacheã¢ãžã¥ãŒã«ã䜿çšããŠãç¹å®ã®Apacheæ§æãããã€ãã®ããŒãã«è¿œå ã§ããŸãã ç¡å®³ãªãã¬ãŒãºãå«ããå Žå
classes: - apache
production.yamlãã¡ã€ã«ã«è¿œå ãããšããã¹ãŠã®æ¬çªãã¹ãã§Apacheã®ã€ã³ã¹ããŒã«ãèšå®ãèµ·åãè¡ãããŸãã ããã«ãapacheã¢ãžã¥ãŒã«ã¯ã 以åã«èšå®ãããŠãã以åã® Apache èšå®å
šäœãæ¶å»ããŸãã
é衚瀺ã®ããã¹ã
![ç»å](https://habrastorage.org/getpro/habr/post_images/c29/cca/a60/c29ccaa605ad0f9d80004303d0cc930d.jpg)
ããããã®ãããªæ¥œããããã©ã«ãã®åäœã§ãïŒ ãã®ãããããã¥ã¡ã³ããèªãŸãªããã°ãåçŽãªãinclude apacheãã¯é«äŸ¡ã«ãªãå ŽåããããŸãã
ããããäœããã¹ããïŒïŒ YAMLã«å¿ èŠãªããŒãã ãã«apacheãå ¥åããŸããïŒ ã©ãããããããããã¯å®å šã«äžå€®ã§ååŸãããŠããŸãã...
å«ããããã®ãšæãŸãªããã®ãéžæã§ããããã«ããããã«ãPappetã¯create_resourcesïŒïŒé¢æ°ãäœæããŸããã ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ã ããã§çŸãã説æãããŠããŸã ã
é¢æ°create_resourcesïŒresourceãhash1ãhash2ïŒ ïŒãªãœãŒã¹ãªãœãŒã¹ Pappetãäœæããå ¥åhash1ããã³hash2ãæž¡ããŸãã Hash2ã¯ãªãã·ã§ã³ã§ãããæå®ãããŠããå Žåããã®ããŒãšå€ã¯hash1ã«è¿œå ãããŸãã hash1ãšhash2ã®äž¡æ¹ã«åããã©ã¡ãŒã¿ãŒãæå®ãããŠããå Žåãhash1ãããé«ãåªå é äœã«ãªããŸãã ãªãœãŒã¹ã¯ãæšæºã®ãªã¹ãïŒ Puppetåãªãã¡ã¬ã³ã¹ãåç § ïŒããååŸãããããŸãã¯ç§ãã¡ãŸãã¯ã¯ã©ã¹ã§äºåã«å®£èšïŒ å®çŸ©ãããå ïŒããããšãã§ããŸãã æšæºãªãœãŒã¹ã®äŸã¯ãŠãŒã¶ãŒãªãœãŒã¹ã§ã宣èšããããªãœãŒã¹ã®äŸã¯apacheã¢ãžã¥ãŒã«ã®apache :: vhostã§ãã Apacheã®äŸãèããŠã¿ãŠãã ããïŒããã§ã¯ãäžèšã®ãªã³ã¯ããè¯ãäŸãã³ããŒããŠè²Œãä»ããããšãã§ããŸãïŒã
2ã€ã®Apacheä»®æ³ãã¹ãã®æ¬¡ã®æ§æãHieraã«è»¢éãããšããŸãã
apache::vhost { 'foo.example.com': port => '80', docroot => '/var/www/foo.example.com', docroot_owner => 'foo', docroot_group => 'foo', options => ['Indexes','FollowSymLinks','MultiViews'], proxy_pass => [ { 'path' => '/a', 'url' => 'http://backend-a/' } ], } apache::vhost { 'bar.example.com': port => '80, docroot: => '/var/www/bar.example.com', }
Hieraã§ã¯ã次ã®ããã«ãªããŸãã
apache::vhosts: foo.example.com: port: 80 docroot: /var/www/foo.example.com docroot_owner: foo docroot_group: foo options: - Indexes - FollowSymLinks - MultiViews proxy_pass: - path: '/a' url: 'http://localhost:8080/a' bar.example.com: port: 80 docroot: /var/www/bar.example.com
Pappetãããã§ã¹ãã«æžãããŠããã®ã¯æ¬¡ã®ãšããã§ãã
$myvhosts = hiera('apache::vhosts', {}) create_resources('apache::vhost', $myvhosts)
ããã®æåã®è¡ã§ã¯ãApache :: vhostsã»ã¯ã·ã§ã³ããæ§æå
šäœãããŠã³ããŒãããããHieraã«äŸé ŒããŸããã æ
å ±ã¯ããfoo.example.comããšãbar.example.comãã®2ã€ã®ããã·ã¥ã®åœ¢åŒã§ããŒããããŸããïŒæ£ç¢ºã«ã¯ã2ã€ã®ååä»ãããã·ã¥ãããªãååã®ãªãããã·ã¥ã$ myvhostså€æ°ã«åé¡ãããŸããïŒã ãã®åŸããããã®ããã·ã¥ã¯apache :: vhostsãªãœãŒã¹ã«é çªã«è»¢éãããPappetã«ãã£ãŠäœæãããŸãã
ãããã§ã¹ãããHieraã«ããŒã¿ã転éããæ¹æ³ã®ãã1ã€ã®è¯ãäŸã§ãã ãŠãŒã¶ãŒç®¡çã Hieraã§æ¬¡ã®ã³ãŒããèšè¿°ããå ŽåïŒ
é衚瀺ã®ããã¹ã
users: user1: ensure: present home: /home/user1 shell: /bin/sh uid: 10001 managehome: true user2: ensure: present home: /home/user2 shell: /bin/sh uid: 10002 groups: - secondary_group1 - secondary_group2 user3: ensure: present home: /home/user3 shell: /bin/sh uid: 10003 groups: - secondary_group3 - secondary_group4
ãããŠãsite.ppã«æ¬¡ã®ããã«èšè¿°ããŸãã
$node_users = hiera_hash('users') create_resources(user, $users, {})
ããã«ãããäžèšã®ãã¹ãŠã®ãŠãŒã¶ãŒãäœæãããŸãã hiera_hashãåŒã³åºããšãusersïŒã»ã¯ã·ã§ã³ã§å®£èšããããã¹ãŠã®ãŠãŒã¶ãŒãéå±€å
šäœããå¹ççã«åéãããããšã«æ³šæããŠãã ããã 競åãã©ããã§çºçããå ŽåïŒç°ãªããã¡ã€ã«ã®ç°ãªããŠãŒã¶ãŒUIDïŒãHieraã¯éå±€ã®äžäœã¬ãã«ã§èª¬æãããŠããå€ã䜿çšããŸãã è«ççã§ãã
ãŸããcreate_resourcesïŒïŒãšå®çŸ©ãããåã¯ãPappetã®ã«ãŒãã®ç¹°ãè¿ããæŽçãã1ã€ã®æ¹æ³ã§ããæåã¯ãã®é¢æ°ããããŸããïŒå°ãªããšãå°æ¥ã®ããŒãµãŒããªããã°ããŸã 䜿çšããã®ã¯å€¢äžã§ããïŒïŒã ããã§ã¯ãäž¡æ¹ã®å埩æ¹æ³ã«ã€ããŠè©³ãã説æããŸã ã
ããããã¹ãŠã§ãã Hieraã®åºæ¬çãªäœ¿ãæ¹ã説æããŸããã PappetãhieraïŒïŒãhiera_arrayïŒïŒãhiera_hashïŒïŒãhiera_includeïŒïŒãcreate_resourcesïŒïŒã®æšæºé¢æ°ã䜿çšãããšãããããæ¢ã«æšæž¬ããããã«ãå€ãã®ããšãæãã€ãããšãã§ããŸãã
次ã®èšäºã§ã¯ãPappetãšHieraã䜿çšãããµãŒããŒããŒã«ã®ç®¡çã«ã€ããŠèª¬æããŸãã