如何更改 Chef kitchen.yml 中的框名称?
How to change box name in Chef kitchen.yml?
我按以下方式创建了我的 kitchen.yml
:
---
driver:
name: vagrant
customize:
memory: 2048
driver_config:
require_chef_omnibus: true
use_vagrant_berkshelf_plugin: true
provisioner:
name: chef_zero
chef_omnibus_url: http://box-url/install.sh
platforms:
- name: prod.abc.com
driver:
box_url: http://abc.box
run_list:
- role[new_role]
suites:
- name: default
在上面的 kitchen.yml
中,我得到机器的主机名 default-prodabccom
。但是,我希望主机名是 prod.abc.com
我应该在 kitchen.yml
中做哪些更改才能获得正确的名称?
访客系统的主机名
为了在 VM 中定义操作系统 运行 的主机名(参见 /etc/hostname
),使用 [= 的 vm_hostname
选项39=]driver:
platforms:
- name: prod.abc.com
driver_config:
vm_hostname: prod.abc.com
Test-Kitchen Suite/Platform
的名称
要重命名 Converging <default-prodabccom>
中显示的 suite-platform 组合,您只能玩 suite
和 platform
的 name
,即获得 production-abccom
。这个名字是 computed here in test-kitchen,例如,所有的点都被去掉了,不能简单地改变。
不过,如果我没有理解错的话,你想改变这个名字:这对我来说意义不大。不要改变它。
VirtualBox 中虚拟机的名称
VM 的名称(例如 kitchen-default-prodabcom_..default_1234..
)是派生的 here in kitchen-vagrant,不能轻易更改。
我发现这个问题是因为我在测试多个启用厨房的存储库的场景中,每个存储库包含多个平台。例如
- 弹性搜索
- centos-6
- centos-7
- java
- centos-6
- centos-7
当它们像这样旋转时,您可以通过 virtualbox 为这些机器提供它们自己的 ip;
driver:
name: vagrant
network:
- ["private_network", { type: "dhcp" }]
这有利于测试,如果有什么东西失败了,你可以直接到盒子里。你可以使用 vagrant HostManager
插件来让你的 /etc/hosts
更新当前的 ip 地址。
因此您可以在本地浏览器中 http://default-centos-74.vagrantup.com 检查该实例。您还可以以这样的方式命名您的套件,它会导致每个套件在 repos 中都有唯一的名称,例如像这样给每个套件加上前缀;
suites:
- name: elasticsearch-default
和其他 .kitchen.yml
suites:
- name: java-default
这仍然会导致有用的命名;
http://elasticsearch-default-centos-74.vagrantup.com
然而最近发生的事情是 chrome 和 firefox 已经开始执行 HSTS 这使得试图访问 non-HTTPS 本地站点,使用 /etc/hosts
PITA 映射.
主要是去掉vagrantup.com后缀。然而,这是硬编码的,覆盖它的唯一选择是在 .kitchen.yml
中,这是不幸的,因为它在生成 Vagrantfile 时不知道套件和平台,所以它没有多大用处。
您可以使用 chef/ansible 重命名框,但这不是很好。我想出的解决方案是这样的;
您可以在 .kitchen.yml
中设置自定义 Vagrantfile.erb
;
---
driver:
name: vagrant
network:
- ["private_network", { type: "dhcp" }]
vagrantfile_erb: Vagrantfile.erb
然后将 Vagrantfile.erb
从本地框中的 gem 复制到 test-kitchen 存储库的根目录中。我的是 /home/user1/.gem/ruby/gems/kitchen-vagrant-1.3.0/templates/Vagrantfile.erb
然后您通过在第 36 行更改它来为您的框设置任意名称;
c.vm.hostname = "<%= @instance.name %>.<%=
config[:kitchen_root].split('/')[-1] %>.testbox"
或者您可以像这样修改它,并允许从 .kitchen.yml config
36c36
< c.vm.hostname = "<%= config[:vm_hostname] %>"
---
> c.vm.hostname = "<%= @instance.name %>.<%= config[:var_domain] ? config[:var_domain] : config[:kitchen_root].split('/')[-1] %>.<%= config[:var_suffix] ? config[:var_suffix] : "vagrantup.com" %>"
99d98
<
https://gist.github.com/tolland/fe01eb0f46d26850cc5c98e167578f7b
然后通过在 .kitchen.yml
中设置 var_suffix
和 var_domain
来为您的框设置任意名称
---
driver:
name: vagrant
network:
- ["private_network", { type: "dhcp" }]
vagrantfile_erb: Vagrantfile.erb
#var_domain: sometingsomething
var_suffix: testbox
我按以下方式创建了我的 kitchen.yml
:
---
driver:
name: vagrant
customize:
memory: 2048
driver_config:
require_chef_omnibus: true
use_vagrant_berkshelf_plugin: true
provisioner:
name: chef_zero
chef_omnibus_url: http://box-url/install.sh
platforms:
- name: prod.abc.com
driver:
box_url: http://abc.box
run_list:
- role[new_role]
suites:
- name: default
在上面的 kitchen.yml
中,我得到机器的主机名 default-prodabccom
。但是,我希望主机名是 prod.abc.com
我应该在 kitchen.yml
中做哪些更改才能获得正确的名称?
访客系统的主机名
为了在 VM 中定义操作系统 运行 的主机名(参见 /etc/hostname
),使用 [= 的 vm_hostname
选项39=]driver:
platforms:
- name: prod.abc.com
driver_config:
vm_hostname: prod.abc.com
Test-Kitchen Suite/Platform
的名称要重命名 Converging <default-prodabccom>
中显示的 suite-platform 组合,您只能玩 suite
和 platform
的 name
,即获得 production-abccom
。这个名字是 computed here in test-kitchen,例如,所有的点都被去掉了,不能简单地改变。
不过,如果我没有理解错的话,你想改变这个名字:这对我来说意义不大。不要改变它。
VirtualBox 中虚拟机的名称
VM 的名称(例如 kitchen-default-prodabcom_..default_1234..
)是派生的 here in kitchen-vagrant,不能轻易更改。
我发现这个问题是因为我在测试多个启用厨房的存储库的场景中,每个存储库包含多个平台。例如
- 弹性搜索
- centos-6
- centos-7
- java
- centos-6
- centos-7
当它们像这样旋转时,您可以通过 virtualbox 为这些机器提供它们自己的 ip;
driver:
name: vagrant
network:
- ["private_network", { type: "dhcp" }]
这有利于测试,如果有什么东西失败了,你可以直接到盒子里。你可以使用 vagrant HostManager
插件来让你的 /etc/hosts
更新当前的 ip 地址。
因此您可以在本地浏览器中 http://default-centos-74.vagrantup.com 检查该实例。您还可以以这样的方式命名您的套件,它会导致每个套件在 repos 中都有唯一的名称,例如像这样给每个套件加上前缀;
suites:
- name: elasticsearch-default
和其他 .kitchen.yml
suites:
- name: java-default
这仍然会导致有用的命名;
http://elasticsearch-default-centos-74.vagrantup.com
然而最近发生的事情是 chrome 和 firefox 已经开始执行 HSTS 这使得试图访问 non-HTTPS 本地站点,使用 /etc/hosts
PITA 映射.
主要是去掉vagrantup.com后缀。然而,这是硬编码的,覆盖它的唯一选择是在 .kitchen.yml
中,这是不幸的,因为它在生成 Vagrantfile 时不知道套件和平台,所以它没有多大用处。
您可以使用 chef/ansible 重命名框,但这不是很好。我想出的解决方案是这样的;
您可以在 .kitchen.yml
中设置自定义 Vagrantfile.erb
;
---
driver:
name: vagrant
network:
- ["private_network", { type: "dhcp" }]
vagrantfile_erb: Vagrantfile.erb
然后将 Vagrantfile.erb
从本地框中的 gem 复制到 test-kitchen 存储库的根目录中。我的是 /home/user1/.gem/ruby/gems/kitchen-vagrant-1.3.0/templates/Vagrantfile.erb
然后您通过在第 36 行更改它来为您的框设置任意名称;
c.vm.hostname = "<%= @instance.name %>.<%=
config[:kitchen_root].split('/')[-1] %>.testbox"
或者您可以像这样修改它,并允许从 .kitchen.yml config
36c36
< c.vm.hostname = "<%= config[:vm_hostname] %>"
---
> c.vm.hostname = "<%= @instance.name %>.<%= config[:var_domain] ? config[:var_domain] : config[:kitchen_root].split('/')[-1] %>.<%= config[:var_suffix] ? config[:var_suffix] : "vagrantup.com" %>"
99d98
<
https://gist.github.com/tolland/fe01eb0f46d26850cc5c98e167578f7b
然后通过在 .kitchen.yml
中设置var_suffix
和 var_domain
来为您的框设置任意名称
---
driver:
name: vagrant
network:
- ["private_network", { type: "dhcp" }]
vagrantfile_erb: Vagrantfile.erb
#var_domain: sometingsomething
var_suffix: testbox