1

私は、ユーザー データと cloud-init を備えた動作中の CloudFormation テンプレートを持っており、ホストされている Chef サーバーに正常に接続してビルドしています。AWS EC2 ストック イメージで Ubuntu 12.04 を使用しています。

私自身の目的のために、私はこれを続けたいと思っていますが、

1) Chefをサービスとして実行するように構成せず、オンデマンドでのみ実行します(「sudochef-client」)

...代わりに、またはこれを補完するために

2) 以前と同じように Chef のインストール/構成全体を実行しますが、サービスとしてではなく、一度だけ実行します

cloud-init の例を調べても、適切なフックが見つかりませんでした。このユースケースを可能にするための Chef の設定があるかどうか疑問に思いました。update-rc.d を使用してchef-clientを無効にしようとしましたが、すでに実行されているため機能しませんでした。

EC2 インスタンスに関連付けられた CF テンプレートのユーザーデータのフラグメントを次に示します。

#cloud-config

resize_rootfs: true
apt_update: true
byobu_by_default: disable
manage_etc_hosts: false
disable_root: true
timezone: Europe/London
package_upgrade: true
package_reboot_if_required: true

apt_sources:
  - source: "deb http://apt.opscode.com/ $RELEASE-0.10 main"
    key: |
      -----BEGIN PGP PUBLIC KEY BLOCK-----
      Version: GnuPG v1.4.9 (GNU/Linux)
      xxxx truncated xxxxx
      -----END PGP PUBLIC KEY BLOCK-----

chef:
  install_type: packages
  server_url: xxxxxx
  node_name: xxxxx
  validation_name: xxxxxx
  validation_key: |
    -----BEGIN RSA PRIVATE KEY-----
    xxxx truncated xxxxx
    -----END RSA PRIVATE KEY-----
  run_list:
    - role[my-server]
  environment: production

output: {all: '| tee -a /var/log/cloud-init-output.log'}
4

4 に答える 4

1

ソース コードによると (ドキュメントではありません!)、chef-client は「install_type: gems」の場合にのみ実行されます。そして、v.0.7.7 までこれを制御することはできません。

実際に実行したい人のために、cloud-init 0.7.7 でオプション「exec: true」が追加されました。これは、「install_type: gems」を true に設定し、それ以外を false に設定します。

于 2015-02-04T11:11:21.783 に答える
0

以下のように、chef-client をインストール/設定し、それを cfn-init から 1 回実行することができます。これは、以下のように cloud-init で実行されます。cloudfromation テンプレートとcfn-initメタデータの呼び出しについては、aws ドキュメントを参照してください。

ステップ 1 : メタデータのファイル セクションを使用して、chef-client インストーラーをノードにコピーします。

"files" : {
"c:/chef-client-12.04.exe" : {
"sorce" : "https://s3:link to file "
},
"client.rb" :{
"content":"..."}
"validation.pem":{..}
}

ステップ 2 : インストーラーを実行して、chef をクラウド フォーメーションにインストールするコードを追加します。

"commands": {
"1-install-chef": { 
"command":"msiexec /qn /i d:\\yourFolder\\chef-client-12.04.exe     ADDLOCAL=\"ChefClientFeature,ChefServiceFeature\"",
"waitAfterCompletion" :"1"
 }
 }

ステップ 3 : cloud-init から Chef クライアントを 1 回実行する

"commands": {
"run-chef-client": { 
"command":"chef-client >c:\cheflogfile.log",
"waitAfterCompletion" :"1"
 }
 }

注意: Chef-client をサービスとして設定したくない場合は、インストール部分から ADDLOCAL=\"ChefClientFeature,ChefServiceFeature\" を削除してください。

正確な json 構文については、cfn-init リンクを参照してください。

于 2015-01-15T09:19:46.957 に答える