puppet on windows


puppetは近年台頭した運維神器であり、通俗的な文法、簡単な構造であり、puppetを利用して非常に便利にロット配置を行うことができ、puppetはruby言語で書かれており、プラットフォームにまたがることができ、windows、linux、unixを通じて食べることができ、「神器」と呼ばれている.
Linuxはオペレーティングシステムの「スター」であるため、Linuxファミリーは旺盛で、各種バージョンのLinuxがかなりのシェアを占めるサーバー市場を占めており、puppetはLinuxで非常にスムーズに走っています.多くのオープンソースソフトウェアと同様に、puppetもwindows上で実行できますが、実際には去勢版で、二等公民に属しています.
また、仕事が変わったので、私の手元にwindowsマシンを引き継いで、windows 2008 x 64にpuppetクライアントを配置して、インストール時の重複労働を減らして、サービス側が走っているのはLinux(centos 6)です.
また、puppetのwindows上の資料は現在まだ少なく、公式サイトの資料も1ページしか持っていないので、本文が読者に役立つことを望んでいます.
puppetlabsには既存のwindowsテンプレートが少ないので、自分でルールを書くしかありません.テンプレートを簡単に作成するスクリプトを書きます.

  
  
  
  
  1. #cat /etc/puppet/generate_module.sh  

  2. #!/usr/bin/env bash  

  3. #usage:generate_module.sh module-name  

  4. mkdir -p /etc/puppet/modules/$1/{manifests,templates,files}  

  5. touch /etc/puppet/modules/$1/manifests/init.pp  

  6. echo ""  

  7. echo -e  module $1 has been  generated  

  8. echo -e  see /etc/puppet/modules/$1 for detail.  

  9. #chmod 755 /etc/puppet/generate_module.sh  


テンプレートを作成するには./generate_module.sh xxx
以下にいくつかの例を挙げてwindowsでのpuppetの使い方を説明します
需要一、nagios windowsクライアントnsclient++をインストールする



   
   
   
   
  1. #cat modules/windows-nscp/manifests/init.pp  

  2. class windows-nscp {  

  3.        if $operatingsystem == "windows" {  

  4.                file { "c:\\NSCP-0.4.0.183-x64.msi":  

  5. ensure => present,  

  6. source => "puppet:///modules/windows-nscp/NSCP-0.4.0.183-x64.msi",  

  7. notify => Package["nscp"],  

  8.                }  

  9.                package {"nscp":  

  10. ensure => installed,  

  11. provider => "msi",  

  12. source => "c:\\NSCP-0.4.0.183-x64.msi",  

  13. require => File["c:\\NSCP-0.4.0.183-x64.msi"],  

  14. notify => File["c:\\progra~1\\NSClient++\
    sclient.ini"],  

  15.                }  

  16.               file { "c:\\progra~1\\NSClient++\
    sclient.ini":  

  17. ensure => present,  

  18. source => "puppet:///modules/windows-nscp/nsclient.ini",  

  19. notify => Service["nscp"],  

  20.               }  

  21.                service {"nscp":  

  22. ensure => 'running',  

  23. enable => true,  

  24. require => Package["nscp"],  

  25.                }  

  26.                # due to memory leak,nscp need a daily restart  

  27.                scheduled_task {'daily stop nscp':  

  28. ensure => present,  

  29. enabled => true,  

  30. command => 'C:\\Windows\\System32\
    et.exe',  

  31. arguments => 'stop nscp',

  32. trigger => {  

  33. schedule => daily,  

  34. every => 7,  

  35. start_date => '2012-12-21',  

  36. start_time => '17:00',  

  37.                        }  

  38.                }  

  39.                scheduled_task {'daily start nscp':  

  40. ensure => present,  

  41. enabled => true,  

  42. command => 'C:\\Windows\\System32\
    et.exe',  

  43. arguments => 'start nscp',

  44. trigger => {  

  45. schedule => daily,  

  46. every => 7,  

  47. start_date => '2012-12-21',  

  48. start_time => '17:01',  

  49.                        }  

  50.                }  

  51.        }  

  52. }  


