LoginSignup
17
19

More than 5 years have passed since last update.

Chef-soloをProxy環境下なサーバで使えるようにする話(社内環境でよくある話)

Last updated at Posted at 2014-06-25

これは何?

社内にある程度自由にできる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に行います。

nodeの/etc/wgetrc
下記を追加してあげましょう
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に行います。

nodeの/etc/bashrc
下記を追加してあげましょう
http_proxy=http://${USER}:${PASSWORD}@${PROXY_HOST}:${PROXY_PORT}/
https_proxy=http://${USER}:${PASSWORD}@${PROXY_HOST}:${PROXY_PORT}/
/etc/profile.d/proxy.sh
下記を追加してあげましょう
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

設定

/etc/yum.conf
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をインストール。

インストール

download.png

この辺から環境に応じたChef Clientをダウンロードします。

install_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を使いましょう

install_Knife-solo
$ sudo /opt/chef/embedded/bin/gem install knife-solo

確認

check_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の設定を登録するよ

先ほど作ったリポジトリの中の

ここ
drwxr-xr-x 2 user group 4096 Jun 25 12:21 .chef

ここにknife.rbを作成します。

.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}

おまけ

ChefでPearパッケージをインストールする話(まずそんなニーズ無い)(社内環境でよくある話)

17
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19