如何更改 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 组合,您只能玩 suiteplatformname,即获得 production-abccom。这个名字是 computed here in test-kitchen,例如,所有的点都被去掉了,不能简单地改变。

不过,如果我没有理解错的话,你想改变这个名字:这对我来说意义不大。不要改变它。

VirtualBox 中虚拟机的名称

VM 的名称(例如 kitchen-default-prodabcom_..default_1234..)是派生的 here in kitchen-vagrant,不能轻易更改。

我发现这个问题是因为我在测试多个启用厨房的存储库的场景中,每个存储库包含多个平台。例如

  1. 弹性搜索
    • centos-6
    • centos-7
  2. 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_suffixvar_domain 来为您的框设置任意名称
---
driver:
  name: vagrant
  network: 
    - ["private_network", { type: "dhcp" }]
  vagrantfile_erb: Vagrantfile.erb
  #var_domain: sometingsomething
  var_suffix: testbox