kitchen-habitat 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +63 -0
- data/kitchen-habitat.gemspec +38 -0
- data/lib/kitchen-habitat/version.rb +5 -0
- data/lib/kitchen/provisioner/habitat.rb +153 -0
- metadata +140 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 214fe452fd77fdc55785e5f8d14b0187f1b940bf
|
|
4
|
+
data.tar.gz: c3e5686edd119d4c16b44393992362dfe86e759f
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 323f8e9d9b496645e4bee1e533fcbd91ba866164f2f62b72b21bbddd5249e503fa5384176cd0b00961fedb3fbc4bffeebc59b748f6fc08953515eb573589a306
|
|
7
|
+
data.tar.gz: c664eb0a7b82c7303e0ba62b1d7ffc1501e40ad49d0e52ecb72c91a49bc21b9042e856292fc00004bba025d4d73c10743570df316470aa5d6f977e4d5eacd2d4
|
data/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
[](http://badge.fury.io/rb/kitchen-habitat)
|
|
2
|
+
|
|
3
|
+
# kitchen-habitat
|
|
4
|
+
A Test Kitchen Provisioner for [Habitat](https://habitat.sh)
|
|
5
|
+
|
|
6
|
+
## Requirements
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## Installation & Setup
|
|
10
|
+
You'll need the test-kitchen & kitchen-habitat gems installed in your system, along with kitchen-vagrant or some ther suitable driver for test-kitchen.
|
|
11
|
+
|
|
12
|
+
## Configuration Settings
|
|
13
|
+
|
|
14
|
+
### Depot settings
|
|
15
|
+
|
|
16
|
+
* `depot_url`
|
|
17
|
+
* Target Habitat Depot to use to install packages.
|
|
18
|
+
* Defaults to `nil` (which will use the default depot settings for the `hab` CLI).
|
|
19
|
+
|
|
20
|
+
### Supervisor Settings
|
|
21
|
+
|
|
22
|
+
* `hab_sup`
|
|
23
|
+
* Package identification for the supervisor to use.
|
|
24
|
+
* Defaults to `core/hab-sup`
|
|
25
|
+
* `hab_sup_listen_http`
|
|
26
|
+
* Port for the supervisor's sidecar to listen on.
|
|
27
|
+
* Defaults to `nil`
|
|
28
|
+
* `hab_sup_listen_gossip`
|
|
29
|
+
* Port for the supervisor's gossip communication
|
|
30
|
+
* Defaults to `nil`
|
|
31
|
+
|
|
32
|
+
### Package Settings
|
|
33
|
+
|
|
34
|
+
* `artifact_name`
|
|
35
|
+
* Artifact package filename to install and run.
|
|
36
|
+
* Used to upload and test a local artifact.
|
|
37
|
+
* Example - `core-jq-static-1.5-20170127185151-x86_64-linux.hart`
|
|
38
|
+
* Defaults to `nil`
|
|
39
|
+
* `package_origin`
|
|
40
|
+
* Origin for the package to run.
|
|
41
|
+
* Defaults to `core`, or or, if `artifact_name` is supplied, the `package_origin` will be parsed from the filename of the hart file.
|
|
42
|
+
* `package_name`
|
|
43
|
+
* Package name for the supervisor to run.
|
|
44
|
+
* Defaults to the suite name or, if `artifact_name` is supplied, the `package_name` will be parsed from the filename of the hart file.
|
|
45
|
+
* `package_version`
|
|
46
|
+
* Package version of the package to be run.
|
|
47
|
+
* Defaults to `nil` or if `artifact_name` is supplied, the `package_version` will be parsed from the filename of the hart file.
|
|
48
|
+
* `package_timestamp`
|
|
49
|
+
* Package timestamp of the package to be run.
|
|
50
|
+
* Defaults to `nil` or if `artifact_name` is supplied, the `package_timestamp` will be parsed from the filename of the hart file.
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
## Example
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
provisioner:
|
|
57
|
+
- name: habitat
|
|
58
|
+
hab_sup: core/hab/0.16.0
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
suite:
|
|
62
|
+
- name: core/redis
|
|
63
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
|
2
|
+
require "kitchen-habitat/version"
|
|
3
|
+
|
|
4
|
+
Gem::Specification.new do |s|
|
|
5
|
+
s.name = "kitchen-habitat"
|
|
6
|
+
s.version = Kitchen::Habitat::VERSION
|
|
7
|
+
s.authors = ["Steven Murawski"]
|
|
8
|
+
s.email = ["smurawski@chef.io"]
|
|
9
|
+
s.homepage = "https://github.com/test-kitchen/kitchen-habitat"
|
|
10
|
+
s.summary = "Habitat provisioner for test-kitchen"
|
|
11
|
+
candidates = Dir.glob("lib/**/*") + ["README.md", "kitchen-habitat.gemspec"]
|
|
12
|
+
s.files = candidates.sort
|
|
13
|
+
s.platform = Gem::Platform::RUBY
|
|
14
|
+
s.require_paths = ["lib"]
|
|
15
|
+
s.rubyforge_project = "[none]"
|
|
16
|
+
s.license = "Apache 2"
|
|
17
|
+
s.description = <<-EOF
|
|
18
|
+
== DESCRIPTION:
|
|
19
|
+
|
|
20
|
+
Habitat Provisioner for Test Kitchen
|
|
21
|
+
|
|
22
|
+
== FEATURES:
|
|
23
|
+
|
|
24
|
+
TBD
|
|
25
|
+
|
|
26
|
+
EOF
|
|
27
|
+
s.add_dependency "test-kitchen", "~> 1.4"
|
|
28
|
+
|
|
29
|
+
s.add_development_dependency "countloc", "~> 0.4"
|
|
30
|
+
s.add_development_dependency "rake"
|
|
31
|
+
s.add_development_dependency "rspec", "~> 3.2"
|
|
32
|
+
s.add_development_dependency "simplecov", "~> 0.9"
|
|
33
|
+
|
|
34
|
+
# style and complexity libraries are tightly version pinned as newer releases
|
|
35
|
+
# may introduce new and undesireable style choices which would be immediately
|
|
36
|
+
# enforced in CI
|
|
37
|
+
s.add_development_dependency "chefstyle"
|
|
38
|
+
end
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Steven Murawski (<steven.murawski@gmail.com>)
|
|
3
|
+
#
|
|
4
|
+
# Copyright (C) 2014 Steven Murawski
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the MIT License.
|
|
7
|
+
# See LICENSE for more details
|
|
8
|
+
|
|
9
|
+
require "fileutils"
|
|
10
|
+
require "pathname"
|
|
11
|
+
require "kitchen/provisioner/base"
|
|
12
|
+
require "kitchen/util"
|
|
13
|
+
|
|
14
|
+
module Kitchen
|
|
15
|
+
module Provisioner
|
|
16
|
+
class Habitat < Base
|
|
17
|
+
kitchen_provisioner_api_version 2
|
|
18
|
+
|
|
19
|
+
default_config :depot_url, nil
|
|
20
|
+
default_config :hab_sup, "core/hab-sup"
|
|
21
|
+
|
|
22
|
+
# hab-sup manager options
|
|
23
|
+
default_config :hab_sup_listen_http, nil
|
|
24
|
+
default_config :hab_sup_listen_gossip, nil
|
|
25
|
+
|
|
26
|
+
# hab-sup service options
|
|
27
|
+
#default_config :
|
|
28
|
+
default_config :artifact_name
|
|
29
|
+
default_config :package_origin, "core"
|
|
30
|
+
default_config :package_name do |provisioner|
|
|
31
|
+
provisioner.instance.suite.name
|
|
32
|
+
end
|
|
33
|
+
default_config :package_version
|
|
34
|
+
default_config :package_timestamp
|
|
35
|
+
|
|
36
|
+
default_config :user_toml_path
|
|
37
|
+
|
|
38
|
+
def finalize_config!(instance)
|
|
39
|
+
unless config[:artifact_name].nil?
|
|
40
|
+
ident = artifact_name_to_package_ident_regex.match(config[:artifact_name])
|
|
41
|
+
config[:package_origin] = ident["origin"]
|
|
42
|
+
config[:package_name] = ident["name"]
|
|
43
|
+
config[:package_version] = ident["version"]
|
|
44
|
+
config[:package_timestamp] = ident["timestamp"]
|
|
45
|
+
end
|
|
46
|
+
super(instance)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def install_command
|
|
50
|
+
if instance.platform == "windows"
|
|
51
|
+
raise "Need to fill in some implementation here."
|
|
52
|
+
else
|
|
53
|
+
wrap_shell_code <<-BASH
|
|
54
|
+
#{export_hab_origin}
|
|
55
|
+
if command -v hab >/dev/null 2>&1
|
|
56
|
+
then
|
|
57
|
+
echo "Habitat CLI already installed."
|
|
58
|
+
else
|
|
59
|
+
curl 'https://raw.githubusercontent.com/habitat-sh/habitat/master/components/hab/install.sh' | sudo bash
|
|
60
|
+
fi
|
|
61
|
+
BASH
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def init_command
|
|
66
|
+
wrap_shell_code "id -u hab > /dev/null || sudo useradd hab > /dev/null"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def create_sandbox
|
|
70
|
+
super
|
|
71
|
+
copy_results_to_sandbox
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def prepare_command
|
|
75
|
+
wrap_shell_code <<-EOH
|
|
76
|
+
#{export_hab_origin}
|
|
77
|
+
#{install_supervisor_command}
|
|
78
|
+
#{binlink_supervisor_command}
|
|
79
|
+
#{install_service_package}
|
|
80
|
+
EOH
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def run_command
|
|
84
|
+
run = <<-RUN
|
|
85
|
+
if sudo screen -ls | grep -q #{clean_package_name}
|
|
86
|
+
then
|
|
87
|
+
echo "Killing previous supervisor session."
|
|
88
|
+
sudo screen -S \"#{clean_package_name}\" -X quit > /dev/null
|
|
89
|
+
echo "Removing dead session."
|
|
90
|
+
sudo screen -wipe > /dev/null
|
|
91
|
+
fi
|
|
92
|
+
#{export_hab_origin}
|
|
93
|
+
echo "Running #{package_ident}."
|
|
94
|
+
sudo screen -mdS \"#{clean_package_name}\" hab-sup start #{package_ident} #{supervisor_options}
|
|
95
|
+
RUN
|
|
96
|
+
|
|
97
|
+
wrap_shell_code run
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
private
|
|
101
|
+
|
|
102
|
+
def copy_results_to_sandbox
|
|
103
|
+
FileUtils.mkdir_p(File.join(sandbox_path, "results"))
|
|
104
|
+
FileUtils.cp_r(
|
|
105
|
+
File.join(config[:kitchen_root], "/results"),
|
|
106
|
+
File.join(sandbox_path, "results"),
|
|
107
|
+
preserve: true
|
|
108
|
+
)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def install_service_package
|
|
112
|
+
return if config[:artifact_name].nil?
|
|
113
|
+
"sudo hab pkg install #{File.join(File.join(config[:root_path], "results"), config[:artifact_name])}"
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def export_hab_origin
|
|
117
|
+
return if config[:depot_url].nil?
|
|
118
|
+
"export HAB_ORIGIN=#{config[:depot_url]}"
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def install_supervisor_command
|
|
122
|
+
"sudo hab pkg install #{config[:hab_sup]}"
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def binlink_supervisor_command
|
|
126
|
+
"sudo hab pkg binlink #{config[:hab_sup]} hab-sup"
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def artifact_name_to_package_ident_regex
|
|
130
|
+
/(?<origin>\w+)-(?<name>.*)-(?<version>(\d+)?(\.\d+)?(\.\d+)?(\.\d+)?)-(?<timestamp>\d+)-(?<target>.*)\.hart$/
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def package_ident
|
|
134
|
+
ident = "#{config[:package_origin]}/" \
|
|
135
|
+
"#{config[:package_name]}/" \
|
|
136
|
+
"#{config[:package_version]}/" \
|
|
137
|
+
"#{config[:package_timestamp]}".chomp("/").chomp("/")
|
|
138
|
+
@pkg_ident ||= ident
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def clean_package_name
|
|
142
|
+
@clean_name ||= "#{config[:package_origin]}-#{config[:package_name]}"
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def supervisor_options
|
|
146
|
+
options = "#{'--listen-gossip' + config[:hab_sup_listen_gossip] unless config[:hab_sup_listen_gossip].nil?} " \
|
|
147
|
+
"#{'--listen-http' + config[:hab_sup_listen_http] unless config[:hab_sup_listen_http].nil?} " \
|
|
148
|
+
""
|
|
149
|
+
options.strip
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: kitchen-habitat
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Steven Murawski
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2017-03-02 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: test-kitchen
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '1.4'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.4'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: countloc
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0.4'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0.4'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rake
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rspec
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '3.2'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '3.2'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: simplecov
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0.9'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0.9'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: chefstyle
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
97
|
+
description: |+
|
|
98
|
+
== DESCRIPTION:
|
|
99
|
+
|
|
100
|
+
Habitat Provisioner for Test Kitchen
|
|
101
|
+
|
|
102
|
+
== FEATURES:
|
|
103
|
+
|
|
104
|
+
TBD
|
|
105
|
+
|
|
106
|
+
email:
|
|
107
|
+
- smurawski@chef.io
|
|
108
|
+
executables: []
|
|
109
|
+
extensions: []
|
|
110
|
+
extra_rdoc_files: []
|
|
111
|
+
files:
|
|
112
|
+
- README.md
|
|
113
|
+
- kitchen-habitat.gemspec
|
|
114
|
+
- lib/kitchen-habitat/version.rb
|
|
115
|
+
- lib/kitchen/provisioner/habitat.rb
|
|
116
|
+
homepage: https://github.com/test-kitchen/kitchen-habitat
|
|
117
|
+
licenses:
|
|
118
|
+
- Apache 2
|
|
119
|
+
metadata: {}
|
|
120
|
+
post_install_message:
|
|
121
|
+
rdoc_options: []
|
|
122
|
+
require_paths:
|
|
123
|
+
- lib
|
|
124
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
|
+
requirements:
|
|
126
|
+
- - ">="
|
|
127
|
+
- !ruby/object:Gem::Version
|
|
128
|
+
version: '0'
|
|
129
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
|
+
requirements:
|
|
131
|
+
- - ">="
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: '0'
|
|
134
|
+
requirements: []
|
|
135
|
+
rubyforge_project: "[none]"
|
|
136
|
+
rubygems_version: 2.6.10
|
|
137
|
+
signing_key:
|
|
138
|
+
specification_version: 4
|
|
139
|
+
summary: Habitat provisioner for test-kitchen
|
|
140
|
+
test_files: []
|