在 test-kitchen 中,个人使用的驱动程序和配置为.kitchen.yml文件的组合

ChefDK导入后,使用chef generate cookbook命令创建cookbook时,生成的.kitchen.yml是支持以下组合的配置文件。

    • ローカルのVirtualBox上 ubuntu, centos

 

    • Chef

 

    Inspec

然而,test-kitchen可以在各种组合中使用。

目标:

    • ローカルのVirtualBox上 ubuntu, centos

 

    • ローカルのdocker 上 ubuntu, centos

 

    既に稼働している既存のサーバー

部署工具

    • chef (対象にchef-clientを導入してchefzeroモードで適用)

 

    • ansible (ローカルに導入されたansibleからリモート適用)

 

    ansible (対象に導入してローカルモードで適用)

个人而言,我通常会经常使用以下组合。

VirtualBoxdocker既存のサーバーChefChefレシピ開発軽いChef動作確認Chefサーバー無しでの既存サーバー管理Ansible(リモート反映)Ansibleプレイブック開発軽いAnsible動作確認

如果需要测试,则使用Inspec。

对于将Ansible(远程反映)应用于现有服务器的情况,只需使用ansible-playbook命令就可以处理,因此其优点会稍稍减弱。

个人而言,不使用Ansible(本地反映)的情况,但在需要更改Ansible版本并进行测试的情况下可能很有用。

厨师 + 虚拟机

驱动程序: Vagrant
配置程序: Chef Zero

使用chefDK提供的chef命令来创建cookbook的模板,并设置为标准组合。

$ chef generate cookbook mybook
Generating cookbook mybook
- Ensuring correct cookbook file content
- Committing cookbook files to git
- Ensuring delivery configuration
- Ensuring correct delivery build cookbook content
- Adding delivery configuration to feature branch
- Adding build cookbook to feature branch
- Merging delivery content feature branch to master

Your cookbook is ready. Type `cd mybook` to enter it.

There are several commands you can run to get started locally developing and testing your cookbook.
Type `delivery local --help` to see a full list.

Why not start by writing a test? Tests for the default recipe are stored at:

test/integration/default/default_test.rb

If you'd prefer to dive right in, the default recipe can be found at:

recipes/default.rb
---
driver:
  name: vagrant

provisioner:
  name: chef_zero
  # You may wish to disable always updating cookbooks in CI or other testing environments.
  # For example:
  #   always_update_cookbooks: <%= !ENV['CI'] %>
  always_update_cookbooks: true

verifier:
  name: inspec

platforms:
  - name: ubuntu-16.04
  - name: centos-7

suites:
  - name: default
    run_list:
      - recipe[mybook::default]
    verifier:
      inspec_tests:
        - test/integration/default
    attributes:

需要在本地计算机上安装 VirtualBox 和 Vagrant 才能继续操作。

Ansible(远程部署)+ VirtualBox

驱动程序:Vagrant
配置工具:Ansible(推送方式)

---
driver:
  name: vagrant

provisioner:
  name: ansible_push    # https://github.com/ahelal/kitchen-ansiblepush
  sudo: true
  chef_bootstrap_url: nil
  use_instance_name: true

verifier:
  name: inspec

platforms:
  - name: centos-7

suites:
  - name: ansiblepush
    provisioner:
      playbook:  site.yml
    verifier:
      inspec_tests:
        - test/integration/default
    attributes:

在 Ansible 相关的 provisioner 中,存在两个选项:ansible 和 ansible_push。然而,通常使用 ansible_push 来使用本地机器的 Ansible。

请参考:

    • kitchen-ansiblepushを利用したAnsible roleのテスト環境構築

 

    test-kitchenによるvagrantノードへのansible_pushによる収束と変数を連携してのinspecによるテスト

厨师 + Docker

司机:dokken
供应商:dokken(厨师)

<% cookbook = %x( awk '$1 == "name" {print $2}' metadata.rb ).chomp.gsub(/['"]/, '') %>
---
driver:
  name: dokken
  chef_version: latest

transport:
  name: dokken

provisioner:
  name: dokken

verifier:
  name: inspec
  inspec_tests:
    - test/integration/default

platforms:
  - name: centos-7
    driver:
      image: dokken/centos-7

suites:
  - name: default
    run_list:
    - recipe[<%= cookbook %>::default]

前提条件是本地已经安装了ChefDK和Docker。
kitchen-dokken包含在ChefDK中。

参考:

    • GitHub – someara/kitchen-dokken: rokken

 

    • [和訳] Kitchen-DockerかKitchen-Dokkenか? Test KitchenとDockerを使用してCookbookのテストを高速化 #getchef #kitchenci #docker

 

    kitchen-docker を断念した人は kitchen-dokken を試してみよう – Qiita

Ansible(远程映射)+ Docker

驱动程序:Docker
配置程序:Ansible Push

---
driver:
  name: docker

provisioner:
  name: ansible_push
  chef_bootstrap_url: nil
  become: true

verifier:
  name: inspec

platforms:
  #- name: ubuntu-16.04
  - name: centos-7

suites:
  - name: ansiblepush
    provisioner:
      playbook: site.yml
    verifier:
      inspec_tests:
        - test/integration/default

需要先安装 kitchen-docker gem。
$ gem install kitchen-docker

Refer to:

    • kitchen-ansiblepushを利用したAnsible roleのテスト環境構築

 

    test-kitchenによるvagrantノードへのansible_pushによる収束と変数を連携してのinspecによるテスト

厨师 + 现有服务器

驾驶员:代理
供应商:chef_zero

对具有SSH连接功能的现有服务器进行由Chef进行的更改。

<% hosts = ENV['HOSTS'].split(',') %>
<% cookbook = %x( awk '$1 == "name" {print $2}' metadata.rb ).chomp.gsub(/['"]/, '') %>
---
provisioner:
  name: chef_zero
  always_update_cookbooks: true
  sudo: false
  product_name: chef
  install_strategy: skip
  data_path: data

verifier:
  name: inspec
  sudo: false
  inspec_tests:
    - test/integration/default

platforms:
  - name: unix
    run_list:
      - recipe[<%= cookbook %>::default]

suites:
<% 
  hosts.each do |host| 
%>
  - name: <%= host %>
    driver:
      name: proxy
      host: <%= host %>
      sudo: false
      reset_command: 'exit 0'
      ssh_key: ~/.ssh/id_rsa
<% end %>

设置环境变量HOSTS以指定连接目标并调用kitchenCI。
加上 -p 可以实现并行执行。

运行以下命令进行测试:$ env HOSTS=node1,node2 kitchen test

广告
将在 10 秒后关闭
bannerAds