kitchen-habitat
A Test Kitchen Provisioner for Habitat
Requirements
Installation & Setup
You'll need the test-kitchen & kitchen-habitat gems installed in your system, along with kitchen-vagrant or some other suitable driver for test-kitchen.
Configuration Settings
-
hab_license: Habitat license acceptance type (for more information please read the chef license documentation). -
hab_version: The version of habitat to be used in test kitchen.
Depot settings
-
depot_url- Target Habitat Depot to use to install packages.
- Defaults to
nil(which will use the default depot settings for thehabCLI from ~/.hab/etc/cli.toml).
Supervisor Settings
-
hab_sup_origin- Package identification for the supervisor to use.
- Defaults to
core, or, ifhab_sup_artifact_nameis supplied, thehab_sup_originwill be parsed from the filename of the hart file.
-
hab_sup_name- Name of the supervisor package
- Defaults to
hab-sup, or, ifhab_sup_artifact_nameis supplied, thehab_sup_namewill be parsed from the filename of the hart file.
-
hab_sup_version- Version number of
hab-supto run - Defaults to
nil, or, ifhab_sup_artifact_nameis supplied, thehab_sup_versionwill be parsed from the filename of the hart file.
- Version number of
-
hab_sup_release- Release of the
hab-suppackage to run - Defaults to
nil, or, ifhab_sup_artifact_nameis supplied, thehab_sup_releasewill be parsed from the filename of the hart file.
- Release of the
-
hab_sup_artifact_name- Artifact package name for a custom supervisor to run
- Used to upload and test a local supervisor.
- Package should be located in the
results_directory - Defaults to `nil
-
hab_sup_listen_http- Port for the supervisor's sidecar to listen on.
- Defaults to
nil
-
hab_sup_listen_gossip- Port for the supervisor's gossip communication
- Defaults to
nil
-
hab_sup_group- Service group for the supervisor to belong do.
- Default is
default
-
hab_sup_bind- Service group for the supervisor to bind to.
- Default is
[]
-
hab_sup_peer- IP and port (e.g.
192.168.1.86:9010) of the supervisor of which to connect to join the ring. - Default is
[]
- IP and port (e.g.
-
hab_sup_ring- Ring key name
- Default is
nil
Package Settings
-
artifact_name- Artifact package filename to install and run.
- Used to upload and test a local artifact.
- Package should be located in the
results_directory - Example -
core-jq-static-1.5-20170127185151-x86_64-linux.hart - Defaults to
nil
-
results_directory- Directory (relative to the location of the .kitchen.yml) containing package artifacts (harts) to copy to the remote system
- Defaults to checking the local directory for a
resultsdirectory, then its parent (../results) and grandparent (../../results), which should accommodate most studio layouts.
-
package_origin- Origin for the package to run.
- Defaults to
core, or, ifartifact_nameis supplied, thepackage_originwill be parsed from the filename of the hart file.
-
package_name- Package name for the supervisor to run.
- Defaults to the suite name or, if
artifact_nameis supplied, thepackage_namewill be parsed from the filename of the hart file.
-
package_version- Package version of the package to be run.
- Defaults to
nilor ifartifact_nameis supplied, thepackage_versionwill be parsed from the filename of the hart file.
-
package_release- Package release of the package to be run.
- Defaults to
nilor ifartifact_nameis supplied, thepackage_releasewill be parsed from the filename of the hart file.
-
service_topology- The topology for the service to run in. Valid values are
nil,standalone,leader - Defaults to
nilwhich isstandalone
- The topology for the service to run in. Valid values are
-
service_update_strategy- Describes how package updates are to be applied. Valid values are
nil,at-once,rolling. - Default is
nil, which does not check for package updates.
- Describes how package updates are to be applied. Valid values are
-
config_directory- Directory containing a user.toml or/and a default.toml, hooks, and configuration files to be passed to the service under test.
- Defaults to
nil
-
override_package_config- Tell the supervisor to load the the configuration files and hooks from
config_directoryinstead of what was packaged with the service. (Uses--config-fromvia thehab-supCLI.)
- Tell the supervisor to load the the configuration files and hooks from
-
user_toml_name- Name of the file to be used as the user.toml for the service under test.
- Defaults to
user.toml
-
install_latest_artifact- Choose to install latest artifact.
- Must specify
artifact_nameorpackage_originandpackage_name -
package_versionandpackage_releasewill be ignored - Defaults to
false
EAS Application Dashboard Settings
-
event_stream_application- The name of your application.
- Defaults to
nil
-
event_stream_environment- The application environment for this supervisor.
- Defaults to
nil
-
event_stream_site- Describes the physical (for example, datacenter) or cloud-specific (for example, the AWS region) location where your services are deployed.
- Defaults to
nil
-
event_stream_url- The Chef Automate URL with port 4222 specified.
- Defaults to
nil
-
event_stream_token- Chef Automate Token
- Defaults to
nil
NOTE: All 5 EAS settings are required for it to report to Automate.
Examples
Run the core-redis package
driver:
name: vagrant
provisioner:
name: habitat
hab_sup_origin: core
hab_sup_name: sup
package_origin: core
package_name: redis
platforms:
- name: ubuntu-16.04
suites:
- name: defaultTwo node: elasticsearch and kibana
driver:
name: docker
provisioner:
name: habitat
hab_sup_origin: core
hab_sup_name: sup
platforms:
- name: ubuntu-16.04
suites:
- name: elasticsearch
provisioner:
package_origin: core
package_name: elasticsearch
driver:
instance_name: elastic
- name: kibana
provisioner:
package_origin: core
package_name: kibana
hab_sup_peer:
- elastic
hab_sup_bind:
- elasticsearch:elasticsearch.default
driver:
instance_name: kibana
links: elastic:elasticEAS Application Dashboard Example
---
driver:
name: azurerm
driver_config:
subscription_id: <%= ENV['subscription_id'] %>
location: <%= ENV['region'] %>
machine_size: "Standard_DS2_v2"
verifier:
name: inspec
provisioner:
name: habitat
hab_version: 'latest'
hab_license: accept
event_stream_application: Effortless
event_stream_environment: stable
event_stream_site: <%= ENV['region'] %>
event_stream_url: automate.example.com:4222
event_stream_token: <%= ENV['automate_token'] %>
platforms:
- name: windows
driver:
image_urn: MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest
vm_name: windows
provisioner:
package_origin: <%= ENV['package_orgin'] %>
package_name: <%= ENV['package_name'] %>
suites:
- name: default
verifier:
inspec_tests:
- testsLatest Artifact example
This example assumes you've already done a build via hab studio.
driver:
name: vagrant
customize:
memory: 2048
verifier:
name: inspec
provisioner:
name: habitat
hab_version: 'latest'
hab_license: accept
platforms:
- name: wildfly-local
driver:
box: bento/ubuntu-16.04
provisioner:
package_origin: jmassardo
package_name: wildfly
results_directory: results
install_latest_artifact: true
suites:
- name: default
verifier:
inspec_tests:
- testsApply user.toml Example
This example assumes that you have a
/configs/user.tomlin your project directory.
driver:
name: vagrant
customize:
memory: 2048
verifier:
name: inspec
provisioner:
name: habitat
hab_version: 'latest'
hab_license: accept
platforms:
- name: wildfly
driver:
box: bento/ubuntu-16.04
provisioner:
package_origin: jmassardo
package_name: wildfly
channel: unstable
config_directory: configs
suites:
- name: default
verifier:
inspec_tests:
- tests