我有一个有效的 CloudFormation 模板,其中包含用户数据和 cloud-init,成功连接并构建到托管的 Chef 服务器。我在 AWS EC2 库存图像上使用 Ubuntu 12.04。
出于我自己的目的,我想继续这样做,但是
1)不将 Chef 配置为作为服务运行,仅按需运行(“sudo chef-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'}