test-kitchen において個人的に使う driver, provisioner の組み合わせと.kitchen.yml
ChefDK導入後にchef generate cookbookコマンドを用いてcookbookを作成した場合に構成されるkitchenCIの設定ファイル .kitchen.yml は、以下の組み合わせをサポートする。
- ローカルのVirtualBox上 ubuntu, centos
- Chef
- Inspec
しかし、test-kitchenは様々な組み合わせで使用する事ができる。
対象:
- ローカルのVirtualBox上 ubuntu, centos
- ローカルのdocker 上 ubuntu, centos
- 既に稼働している既存のサーバー
デプロイツール
- chef (対象にchef-clientを導入してchefzeroモードで適用)
- ansible (ローカルに導入されたansibleからリモート適用)
- ansible (対象に導入してローカルモードで適用)
個人的には以下の組み合わせで使う事が多い。
VirtualBox | docker | 既存のサーバー | |
---|---|---|---|
Chef | Chefレシピ開発 | 軽いChef動作確認 | Chefサーバー無しでの既存サーバー管理 |
Ansible(リモート反映) | Ansibleプレイブック開発 | 軽いAnsible動作確認 |
テストが必要な場合にはInspecを使用
Ansible(リモート反映)を既存のサーバーに反映させるケースは、ansible-playbookコマンドを生で使えば対応できるので、メリットは若干薄れる。
Ansible(ローカル反映)ケースは個人的には使用していないが、Ansibleのバージョンを変更してテストを行う必要がある場合には有用と思われる。
Chef + VirtualBox
driver: vagrant
provisioner: 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
driver: vagrant
provisioner: ansible_push
---
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 を使用する ansible_push を使用する。
参考:
- kitchen-ansiblepushを利用したAnsible roleのテスト環境構築
- test-kitchenによるvagrantノードへのansible_pushによる収束と変数を連携してのinspecによるテスト
Chef + Docker
driver: dokken
provisioner: dokken(chef)
<% 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
driver: docker
provisioner: 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
参考:
- kitchen-ansiblepushを利用したAnsible roleのテスト環境構築
- test-kitchenによるvagrantノードへのansible_pushによる収束と変数を連携してのinspecによるテスト
Chef + 既存サーバー
driver: proxy
provisioner: 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
Author And Source
この問題について(test-kitchen において個人的に使う driver, provisioner の組み合わせと.kitchen.yml), 我々は、より多くの情報をここで見つけました https://qiita.com/hiroyuki_onodera/items/459044d30715042b2ff4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .