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' do
  action :install
end

service 'nginx' do
  action [: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' do
  action :install
end

service 'nginx' do
  action [:enable, :start]
end

重新应用配置

只需要重新应用配置,不需要重启虚拟机

执行shell

在Vagrantfile文件中,加入

复制代码
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y apache2
  SHELL

这样就能执行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,也没解决问题...

相关推荐
未来之窗软件服务1 天前
一体化系统(九)智慧社区综合报表——东方仙盟练气期
大数据·前端·仙盟创梦ide·东方仙盟·东方仙盟一体化
陈天伟教授1 天前
人工智能训练师认证教程(2)Python os入门教程
前端·数据库·python
信看1 天前
NMEA-GNSS-RTK 定位html小工具
前端·javascript·html
Tony Bai1 天前
【API 设计之道】04 字段掩码模式:让前端决定后端返回什么
前端
上海蓝色星球1 天前
迈向智慧电网新纪元:上海蓝色星球数字孪生变电主子站系统
运维·数据库
苏打水com1 天前
第十四篇:Day40-42 前端架构设计入门——从“功能实现”到“架构思维”(对标职场“大型项目架构”需求)
前端·架构
king王一帅1 天前
流式渲染 Incremark、ant-design-x markdown、streammarkdown-vue 全流程方案对比
前端·javascript·人工智能
苏打水com1 天前
第十八篇:Day52-54 前端跨端开发进阶——从“多端适配”到“跨端统一”(对标职场“全栈化”需求)
前端
Bigger1 天前
后端拒写接口?前端硬核自救:纯前端实现静态资源下载全链路解析
前端·浏览器·vite