gem 'kitchen-docker', '>= 2.9' | gem 'kitchen-docker', '>= 2.9' | ||||
gem 'kitchen-inspec', '>= 1.1' | gem 'kitchen-inspec', '>= 1.1' | ||||
gem 'kitchen-salt', '>= 0.6.0' | gem 'kitchen-salt', '>= 0.6.0' | ||||
group :vagrant do | |||||
gem 'kitchen-vagrant' | |||||
end |
^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^ | ||||
Gives you SSH access to the instance for manual testing. | Gives you SSH access to the instance for manual testing. | ||||
Testing with Vagrant | |||||
-------------------- | |||||
Windows testing is done with ``kitchen-salt``. | |||||
Requirements | |||||
^^^^^^^^^^^^ | |||||
* Ruby | |||||
* Virtualbox | |||||
* Vagrant | |||||
Setup | |||||
^^^^^ | |||||
.. code-block:: bash | |||||
$ gem install bundler | |||||
$ bundle install --with=vagrant | |||||
$ bin/kitchen test [platform] | |||||
Where ``[platform]`` is the platform name defined in ``kitchen.yml``, | |||||
e.g. ``windows``. | |||||
Note | |||||
^^^^ | |||||
When testing using Vagrant you must set the environment variable ``KITCHEN_LOCAL_YAML`` to ``kitchen.vagrant.yml``. For example: | |||||
.. code-block:: bash | |||||
$ KITCHEN_LOCAL_YAML=kitchen.vagrant.yml bin/kitchen test # Alternatively, | |||||
$ export KITCHEN_LOCAL_YAML=kitchen.vagrant.yml | |||||
$ bin/kitchen test | |||||
Then run the following commands as needed. | |||||
``bin/kitchen converge`` | |||||
^^^^^^^^^^^^^^^^^^^^^^^^ | |||||
Creates the Vagrant instance and runs the ``salt.minion`` main state, ready for testing. | |||||
``bin/kitchen verify`` | |||||
^^^^^^^^^^^^^^^^^^^^^^ | |||||
Runs the ``inspec`` tests on the actual instance. | |||||
``bin/kitchen destroy`` | |||||
^^^^^^^^^^^^^^^^^^^^^^^ | |||||
Removes the Vagrant instance. | |||||
``bin/kitchen test`` | |||||
^^^^^^^^^^^^^^^^^^^^ | |||||
Runs all of the stages above in one go: i.e. ``destroy`` + ``converge`` + ``verify`` + ``destroy``. | |||||
``bin/kitchen login`` | |||||
^^^^^^^^^^^^^^^^^^^^^ | |||||
Gives you RDP access to the instance for manual testing. |
# -*- coding: utf-8 -*- | |||||
# vim: ft=yaml | |||||
--- | |||||
driver: | |||||
name: vagrant | |||||
platforms: | |||||
- name: windows-81 | |||||
driver: | |||||
box: techneg/win81x64-pro-salt | |||||
gui: false | |||||
linked_clone: true | |||||
provisioner: | |||||
init_environment: > | |||||
salt-call --local state.single file.managed | |||||
C:\Users\vagrant\AppData\Local\Temp\kitchen\srv\salt\win\repo-ng\salt-minion-py3.sls | |||||
source=https://github.com/saltstack/salt-winrepo-ng/raw/master/salt-minion-py3.sls | |||||
skip_verify=True makedirs=True | |||||
suites: | |||||
- name: v3000-py3 | |||||
provisioner: | |||||
state_top: | |||||
base: | |||||
'*': | |||||
- salt.minion | |||||
pillars: | |||||
top.sls: | |||||
base: | |||||
'*': | |||||
- salt | |||||
- v3000-py3 | |||||
pillars_from_files: | |||||
salt.sls: test/salt/pillar/salt.sls | |||||
v3000-py3.sls: test/salt/pillar/v3000-py3.sls | |||||
verifier: | |||||
inspec_tests: | |||||
- path: test/integration/v3000-py3 |
# frozen_string_literal: true | # frozen_string_literal: true | ||||
pkgs = | |||||
case platform[:family] | |||||
when 'windows' | |||||
%w[Salt\ Minion] | |||||
else | |||||
%w[salt-master salt-minion] | |||||
end | |||||
control 'salt packages' do | control 'salt packages' do | ||||
title 'should be installed' | title 'should be installed' | ||||
version = '3000.3' | version = '3000.3' | ||||
%w[ | |||||
salt-master | |||||
salt-minion | |||||
].each do |p| | |||||
pkgs.each do |p| | |||||
describe package(p) do | describe package(p) do | ||||
it { should be_installed } | it { should be_installed } | ||||
its('version') { should match(/^#{version}/) } | its('version') { should match(/^#{version}/) } |
# frozen_string_literal: true | # frozen_string_literal: true | ||||
services = | |||||
case platform[:family] | |||||
when 'windows' | |||||
%w[salt-minion] | |||||
else | |||||
%w[salt-master salt-minion] | |||||
end | |||||
control 'salt services' do | control 'salt services' do | ||||
title 'should be running' | title 'should be running' | ||||
%w[ | |||||
salt-master | |||||
salt-minion | |||||
].each do |p| | |||||
services.each do |p| | |||||
describe service(p) do | describe service(p) do | ||||
it { should be_installed } | it { should be_installed } | ||||
it { should be_enabled } | it { should be_enabled } |
- platform-name: amazon | - platform-name: amazon | ||||
- platform-name: oracle | - platform-name: oracle | ||||
- platform-name: arch | - platform-name: arch | ||||
- platform: windows |