nscpは をしにくいで、コードは くて、 のように します
1,サーバーからnscpインストールパッケージをcディスクルートディレクトリにダウンロードする
2,cディスクからnscpパッケージをインストールする
3、nscpプロファイルの を します(nsclient.logログサイズは してください)
4、サービス
5、 を して、 にnscpサービスを します( したところ、nscpはメモリが れて、 の は1 、nscpはメモリの1 G くを めます)
、サーバーに7 zip ソフトウェアをインストールする
これは で、あまり なことはありません.

  
  
  
  
  1. # cat modules/windows-7z/manifests/init.pp

  2. class windows-7z {

  3.        if $operatingsystem == "windows" {

  4.                file { "c:\\7z920-x64.msi":

  5. ensure => present,

  6. source => "puppet:///modules/windows-7z/7z920-x64.msi",

  7. notify => Package["7z"],

  8.                }

  9.                package {"7z":

  10. ensure => installed,

  11. provider => "msi",

  12. source => "c:\\7z920-x64.msi",

  13. require => File["c:\\7z920-x64.msi"],

  14.                }

  15.        }

  16. }


3、 サービス(ファイアウォールサービスを に)
リモート カードがなければ、windowsファイアウォールの でリモートを にさせやすく、puppetクライアントはタイミングを めてサーバと することで、ロックを することができます.Windowsスクリプトを しない り、puppetがファイアウォールルールを できることは に つかりません.

  
  
  
  
  1. class windows-firewall {

  2.        if $operatingsystem == "windows" {

  3.                service {"MpsSvc" :

  4. ensure =>'running',

  5. enable => true,

  6.                }

  7.        }

  8. }


これで、 な にrunningをstoppedに すれば、ファイアウォールを じることができます.
その のサービス

  
  
  
  
  1. # cat modules/windows-spooler/manifests/init.pp

  2. class windows-spooler {

  3.        if $operatingsystem == "windows" {

  4.                service {'Spooler':

  5. ensure => 'stopped',

  6. enable => true,

  7.                }

  8.        }

  9. }


spoolerはサーバーには に たないサービスです. めてください.
4、 レジストリ( を に)
の は、puppetモジュールで つけられる wintpです.

  
  
  
  
  1. # cat modules/winntp/manifests/init.pp

  2. class winntp (

  3.  $special_poll_interval    = 900, # 15 minutes

  4.  $ntp_server               = '10.1.1.36,10.1.1.37',

  5.  $max_pos_phase_correction = '0xFFFFFFFF', # unlimited

  6.  $max_neg_phase_correction = '0xFFFFFFFF') {

  7.  include 'registry'

  8.  service { 'w32time':

  9. ensure => 'running',

  10.  }

  11.  # Info on these settings at http://technet.microsoft.com/en-us/library/cc773263(v=ws.10).aspx

  12.  registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\Type':

  13. ensure => present,

  14. type   => 'string',

  15. data   => 'NTP',

  16. notify => Service['w32time'],

  17.  }

  18.  registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags':

  19. ensure => present,

  20. type   => 'dword',

  21. data   => '5',

  22. notify => Service['w32time'],

  23.  }

  24.  registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient\SpecialPollInterval':

  25. ensure => present,

  26. type   => 'dword',

  27. data   => $special_poll_interval,

  28. notify => Service['w32time'],

  29.  }

  30.  registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer\Enabled':

  31. ensure => present,

  32. type   => 'dword',

  33. data   => '1',

  34. notify => Service['w32time'],

  35.  }

  36.  registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\NtpServer':

  37. ensure => present,

  38. type   => 'string',

  39. data   => $ntp_server,

  40. notify => Service['w32time'],

  41.  }

  42.  registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config\MaxPosPhaseCorrection':

  43. ensure => present,

  44. type   => 'dword',

  45. data   => $max_pos_phase_correction,

  46. notify => Service['w32time'],

  47.  }

  48.  registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config\MaxNegPhaseCorrection':

  49. ensure => present,

  50. type   => 'dword',

  51. data   => $max_neg_phase_correction,

  52. notify => Service['w32time'],

  53.  }

  54. }



1、linuxとwindowsファイルには セットが なるという があります.linux のpuppetにwindows のファイルの を させたい は、Windows でサンプルファイルをアップロードするのが です. えば、 のnsclient.ini
2、ファイル/etc/puppet/modules/windows-7 z/files/7 z 920-x 64.msiのpuppet での はpuppet:///modules/windows-7z/7z920-x64.msiあ、 のパスの のfilesは されて、 を って、 しません.
3、puppetが インストールできるソフトウェアはmsi で、ローカルインストールでなければならない.exeもサポートしない.
4、 の 、c:test.txtはc:\testと くべきです.txtは、Linuxではエスケープの ですから.
5、デフォルトインストールの 、puppet windowsクライアントプロファイルはc:programdata/puppetlabs/puppet/etc/puppet.conf、 を します. にはpluginsync=falseです.
6、しばらくはこれだけ