puppet on windows
Linuxはオペレーティングシステムの「スター」であるため、Linuxファミリーは旺盛で、各種バージョンのLinuxがかなりのシェアを占めるサーバー市場を占めており、puppetはLinuxで非常にスムーズに走っています.多くのオープンソースソフトウェアと同様に、puppetもwindows上で実行できますが、実際には去勢版で、二等公民に属しています.
また、仕事が変わったので、私の手元にwindowsマシンを引き継いで、windows 2008 x 64にpuppetクライアントを配置して、インストール時の重複労働を減らして、サービス側が走っているのはLinux(centos 6)です.
また、puppetのwindows上の資料は現在まだ少なく、公式サイトの資料も1ページしか持っていないので、本文が読者に役立つことを望んでいます.
puppetlabsには既存のwindowsテンプレートが少ないので、自分でルールを書くしかありません.テンプレートを簡単に作成するスクリプトを書きます.
#cat /etc/puppet/generate_module.sh
#!/usr/bin/env bash
#usage:generate_module.sh module-name
mkdir -p /etc/puppet/modules/$1/{manifests,templates,files}
touch /etc/puppet/modules/$1/manifests/init.pp
echo ""
echo -e module $1 has been generated
echo -e see /etc/puppet/modules/$1 for detail.
#chmod 755 /etc/puppet/generate_module.sh
テンプレートを作成するには./generate_module.sh xxx
以下にいくつかの例を挙げてwindowsでのpuppetの使い方を説明します
需要一、nagios windowsクライアントnsclient++をインストールする
#cat modules/windows-nscp/manifests/init.pp
class windows-nscp {
if $operatingsystem == "windows" {
file { "c:\\NSCP-0.4.0.183-x64.msi":
ensure => present,
source => "puppet:///modules/windows-nscp/NSCP-0.4.0.183-x64.msi",
notify => Package["nscp"],
}
package {"nscp":
ensure => installed,
provider => "msi",
source => "c:\\NSCP-0.4.0.183-x64.msi",
require => File["c:\\NSCP-0.4.0.183-x64.msi"],
notify => File["c:\\progra~1\\NSClient++\
sclient.ini"],
}
file { "c:\\progra~1\\NSClient++\
sclient.ini":
ensure => present,
source => "puppet:///modules/windows-nscp/nsclient.ini",
notify => Service["nscp"],
}
service {"nscp":
ensure => 'running',
enable => true,
require => Package["nscp"],
}
# due to memory leak,nscp need a daily restart
scheduled_task {'daily stop nscp':
ensure => present,
enabled => true,
command => 'C:\\Windows\\System32\
et.exe',
arguments => 'stop nscp',
trigger => {
schedule => daily,
every => 7,
start_date => '2012-12-21',
start_time => '17:00',
}
}
scheduled_task {'daily start nscp':
ensure => present,
enabled => true,
command => 'C:\\Windows\\System32\
et.exe',
arguments => 'start nscp',
trigger => {
schedule => daily,
every => 7,
start_date => '2012-12-21',
start_time => '17:01',
}
}
}
}
nscpは をしにくいで、コードは くて、 のように します
1,サーバーからnscpインストールパッケージをcディスクルートディレクトリにダウンロードする
2,cディスクからnscpパッケージをインストールする
3、nscpプロファイルの を します(nsclient.logログサイズは してください)
4、サービス
5、 を して、 にnscpサービスを します( したところ、nscpはメモリが れて、 の は1 、nscpはメモリの1 G くを めます)
、サーバーに7 zip ソフトウェアをインストールする
これは で、あまり なことはありません.
# cat modules/windows-7z/manifests/init.pp
class windows-7z {
if $operatingsystem == "windows" {
file { "c:\\7z920-x64.msi":
ensure => present,
source => "puppet:///modules/windows-7z/7z920-x64.msi",
notify => Package["7z"],
}
package {"7z":
ensure => installed,
provider => "msi",
source => "c:\\7z920-x64.msi",
require => File["c:\\7z920-x64.msi"],
}
}
}
3、 サービス(ファイアウォールサービスを に)
リモート カードがなければ、windowsファイアウォールの でリモートを にさせやすく、puppetクライアントはタイミングを めてサーバと することで、ロックを することができます.Windowsスクリプトを しない り、puppetがファイアウォールルールを できることは に つかりません.
class windows-firewall {
if $operatingsystem == "windows" {
service {"MpsSvc" :
ensure =>'running',
enable => true,
}
}
}
これで、 な にrunningをstoppedに すれば、ファイアウォールを じることができます.
その のサービス
# cat modules/windows-spooler/manifests/init.pp
class windows-spooler {
if $operatingsystem == "windows" {
service {'Spooler':
ensure => 'stopped',
enable => true,
}
}
}
spoolerはサーバーには に たないサービスです. めてください.
4、 レジストリ( を に)
の は、puppetモジュールで つけられる wintpです.
# cat modules/winntp/manifests/init.pp
class winntp (
$special_poll_interval = 900, # 15 minutes
$ntp_server = '10.1.1.36,10.1.1.37',
$max_pos_phase_correction = '0xFFFFFFFF', # unlimited
$max_neg_phase_correction = '0xFFFFFFFF') {
include 'registry'
service { 'w32time':
ensure => 'running',
}
# Info on these settings at http://technet.microsoft.com/en-us/library/cc773263(v=ws.10).aspx
registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\Type':
ensure => present,
type => 'string',
data => 'NTP',
notify => Service['w32time'],
}
registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags':
ensure => present,
type => 'dword',
data => '5',
notify => Service['w32time'],
}
registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient\SpecialPollInterval':
ensure => present,
type => 'dword',
data => $special_poll_interval,
notify => Service['w32time'],
}
registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer\Enabled':
ensure => present,
type => 'dword',
data => '1',
notify => Service['w32time'],
}
registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\NtpServer':
ensure => present,
type => 'string',
data => $ntp_server,
notify => Service['w32time'],
}
registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config\MaxPosPhaseCorrection':
ensure => present,
type => 'dword',
data => $max_pos_phase_correction,
notify => Service['w32time'],
}
registry_value { 'HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config\MaxNegPhaseCorrection':
ensure => present,
type => 'dword',
data => $max_neg_phase_correction,
notify => Service['w32time'],
}
}
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、しばらくはこれだけ