Chef-soloをProxy環境下なサーバで使えるようにする話(社内環境でよくある話)
これは何?
社内にある程度自由にできるPrivateCloud環境(ex. OpenStack)が出来た&多量のサーバを構築するニーズがあるので、Chefを導入してみました。
まずはChef-solo環境を構築するまでのお話。
Chef-serverはネットワーク周りでまだ越えないといけないハードルがあるので、ひとまずChef-soloで運用開始してからChef-server環境の構築にかかる予定。
Getting Started的Proxy周りの設定
Chef-clientインストール以前に必要な設定
SSH鍵の配布や、この項で設定するknife solo prepareにてnodeにChef-clientをインストールする前に必要になるproxy設定(yum除く)は
Chef/Knifeに解決させるのではなく、事前に手動なりスクリプトなりで設定し、その状態でイメージを作成しておきます。
Knifeはその辺をサポートする機能を持っていないし、prepare以前の状態なnodeにChefが何かするのもおかしな話ですもんねー。
node側のwgetrcにproxyを設定する
knife solo prepareでChef-clientをインストールする際にmetadataをwgetする箇所があります。
wgetがproxyを使用するよう設定しておきましょう。
これはrecipeを適用する対象=nodeに行います。
下記を追加してあげましょう
http_proxy = http://${USER}:${PASSWORD}@${PROXY_HOST}:${PROXY_PORT}/
https_proxy = http://${USER}:${PASSWORD}@${PROXY_HOST}:${PROXY_PORT}/
node側のbashrc/profile.dにproxyを設定する
recipeを適用する対象=nodeに行います。
下記を追加してあげましょう
http_proxy=http://${USER}:${PASSWORD}@${PROXY_HOST}:${PROXY_PORT}/
https_proxy=http://${USER}:${PASSWORD}@${PROXY_HOST}:${PROXY_PORT}/
下記を追加してあげましょう
export http_proxy=http://${USER}:${PASSWORD}@${PROXY_HOST}:${PROXY_PORT}
export https_proxy=http://${USER}:${PASSWORD}@${PROXY_HOST}:${PROXY_PORT}
適用
上で設定した内容を適用しましょう。
Shellを起動しなおすなり
$ bash
ログインしなおすなりすればOK
確認
$ export
http_proxy, https_proxyが設定されているか確認しましょう
以降2つは、必要なら事前に行っても良いし、Chef-clientのrecipeで設定しても良いと思います。
yum
設定
proxy=http://${USER}:${PASSWORD}@${PROXY_HOST}:${PROXY_PORT}
確認
$ yum update
gitが使用するプロトコルをhttpsに固定する
社内環境からは、githubなどの外部リポジトリとgitプロトコルで通信できないこと、多いしね。
この辺を参考に設定してください。
http://qiita.com/nntsugu@github/items/38dc49a47d1b658325e8
Chef Clientのインストール
今回はOpen Source Chefをインストール。
インストール
この辺から環境に応じたChef Clientをダウンロードします。
$ curl -LO https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-11.12.8-2.el6.x86_64.rpm
$ sudo rpm -i chef-11.12.8-2.el6.x86_64.rpm
確認
バージョン確認してみたり
$ knife -v
Chef: 11.12.8
こんな感じに補完されればOK
$ chef-[TAB]
chef-apply chef-client chef-shell chef-solo
Knife soloのインストール
インストール
ChefのGemを使いましょう
$ sudo /opt/chef/embedded/bin/gem install knife-solo
確認
$ knife help
に下記の項があればOK
** SOLO COMMANDS **
knife solo bootstrap [USER@]HOSTNAME [JSON] (options)
knife solo clean [USER@]HOSTNAME
knife solo cook [USER@]HOSTNAME [JSON] (options)
knife solo init DIRECTORY
knife solo prepare [USER@]HOSTNAME [JSON] (options)
Chef Repositoryの作成
knife soloで作ります。
knife solo init ${TargetDir}
↓↓↓
$ knife solo init repository
WARNING: No knife configuration file found
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...
確認
$ ls -al repository/
total 40
drwxr-xr-x 9 user group 4096 Jun 25 12:21 .
drwxr-xr-x 3 user group 4096 Jun 25 12:21 ..
drwxr-xr-x 2 user group 4096 Jun 25 12:21 .chef
drwxr-xr-x 2 user group 4096 Jun 25 12:21 cookbooks
drwxr-xr-x 2 user group 4096 Jun 25 12:21 data_bags
drwxr-xr-x 2 user group 4096 Jun 25 12:21 environments
-rw-r--r-- 1 user group 12 Jun 25 12:21 .gitignore
drwxr-xr-x 2 user group 4096 Jun 25 12:21 nodes
drwxr-xr-x 2 user group 4096 Jun 25 12:21 roles
drwxr-xr-x 2 user group 4096 Jun 25 12:21 site-cookbooks
$ tree
.
└── repository
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
└── site-cookbooks
.chef/knife.rbにProxy設定を登録
knifeがnodeにrecipeを適用する際に使用するproxyの設定を登録するよ
knife solo init ${TargetDir}
↓↓↓
$ knife solo init repository
WARNING: No knife configuration file found
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...
$ ls -al repository/
total 40
drwxr-xr-x 9 user group 4096 Jun 25 12:21 .
drwxr-xr-x 3 user group 4096 Jun 25 12:21 ..
drwxr-xr-x 2 user group 4096 Jun 25 12:21 .chef
drwxr-xr-x 2 user group 4096 Jun 25 12:21 cookbooks
drwxr-xr-x 2 user group 4096 Jun 25 12:21 data_bags
drwxr-xr-x 2 user group 4096 Jun 25 12:21 environments
-rw-r--r-- 1 user group 12 Jun 25 12:21 .gitignore
drwxr-xr-x 2 user group 4096 Jun 25 12:21 nodes
drwxr-xr-x 2 user group 4096 Jun 25 12:21 roles
drwxr-xr-x 2 user group 4096 Jun 25 12:21 site-cookbooks
$ tree
.
└── repository
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
└── site-cookbooks
knifeがnodeにrecipeを適用する際に使用するproxyの設定を登録するよ
先ほど作ったリポジトリの中の
drwxr-xr-x 2 user group 4096 Jun 25 12:21 .chef
ここにknife.rbを作成します。
cookbook_path ["cookbooks", "site-cookbooks"]
node_path "nodes"
role_path "roles"
environment_path "environments"
data_bag_path "data_bags"
#encrypted_data_bag_secret "data_bag_key"
knife[:berkshelf_path] = "cookbooks"
if ENV["http_proxy"]
require 'rest-client'
RestClient.proxy = ENV["http_proxy"]
require 'uri'
proxy_env = URI.parse(ENV["http_proxy"])
proxy_user, proxy_pass =
#proxy_user, proxy_pass = proxy_env.userinfo.split(":")
http_proxy "http://#{proxy_env.host}:#{proxy_env.port}"
https_proxy "http://#{proxy_env.host}:#{proxy_env.port}"
http_proxy_user proxy_user
http_proxy_pass proxy_pass
https_proxy_user proxy_user
https_proxy_pass proxy_pass
no_proxy "192.168.*"
end
if句”if ENV["http_proxy"]”の中身がproxy設定。
環境変数http_proxyが定義されていればそれを使用する形です。
nodeの準備(recipe適用対象にChef-clientをインストールするよ)
nodeにChef-clientをインストールする
knife soloがよしなにやってくれます
$ knife solo prepare ${TARGET_LOGIN_USER}@${TARGET_HOST}
ex. knife solo prepare root@web01
↑↑↑
sudo権限があるユーザか、社内環境ならその時だけroot使ってもいいかもね
確認
nodeにログインして
バージョン確認してみたり
$ knife -v
Chef: 11.12.8
こんな感じに補完されればOK
$ chef-[TAB]
chef-apply chef-client chef-shell chef-solo
ここまででProxy環境下でChef-soloを使用する準備ができました!
あとは、
recipeの準備
ここは本題ではないので割愛。
簡単なのを後日書くかも。
ここは本題ではないので割愛。
簡単なのを後日書くかも。
をして
recipeをnodeに適用
knife solo cookでnodeを料理してしまいましょう。
$ knife solo cook ${TARGET_LOGIN_USER}@${TARGET_HOST}
おまけ
Author And Source
この問題について(Chef-soloをProxy環境下なサーバで使えるようにする話(社内環境でよくある話)), 我々は、より多くの情報をここで見つけました https://qiita.com/nntsugu/items/9f9d3e5319d0ebcc39bc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .