2
0

test(windows): add local testing of Windows using Vagrant/Virtualbox

This commit is contained in:
Dafydd Jones 2020-06-11 02:21:18 +01:00
parent 1eca9c7551
commit 0465af72da
6 changed files with 123 additions and 8 deletions

View File

@ -5,3 +5,7 @@ source 'https://rubygems.org'
gem 'kitchen-docker', '>= 2.9'
gem 'kitchen-inspec', '>= 1.1'
gem 'kitchen-salt', '>= 0.6.0'
group :vagrant do
gem 'kitchen-vagrant'
end

View File

@ -251,3 +251,65 @@ Runs all of the stages above in one go: i.e. ``destroy`` + ``converge`` + ``veri
^^^^^^^^^^^^^^^^^^^^^
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.

38
kitchen.vagrant.yml Normal file
View File

@ -0,0 +1,38 @@
# -*- 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

View File

@ -1,14 +1,19 @@
# frozen_string_literal: true
pkgs =
case platform[:family]
when 'windows'
%w[Salt\ Minion]
else
%w[salt-master salt-minion]
end
control 'salt packages' do
title 'should be installed'
version = '3000.3'
%w[
salt-master
salt-minion
].each do |p|
pkgs.each do |p|
describe package(p) do
it { should be_installed }
its('version') { should match(/^#{version}/) }

View File

@ -1,12 +1,17 @@
# frozen_string_literal: true
services =
case platform[:family]
when 'windows'
%w[salt-minion]
else
%w[salt-master salt-minion]
end
control 'salt services' do
title 'should be running'
%w[
salt-master
salt-minion
].each do |p|
services.each do |p|
describe service(p) do
it { should be_installed }
it { should be_enabled }

View File

@ -17,3 +17,4 @@ supports:
- platform-name: amazon
- platform-name: oracle
- platform-name: arch
- platform: windows