vagrant和itamae怎么配合使用? (放弃)
先上结论:就没调成功!
主要在于报错:`create_node': undefined method `each' for nil (NoMethodError) 无法解决。
学习
安装vagrant参见:docker的开源跨平台替代Vagrant-CSDN博客
在vagrant中安装itamae插件
vagrant plugin install vagrant-itamae # 核心集成插件:ml-citation{ref="3" data="citationList"}
在 Vagrantfile
中添加 Itamae 配置:
Vagrant.configure("2") do |config|config.vm.box = "centos/7" # 指定基础镜像# 启用 Itamae 配置器config.vm.provision :itamae do |itamae|itamae.recipes = ['recipe.rb'] # 主配置脚本itamae.sudo = true # 以 sudo 权限运行itamae.log_level = :info # 日志级别end
end
写一个安装nginx的rb脚本recipe.rb
package 'nginx' doaction :install
endservice 'nginx' doaction [:enable, :start]
end
重新应用配置
只需要重新应用配置,不需要重启虚拟机
vagrant provision # 仅重新运行 Itamae 脚本
如果关闭,可以使用vagrant halt
如果挂起,可以使用vagrant suspend
The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
实践
在vagrant安装ubuntu22.04系统
安装ubuntu22.04, 选择这个镜像generic/ubuntu2204 :HashiCorp Cloud Platform
分步操作,新建ub22目录,然后在目录里面使用init初始化
vagrant init generic/ubuntu2204
vagrant下载和启动容器
vagrant up
如果下载很慢,可以考虑使用加速镜像,比如使用中科大的镜像。
http://mirrors.ustc.edu.cn/ubuntu-cloud-images/jammy/current/jammy-server-cloudimg-amd64-vagrant.box
使用镜像加速下载,先box add ,然后init。
# 下载镜像
vagrant box add myubuntu22 http://mirrors.ustc.edu.cn/ubuntu-cloud-images/jammy/current/jammy-server-cloudimg-amd64-vagrant.box# init
vagrant init myubuntu22 http://mirrors.ustc.edu.cn/ubuntu-cloud-images/jammy/current/jammy-server-cloudimg-amd64-vagrant.box# 或者直接
vagrant init myubuntu22
输出:
vagrant box add myubuntu22 http://mirrors.ustc.edu.cn/ubuntu-cloud-images/jammy/current/jammy-server-cloudimg-amd64-vagrant.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'myubuntu22' (v0) for provider: (amd64)
box: Downloading: http://mirrors.ustc.edu.cn/ubuntu-cloud-images/jammy/current/jammy-server-cloudimg-amd64-vagrant.box
==> box: Successfully added box 'myubuntu22' (v0) for '(amd64)'!
(base) skywalk@hpg6:~/vm/ub22$ vagrant box list
centos/7 (virtualbox, 2004.01)
generic/freebsd14 (virtualbox, 4.3.12, (amd64))
myubuntu22 (virtualbox, 0, (amd64))
初始化:
vagrant init myubuntu22 http://mirrors.ustc.edu.cn/ubuntu-cloud-images/jammy/current/jammy-server-cloudimg-amd64-vagrant.box
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
启动
vagrant up
ssh联通虚拟机
vagrant ssh
在 Vagrantfile
中添加 Itamae 配置:
Vagrant.configure("2") do |config|config.vm.box = "centos/7" # 指定基础镜像# 启用 Itamae 配置器config.vm.provision :itamae do |itamae|itamae.recipes = ['recipe.rb'] # 主配置脚本itamae.sudo = true # 以 sudo 权限运行itamae.log_level = :info # 日志级别end
end
写一个安装nginx的rb脚本recipe.rb
package 'nginx' doaction :install
endservice 'nginx' doaction [:enable, :start]
end
重新应用配置
只需要重新应用配置,不需要重启虚拟机
执行shell
在Vagrantfile文件中,加入
config.vm.provision "shell", inline: <<-SHELLapt-get updateapt-get install -y apache2SHELL
这样就能执行apt update了
同样的方法,我们可以在Ubunut系统中安装任何库。
总结
但是最终没有调试成功。先搁置
调试
出现报错`create_node': undefined method `each' for nil (NoMethodError)
vagrant provision
==> default: Running provisioner: itamae...INFO : Starting Itamae...
/home/skywalk/.vagrant.d/gems/3.3.8/gems/itamae-1.14.1/lib/itamae/runner.rb:114:in `create_node': undefined method `each' for nil (NoMethodError)@options.fetch(:node_json, []).each do |name|^^^^^from /home/skywalk/.vagrant.d/gems/3.3.8/gems/itamae-1.14.1/lib/itamae/runner.rb:36:in `initialize'from /home/skywalk/.vagrant.d/gems/3.3.8/gems/itamae-1.14.1/lib/itamae/runner.rb:15:in `new'from /home/skywalk/.vagrant.d/gems/3.3.8/gems/itamae-1.14.1/lib/itamae/runner.rb:15:in `run'from /home/skywalk/.vagrant.d/gems/3.3.8/gems/vagrant-itamae-0.2.1/lib/vagrant-itamae/provisioner.rb:19:in `provision'from /tmp/.mount_vagranffIAjC/gems/gems/vagrant-2.4.8/lib/vagrant/action/builtin/provision.rb:141:in `run_provisioner'from /tmp/.mount_vagranffIAjC/gems/gems/vagrant-2.4.8/lib/vagrant/action/warden.rb:117:in `call'from /tmp/.mount_vagranffIAjC/gems/gems/vagrant-2.4.8/lib/vagrant/action/warden.rb:117:in `block in finalize_action'from /tmp/.mount_vagranffIAjC/gems/gems/vagrant-2.4.8/lib/vagrant/action/warden.rb:38:in `call'from /tmp/.mount_vagranffIAjC/gems/gems/vagrant-2.4.8/lib/vagrant/action/builder.rb:183:in `call'
原来需要加上node.json
itamae.node_json = 'node.json' # 必须指定有效的JSON文件路径
不行,继续处理
继续处理报错:* The following settings shouldn't exist: node_json, recipe
方案 A – 升级到最新的 vagrant‑itamae
(推荐)
# 卸载旧版
vagrant plugin uninstall vagrant-itamae# 安装最新版(截至 2024‑06 为 0.2.2+)
vagrant plugin install vagrant-itamae
# 若想指定版本(例如 0.2.2)
# vagrant plugin install vagrant-itamae --plugin-version 0.2.2
使用了多个AI,也没解决问题...