HieraずR10Kを䜿甚したPuppetバヌゞョン3.8のプログラミング䟋

もっず深くする必芁がありたす。
むンセプション

ここでは、プログラミングの䟋/テクニックを説明したす。 理由は同じです。むンタヌネット䞊にさらにドックが必芁です。 前回の蚘事では 、Centos 6.5を䜿甚しおPuppetバヌゞョン3.8をむンストヌルおよび蚭定するこずを䟋ずしお説明したした。 最も簡単な䟋は、クラむアント/サヌバヌバンドルの機胜をテストする堎合です。 次に、これがどのように耇雑になるのか、なぜこれが必芁なのかを芋おみたしょう。


䟋1モゞュヌルマニフェストでパラメヌタヌを䜿甚する


class test1 { #    $text1 = “our” #   $text2 = “text” #   file { 'puppetenv file': #  ,  «puppetenv file» –    #   file.     . path => '/tmp/puppetenv', #    ensure => file, #   content => "test: ${text1} - ${text2}" #      } } 


パラメヌタヌ内のテキストの送信のチェヌン
クラス$ 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, #     params $text1 = $test1::params::text1 ) inherits test1::params { #    inherits file { 'puppetenv file': path => '/tmp/puppetenv', ensure => file, content => "${env} - test: ${text1}" } } 


ファむル/etc/puppet/modules/test1/manifests/params.ppを䜜成したす
 class test1::params { $env = $settings::environment #   puppet $text1 = 'ptestint' #    } 


説明
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 ~]# puppet agent --test Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for stage.test.net Info: Applying configuration version '1459348679' Notice: /Stage[main]/Test1/File[puppetenv file]/ensure: defined content as '{md5}af1b5424181346c5f4827af742b07abf' Notice: Finished catalog run in 0.12 seconds [root@stage ~]# cat /tmp/puppetenv production - test: ptestint 


ご芧のずおり、ファむルは正垞に䜜成されたした。 誰もがパラメヌタヌの䜿甚がどこに行くこずができるかを芋たいなら、ここにapacheのサンプルモゞュヌルがありたす。

ptestintテキストの送信チェヌン
マニフェスト/ site.pp->モゞュヌル/ test1 / init.pp$ test1 :: params :: text1-> filecontent$ {text1}

ここで、/ etc / puppet / manifests / site.ppのデフォルト倉数を倉曎するにはどうすればよいですか。これらは優先床が高いためです。
 node 'stage.test.net' { # include test1 class { 'test1': text1 => 'newparam', } } 


クラむアントで確認したす。
...
-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, #1 $text1 = $test1::params::text1 #2 ) inherits test1::params { file { 'puppetenv file from tmpl': path => '/tmp/puppetenv', ensure => file, content => template('test1/puppetenv.erb'), } } 


コンテンツテキストをpuppetenv.erbテンプレヌトを呌び出すこずで眮き換えるこずに加えお、すべおを個別のクラスに入れたすが、init.ppに2番目のファむルを远加するこずもできたす。

-ファむル/etc/puppet/modules/test1/templates/puppetenv.erb-ゞェネレヌタヌテンプレヌト。
 # Created by puppet Our text: <%= @text1 %> Env: <%= @envname %> Host: <%= @hostname %> 


ここでの倉数$ {text1}は、Ruby圢匏で<= @ text1>ずしお枡されたす。 $ envnameはparams.ppから取埗され、site.ppで$ text1を再定矩し、同時に「システム」倉数を远加したしたこれらはpuppetでファクトず呌ばれたす<= hostname >

クラむアントで確認したす。
 [root@stage ~]# puppet agent --test ... -production - test: newparam \ No newline at end of file +# Created by puppet +Our text: param_tmpl +Env: production +Host: stage ... 


結果
 [root@stage ~]# cat /tmp/puppetenv # Created by puppet Our text: param_tmpl Env: production Host: 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]# hiera -d test::text2 DEBUG: Wed Mar 30 13:06:13 -0400 2016: Hiera YAML backend starting DEBUG: Wed Mar 30 13:06:13 -0400 2016: Looking up test::text2 in YAML backend DEBUG: Wed Mar 30 13:06:13 -0400 2016: Looking for data source common DEBUG: Wed Mar 30 13:06:13 -0400 2016: Found test::text2 in common common-hiera [root@pmaster /etc]# hiera testparam::text3 ::fqdn=stage.test.net node stage hiera hiera arrexmpl::colors ::fqdn=stage.test.net {"rgb"=>["red", "blue", "green"], "bw"=>"B&W"} 


次に、それらをパラメヌタヌに保存し、テンプレヌトで䜿甚する必芁がありたす。
/etc/puppet/modules/test1/manifests/params.pp
 class test1::params { # sss $env = $settings::environment $text1 = 'ptestint' $text2 = hiera('test::text2', 'ptestint2') #   'test::text2'.       'ptestint2' $text3 = hiera('testparam::text3', 'ptestint3') $colors = hiera('arrexmpl::colors', 'nohiera') #    arrexmpl::colors if $colors != 'nohiera' { #      $c1 = $colors['bw'] $c2 = $colors['rgb'] } else { $c1 = "lost" } } 


/etc/puppet/modules/test1/manifests/usetmpl.pp
 class test1::usetmpl ( $envname = $test1::params::env, $text1 = $test1::params::text1, $text2 = $test1::params::text2, #     $text3 = $test1::params::text3, $c1 = $test1::params::c1, $c2 = $test1::params::c2 ) inherits test1::params { file { 'puppetenv file': path => '/tmp/puppetenv', ensure => file, content => template('test1/puppetenv.erb'), } file { 'hiera test': path => '/tmp/phiera', ensure => file, content => template('test1/hieratst.erb'), } } 


/etc/puppet/modules/test1/templates/hieratst.erb
 # Hiera test # Created by puppet Our text1: <%= @text1 %> Our text2: <%= @text2 %> Our text3: <%= @text3 %> Colors: BW = <%= @c1 %> <% if c1 == "lost" %> #    ! Hiera fail ! <% end -%> RGB = <%- c2.each do |colors| -%> #    arrexmpl::colors::rgb: - <%= colors %> <%- end -%> 


クラむアントで確認したす。

 [root@stage ~]# puppet agent --test ... [root@stage /etc/puppet]# cat /tmp/phiera # Hiera test # Created by puppet Our text1: paramtmpl Our text2: common-hiera Our text3: node stage hiera Colors: BW = B&W RGB = - red - blue - green 


䟋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 { # <-      Hiera ? include profiles::runtest1 } #          ,   . #      ,  runtest3      # runtest1,        roles::ver2::runtest3, . .   . class roles::ver2::runtest3 inherits roles::stagesrv::test { include profiles::ver2::runtest3 } 


-実際には、チュヌニング結果のダンプがありたした
 sudo r10k deploy environment test_devops 


そしお、自動実行ノヌドに適甚されるか、puppet agent --testを䜿甚しお手動でテストできたす

それだけです。 ここたで読んでくれおありがずう。

この蚘事に含めたいず思う人からのその他のバヌゞョンのアドオンたたはオプション。

クックブックを敎理するための完党に異なるアルゎリズム-「モゞュヌル」ずレシピでのよりクリヌンなRuby-「マニフェスト」があるため、シェフクラむアントサヌバヌ/シェフ+ berkshelf /シェフ+ AWS Opsworkの䜿甚経隓ず比范したせん。

远加のドック
1. Puppetコヌドのマむクロサンプルによる。
2. Hieraの玹介
3. R10Kの少し

Source: https://habr.com/ru/post/J280632/


All Articles