[Chef12]Chef-Serverの設定


http://docs.chef.io/server/install_server.html
http://downloads.chef.io/

インストール自体は手順に添うだけで全く問題ないのですが、client回り等のchef10/11からの移行時に変更になる点を主にメモしておきます。なので、本題は後ろの方です。
yumで参照しているリソースなんかは最新版を確認して下さい。

# chef-serverのインストール

## 基本
* chef-server-coreだけインストールした後は、chef-server-ctl等のコマンドでinstallしたりreconfigureしたりする。設定ファイルを変更したらreconfigureする。
* chef-server-core関連のファイルは /etc/opscode にある
* ログは /var/log/opscode にある

以下の手順では、

* chef-server-core
* manage ui
* reporting

を１つのサーバーにインストールしたあと、もう１つサーバーを準備して

* chef-analytics

をインストールします。（chef-analyticsはすぐ用意しなくてもserverの利用に問題ないです）

## chef-server-core

```bash:chef-server-coreのインストール
yum install https://web-dl.packagecloud.io/chef/stable/packages/el/6/chef-server-core-12.0.3-1.x86_64.rpm

chef-server-ctl reconfigure
```

## user/org作成

```bash:user/organization作成
## user作成
chef-server-ctl user-create user_name first_name last_name email password --filename ADMIN_PEM_FILE_NAME

## org作成
chef-server-ctl org-create short_name full_organization_name --association_user user_name --filename ORG_VALIDATION_KEY_FILE_NAME
```

/etc/opscode/admin.pem
/etc/opscode/orgname-validator.pem
とかの名前が分かりやすいでしょう。

既定だと以下のdirにchef-analytics用の設定ファイルが生成されます。別のサーバーでchef-analyticsを実行する場合は、このファイルをコピーすることになります。

```
/etc/opscode-analytics/webui_priv.pem 
/etc/opscode-analytics/actions-source.json 
```


## chef manage ui

```bash:install
chef-server-ctl install opscode-manage
opscode-manage-ctl reconfigure
```

## chef-reporting

https://docs.chef.io/install_reporting.html

```bash:install
chef-server-ctl install opscode-reporting
chef-server-ctl reconfigure
opscode-reporting-ctl reconfigure
opscode-reporting-ctl test
```

## インストール後の確認諸々

## 注意点

* erlangのデーモンプロセスであるbeamがlistenしてなかったら何かの設定が足りない。netstat -tlnpとかで確認
* testやpreflightなどの各種チェックコマンドでエラーが出る場合はだいたい設定ファイルが間違ってます。


# chef-analysticサーバーのインストール

## chef-analystic

https://docs.chef.io/install_analytics.html
https://downloads.chef.io/analytics/

Standalone1.1のの手順に準じます。

### インストール済みchef-server側の設定

```
chef-server-ctl stop

vi /etc/opscode/chef-server.rb 
```

```ruby:/etc/opscode/chef-server.rb
rabbitmq['vip'] = 'BACKEND_IP'
rabbitmq['node_ip_address'] = '0.0.0.0'
## chef-analytics用設定
oc_id['applications'] = {
  'analytics' => {
    'redirect_uri' => 'https://analytics.example.com'
  }
}
```

```
chef-server-ctl reconfigure

chef-server-ctl start
```

以下のファイルを、chef-analysticsサーバー側に転送して下さい。

```
/etc/opscode-analytics/webui_priv.pem 
/etc/opscode-analytics/actions-source.json 
```


### chef-analysticsサーバー側の手順

```bash:chef-analysticsのインストール
yum install -y https://web-dl.packagecloud.io/chef/stable/packages/el/6/opscode-analytics-1.1.1-1.x86_64.rpm

vi /etc/opscode-analytics/opscode-analytics.rb
```

```ruby:/etc/opscode-analytics/opscode-analytics.rb
analytics_fqdn "analytics.example.com"
topology "standalone"
```

```
# 転送済み確認
cat /etc/opscode-analytics/webui_priv.pem 
cat /etc/opscode-analytics/actions-source.json 

opscode-analytics-ctl preflight-check
opscode-analytics-ctl reconfigure
```

完了したら https://analytics.example.com にアクセスしてみましょう。

# chef-clientの実行

## client.rbの作成

http://docs.chef.io/client/config_rb_client.html
http://docs.chef.io/chef_client_security.html

```ruby:/etc/chef/client.rb
log_level              :info
log_location           /var/log/chef-client.log
chef_server_url 'https://<chef-server>/organizations/<orgname>'
validation_client_name '<orgname>-validator'
validation_key         '/etc/chef/validator.pem'
ssl_verify_mode        :verify_none
```

### chef_server_url/validation_client_name

organizationごとに違う値が入ります。

### ssl_verify_mode

デフォルト設定で接続先chef-serverの証明書を検証するようになっていて、上記のchef-serverで入る手順だと当然SSLは自己証明書。エラーで弾かれるのでclient.rbでモードを変更しておきます。

## validation.pemの設置

orgnizationごとに別々のvalidation.pemが設定される。
org-createコマンド実行時にオプション--filenameを指定しておけば、サーバー上にpemが保存されていますので、clinetに適宜転送したりします。
ない場合は(WebUIの場合)Administration->OrganizationsからReset Validate Keyを実行して再生成。


# knifeの実行

```ruby:~/.chef/knife.rb(例)
node_name                'user_name'
client_key               '~/.chef/ADMIN_PEM_FILE_NAME'
chef_server_url          'https://<chef-server>/organizations/<orgname>'
cookbook_path            [ '~/chef-repo/cookbooks' ]
ssl_verify_mode          :verify_none
```

```
knife client list

> org-validator
```

インストール直後でもvalidatorだけは見えるはずです。

knifeをユーザーごとに行うなら個別にユーザーを作成し、orgと紐づけておきます。Analyticsとかで誰が何の操作をしたか追えるようになります。WebUIからだと、/signupで新規ユーザー作成 -> Organizetionから新規ユーザーをInvite -> 新規ユーザーでログインして参加 という流れになります。

```bash:CUI
chef-server-ctl org-user-add -a orgname user_name2
```

※現状、orgへのinviteに対するacceptはWebUIからじゃないとできないかも…。


# その他の注意点

* chef-serverからmailが送られる設定をきちんとすればメールでいろいろ送られるはずなんですが、そこまで試していません。