无需Chef Server使用Chef Solo:能否从其他机器/GitHub拉取资源运行?
当然可以这么做!
Chef Solo完全支持把cookbooks、roles和environments这类资源存放在远程机器或者GitHub账户中,拉取到目标主机后再执行配置。下面是几种常用的实现方案:
方案1:通过GitHub(或其他Git仓库)拉取资源
这是最常用的方式,版本控制也更方便:
- 先在目标主机上安装Git,确保能正常访问你的GitHub仓库。如果是私有仓库,记得配置好SSH密钥(把主机的公钥添加到GitHub账户),或者用HTTPS方式搭配个人访问令牌(避免每次输入密码)。
- 写一个简单的启动脚本,先把仓库克隆到本地Chef工作目录,比如
/var/chef/repo:# 首次克隆 git clone https://github.com/your-username/chef-repo.git /var/chef/repo # 如果是更新资源,用下面的命令替代克隆 # cd /var/chef/repo && git pull - 接着在你的
solo.rb配置文件里指定这些资源的本地路径:cookbook_path "/var/chef/repo/cookbooks" role_path "/var/chef/repo/roles" environment_path "/var/chef/repo/environments" - 最后运行Chef Solo即可:
chef-solo -c /path/to/solo.rb -j /path/to/node.json
方案2:从远程HTTP服务器下载压缩包
如果不想用Git,也可以把资源打包后放在远程HTTP服务器上:
- 先把cookbooks、roles、environments打包成
tar.gz或zip格式,上传到你的HTTP服务器。 - 在目标主机上用
wget或curl下载并解压到Chef工作目录:wget https://your-remote-server/chef-resources.tar.gz -O /tmp/chef-resources.tar.gz tar -xzf /tmp/chef-resources.tar.gz -C /var/chef/ - 同样在
solo.rb里配置好资源路径,再执行Chef Solo命令。
一些实用提示
- 可以把拉取资源和运行Chef Solo的命令整合到一个shell脚本里,这样每次执行只需要运行这一个脚本,省事不少。
- 如果使用environments,记得在
node.json里指定要使用的环境,或者在运行Chef Solo时加上-E <environment-name>参数来指定。 - 对于私有仓库的HTTPS访问,URL可以写成
https://<your-personal-access-token>@github.com/your-username/chef-repo.git,这样就不需要手动输入密码了。
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

