Puppetは、デスクトップ側だけでなくサーバー側にもインストールし、サーバー側でコマンドを実行する必要があると聞きました。
私の質問:人形を使う別の方法はありますか?つまり、サーバー側にインストールしたくないので、サーバーのデスクトップでスクリプトを実行するだけです。
答え1
マスターレスモードではPuppetを使用できますが、サーバーにはPuppetクライアントがまだインストールされている必要があります。このブログ記事では、設定の詳細について説明します。GitでPuppetを拡張する。
この資料では、Puppetマニフェストファイル()を維持するためにGitリポジトリを設定し、.pp
Puppetを手動で実行して適用する方法について説明します。
はい
package { "screen":
ensure => installed,
}
Something.ppとして保存し、Puppetを使って実行してください。
$ sudo puppet -v something.pp
info: Applying configuration version '1264090058'
notice: //Package[screen]/ensure: created
ただし、このアプローチは、Puppet展開で一般的に見られるクライアント/サーバーモデルと非常によく似ています。
puppet-usersメーリングリストには、次のタイトルのスレッドもあります。Re:[Puppetユーザー] Masterless:何を失うべきですか?これにより、他のオプションが明らかになる可能性があります。私はまた、次のタイトルのブログ投稿を見つけました。所有者のない人形また、目的のタスクを実行するためのオプションについても説明します。
また、以下のタイトルの記事をご案内いたします。構成管理:プッシュとプル構成管理を実行する際のアプローチの違いについて説明します。 Puppetは厳密に言えばフルソリューションなので、提案されているように使用するのは難しいかもしれません。これは、デスクトップからサーバーへのプッシュソリューションのように聞こえるからです。
プッシュアプローチを実際に使用したい場合は、他の解決策がありますが、これは質問の範囲外です。
答え2
詳しく説明します私のコメントここに、私の実用的な提案があります。
私の主な仮定は、クライアントノードの数が多すぎるため、クライアントノードにPuppetをインストールしたくないということです。権限の問題のために「タッチ」できない場合は、Puppetなどの方法で設定をプッシュできるかどうか疑問です。
次のように、ssh
パスワードなしでコンピュータにログインするように設定できます。ssh-keygen
[user@host]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host
The key's randomart image is:
+--[ RSA 2048]----+
| E++.+. |
| -./ . |
| . = o |
| o o |
| X + |
| . $ + |
| 0 . |
| . .S |
| ..cb.. |
+-----------------+
パスワードが空であることを確認してください。したがって、このパスワードを使用するスクリプトにはssh
パスワードは必要ありません。
2番目のステップでは、公開鍵をすべてのホストにコピーする必要があります。
while IFS= read -r host; do
ssh-copy-id -i ~/.ssh/id_rsa.pub "$host"
done < hostnames_file
hostnames_file
設定するすべてのホストを一覧表示するホスト名が1行に1つずつあるとします。
スクリプトはホスト数だけパスワードを要求する可能性が高くなりますが、これはキーの設定時に一度だけ発生します。
user
すべてのクライアント間でホームディレクトリを共有する場合(たとえば、NFS経由)、次のことができます。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
これで、設定したコマンド(または選択したパッケージマネージャ)sudo
に対してパスワードのないアクセスを設定する必要があります。今とても簡単です。apt-get
yum
pacman
user
ssh
while IFS= read -r host;do
ssh "$host" 'sudo apt-get install puppet' # also, modify puppet.conf
end < hostnames_file
この方法を構成管理の基本的な形式として使用することもできますが、* PuppetやChefなどの方法を使用するよりもはるかに脆弱です。
引用する
(*)sudo apt-get install puppet
すべてのノードで実行したいコマンドに置き換えます。
答え3
一般的なPuppetモデルは、PuppetマスターとPuppetクライアントで構成されています。つまり、Puppetマスターを完全にスキップしてPuppetクライアントのみを使用できます。 (所有者のない人形モジュールと呼ばれる)
puppet apply
bashスクリプトにコマンドをラップすることでこれを行うことができます。
以下は、ソースから最新バージョンのRedisをコンパイルし、RPMを生成する所有者なしのPuppetマニフェストの簡単な例です。
https://github.com/spuder/fpm-redis
以下は、当社が使用しているビルダーと呼ばれるより複雑な例です。ここでデモを見ることができます。
https://www.youtube.com/watch?v=EFByexKKkIE
Builderは、すべての開発者がすべての仮想マシンに適用できるスクリプトにすぎず、スクリプトは人形を介して自動的にスイートをインストールします。プライベートソースですが、基本的なアーキテクチャを説明してみましょう。
開発者がビルダーを実行すると、インストールするソフトウェアのバージョンとバージョンの入力を求めるプロンプトが表示されます。
$ sudo ./builder.sh
"Welcome to Builder"
1) Enterprise
2) Basic
3) Quit
Please select an edition: 1
"You have selected: Enterprise"
1) 7.5.0
2) 7.6.0
3) 7.7.0
4) 7.8.0
5) Quit
Please select a release: 2
"You have selected 7.6.0, applying manifests"
このように、bashスクリプトにpuppetマニフェストをラップすることの利点の1つは、後で使用できるように独自の要素変数を簡単に作成できることです。 github/spuder/fpm-redisで簡単な例をご覧ください。
変数の前に大文字の「FACTER」を付けます。
cat fpm-redis
#!/bin/bash
export FACTER_REDIS_VERSION='2.8.8'
puppet apply ./manifests/init.pp
その後、Puppetマニフェストは小文字の変数を参照できます(「FACTER_」という単語は自動的に削除されます)。
cat ./manifests/init.pp
class foo {
file { "${::redis_version}":
ensure => file,
content => 'foo'
}
}
include foo
ビルダーコードに戻るとモジュラーなので、インストールする必要がある各製品のディレクトリがあります。これにより、プロパティファイルを定義できます。
$ tree /tmp/builder
|
build
\_ Enterprise.prop
\_ Basic.prop
|
packages
\_ java_7
\_ manifests
\_ init.pp
\_ java_6
\_ manifests
\_ init.pp
\_ foo
\_ manifests
\_ init.pp
|
builder.sh
プロパティファイルは、環境変数と適用する人形マニフェストのリストを含むbashスクリプトです。場合によっては、パッケージを特定の順序でインストールする必要があるため、事前作業と後作業に分けられます。
$ cat Enterprise.prop
PRE_APPLY_LIST= "build/java_6/manifests/init.pp \
build/foo/manifests/init.pp"
POST_APPLY_LIST= "build/foobar/manifests/init.pp"
export FACTER_FOO='bar'
export FACTER_DB_PASSWORD='correct horse battery staple'
$ cat Basic.prop
PRE_APPLY_LIST= "build/java_7"
export FACTER_HERP='derp'
前述のメニュープロンプトに戻ります。ビルダーはビルディング・ディレクトリーを繰り返してメニュー・オプションのリストを生成します。
$ cat /tmp/builder.sh
# prompt the user for which product
OPTIONS=`ls build/*.prop`
for opt in $OPTIONS
do
PP_APPLY=$opt
break
done
# import the variables from the property file
source $PP_APPLY
# install the desired packages
puppet apply $PRE_APPLY_LIST
puppet apply $POST_APPLY_LIST
これは、人形マスターがなくても人形を活用するのに最適な方法です。
答え4
Puppetはパッケージ、ファイル、サービスを管理するように設計されています。 (トリオと呼ばれる)。 Puppet Masterなしで管理するには、次のいずれかのアプリケーションを使用できます。
カプ
yaml設定ファイルを受け入れ、すべてのアプリケーションをインストールするためのディレクトリ構造と人形マニフェストを作成するRuby gem。
https://github.com/theforeman/kafo
によって作られました十。これがインストーラを生成する方法です。
フッ素PM
フッ素PMこれは、rpmとdebパッケージをすばやく生成するための最良の方法です。独立した(所有されていない)パペットマニフェストを作成することもできます。執筆時点ではまだ実験段階です。
実行するスクリプトの種類が指定されていません。パッケージ、ファイル、またはサービスを管理している場合は、kafoを使用してアプリケーションを作成する幸運を享受できます。