gene_system 0.3.2 → 0.4.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 +4 -4
- data/Gemfile +0 -7
- data/Gemfile.lock +32 -18
- data/README.md +2 -0
- data/bin/gene_system +20 -0
- data/bin/genesystem +11 -43
- data/gene_system.gemspec +3 -1
- data/lib/gene_system/cli.rb +51 -63
- data/lib/gene_system/commands/create_manifest.rb +54 -0
- data/lib/gene_system/commands/install_manifest.rb +86 -0
- data/lib/gene_system/commands/print_version.rb +17 -0
- data/lib/gene_system/commands/remove_manifest.rb +86 -0
- data/lib/gene_system/commands.rb +14 -0
- data/lib/gene_system/generators.rb +1 -1
- data/lib/gene_system/manifest.rb +58 -1
- data/lib/gene_system/platform.rb +1 -0
- data/lib/gene_system/version.rb +1 -1
- data/manifest.json +59 -0
- data/spec/gene_system/cli_spec.rb +68 -46
- data/spec/gene_system/commands/create_manifest_spec.rb +119 -0
- data/spec/gene_system/commands/install_manifest_spec.rb +258 -0
- data/spec/gene_system/commands/print_version_spec.rb +20 -0
- data/spec/gene_system/commands/remove_manifest_spec.rb +258 -0
- data/spec/gene_system/generators_spec.rb +1 -1
- data/spec/gene_system/manifest_spec.rb +68 -0
- metadata +47 -6
- data/lib/gene_system/cli/commands.rb +0 -109
- data/spec/gene_system/cli/commands_spec.rb +0 -230
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 559379df624aadc40f65cb1c3c9ab01f152fbbbaa238e1b5e2f71fcb97d84874
|
4
|
+
data.tar.gz: a0dbf8ab2cba60a31d8022601922660d93c87d8e6bf3c0a2653c344ce9e6aeed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79a46d8e6cfbe40d422ba6fdb8c7de1575dd52a94664c4550e4cfc54f5f9be72a0d541137e0dee65cbc535ea98a02a8d5f57e698f0ca3e23e5c9b5531815a83d
|
7
|
+
data.tar.gz: f052a0aea8250f8ec4e6a412c0a4af883f315ef2a2e6a85021cbcded1adfab4165a9efdc3c92d95d0c98b56ae64ff053a0e2ed289d0342c0a783e4ecab338ae9
|
data/Gemfile
CHANGED
@@ -1,10 +1,3 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
git_source(:biggerconcept) do |repo_name|
|
4
|
-
username = ENV['BIGGERCONCEPT_CI_USER']
|
5
|
-
password = ENV['BIGGERCONCEPT_CI_PASSWORD']
|
6
|
-
git_host = ENV['BIGGERCONCEPT_GIT_HOSTpro']
|
7
|
-
"https://#{username}:#{password}@#{git_host}/#{repo_name}"
|
8
|
-
end
|
9
|
-
|
10
3
|
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gene_system (0.
|
4
|
+
gene_system (0.4.0)
|
5
5
|
hashie
|
6
6
|
highline (~> 2.0)
|
7
7
|
jsonnet
|
8
8
|
logger (~> 1.4)
|
9
9
|
os
|
10
10
|
ruby-handlebars (~> 0.4)
|
11
|
+
thor (~> 1.0)
|
12
|
+
tty-prompt
|
11
13
|
|
12
14
|
GEM
|
13
15
|
remote: https://rubygems.org/
|
14
16
|
specs:
|
15
|
-
addressable (2.
|
17
|
+
addressable (2.8.0)
|
16
18
|
public_suffix (>= 2.0.2, < 5.0)
|
17
19
|
ast (2.4.2)
|
18
20
|
axiom-types (0.1.1)
|
@@ -21,15 +23,14 @@ GEM
|
|
21
23
|
thread_safe (~> 0.3, >= 0.3.1)
|
22
24
|
bump (0.10.0)
|
23
25
|
byebug (11.1.3)
|
24
|
-
codeclimate-engine-rb (0.4.
|
25
|
-
virtus (~> 1.0)
|
26
|
+
codeclimate-engine-rb (0.4.2)
|
26
27
|
coderay (1.1.3)
|
27
28
|
coercible (1.0.0)
|
28
29
|
descendants_tracker (~> 0.0.1)
|
29
30
|
descendants_tracker (0.0.4)
|
30
31
|
thread_safe (~> 0.3, >= 0.3.1)
|
31
32
|
diff-lcs (1.4.4)
|
32
|
-
docile (1.
|
33
|
+
docile (1.4.0)
|
33
34
|
doxie (4.0.0)
|
34
35
|
equalizer (0.0.11)
|
35
36
|
erubis (2.7.0)
|
@@ -42,7 +43,7 @@ GEM
|
|
42
43
|
path_expander (~> 1.0)
|
43
44
|
ruby_parser (~> 3.1, > 3.1.0)
|
44
45
|
sexp_processor (~> 4.8)
|
45
|
-
hashie (
|
46
|
+
hashie (5.0.0)
|
46
47
|
highline (2.0.3)
|
47
48
|
ice_nine (0.11.2)
|
48
49
|
jaro_winkler (1.5.4)
|
@@ -50,15 +51,17 @@ GEM
|
|
50
51
|
mini_portile2 (>= 2.2.0)
|
51
52
|
launchy (2.4.3)
|
52
53
|
addressable (~> 2.3)
|
53
|
-
logger (1.4.
|
54
|
+
logger (1.4.4)
|
54
55
|
method_source (1.0.0)
|
55
|
-
mini_portile2 (2.
|
56
|
-
nio4r (2.5.
|
57
|
-
os (1.1.
|
58
|
-
parallel (1.
|
56
|
+
mini_portile2 (2.7.1)
|
57
|
+
nio4r (2.5.8)
|
58
|
+
os (1.1.4)
|
59
|
+
parallel (1.21.0)
|
59
60
|
parser (2.5.3.0)
|
60
61
|
ast (~> 2.4.0)
|
61
62
|
parslet (1.8.2)
|
63
|
+
pastel (0.8.0)
|
64
|
+
tty-color (~> 0.5)
|
62
65
|
path_expander (1.1.0)
|
63
66
|
private_gem (1.1.4)
|
64
67
|
bundler (> 1.7, < 3.0)
|
@@ -67,10 +70,10 @@ GEM
|
|
67
70
|
coderay (~> 1.1)
|
68
71
|
method_source (~> 1.0)
|
69
72
|
public_suffix (4.0.6)
|
70
|
-
puma (4.3.
|
73
|
+
puma (4.3.10)
|
71
74
|
nio4r (~> 2.0)
|
72
75
|
rainbow (3.0.0)
|
73
|
-
rake (13.0.
|
76
|
+
rake (13.0.6)
|
74
77
|
reek (4.8.2)
|
75
78
|
codeclimate-engine-rb (~> 0.4.0)
|
76
79
|
parser (>= 2.5.0.0, < 2.6)
|
@@ -87,7 +90,7 @@ GEM
|
|
87
90
|
rspec-mocks (3.10.2)
|
88
91
|
diff-lcs (>= 1.2.0, < 2.0)
|
89
92
|
rspec-support (~> 3.10.0)
|
90
|
-
rspec-support (3.10.
|
93
|
+
rspec-support (3.10.3)
|
91
94
|
rubocop (0.68.1)
|
92
95
|
jaro_winkler (~> 1.5.1)
|
93
96
|
parallel (~> 1.10)
|
@@ -98,8 +101,8 @@ GEM
|
|
98
101
|
ruby-handlebars (0.4.0)
|
99
102
|
parslet (~> 1.6, >= 1.6.2)
|
100
103
|
ruby-progressbar (1.11.0)
|
101
|
-
ruby_parser (3.
|
102
|
-
sexp_processor (~> 4.
|
104
|
+
ruby_parser (3.18.1)
|
105
|
+
sexp_processor (~> 4.16)
|
103
106
|
rubycritic (3.5.2)
|
104
107
|
flay (~> 2.8)
|
105
108
|
flog (~> 4.4)
|
@@ -110,7 +113,7 @@ GEM
|
|
110
113
|
ruby_parser (~> 3.8)
|
111
114
|
tty-which (~> 0.3.0)
|
112
115
|
virtus (~> 1.0)
|
113
|
-
sexp_processor (4.
|
116
|
+
sexp_processor (4.16.0)
|
114
117
|
simplecov (0.21.2)
|
115
118
|
docile (~> 1.1)
|
116
119
|
simplecov-html (~> 0.11)
|
@@ -119,6 +122,16 @@ GEM
|
|
119
122
|
simplecov_json_formatter (0.1.3)
|
120
123
|
thor (1.1.0)
|
121
124
|
thread_safe (0.3.6)
|
125
|
+
tty-color (0.6.0)
|
126
|
+
tty-cursor (0.7.1)
|
127
|
+
tty-prompt (0.23.1)
|
128
|
+
pastel (~> 0.8)
|
129
|
+
tty-reader (~> 0.8)
|
130
|
+
tty-reader (0.9.0)
|
131
|
+
tty-cursor (~> 0.7)
|
132
|
+
tty-screen (~> 0.8)
|
133
|
+
wisper (~> 2.0)
|
134
|
+
tty-screen (0.8.1)
|
122
135
|
tty-which (0.3.0)
|
123
136
|
unicode-display_width (1.5.0)
|
124
137
|
virtus (1.0.5)
|
@@ -126,6 +139,7 @@ GEM
|
|
126
139
|
coercible (~> 1.0)
|
127
140
|
descendants_tracker (~> 0.0, >= 0.0.3)
|
128
141
|
equalizer (~> 0.0, >= 0.0.9)
|
142
|
+
wisper (2.0.1)
|
129
143
|
yard (0.9.26)
|
130
144
|
|
131
145
|
PLATFORMS
|
@@ -147,4 +161,4 @@ DEPENDENCIES
|
|
147
161
|
yard (~> 0.9)
|
148
162
|
|
149
163
|
BUNDLED WITH
|
150
|
-
2.2.
|
164
|
+
2.2.27
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# GeneSystem
|
2
2
|
|
3
|
+
[](https://github.com/andrewbigger/gene_system/actions/workflows/build.yml)
|
4
|
+
|
3
5
|
A gem for configuring systems via json or jsonnet manifest.
|
4
6
|
|
5
7
|
## Installation
|
data/bin/gene_system
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
lib_path = File.expand_path('../lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib_path) unless $LOAD_PATH.include?(lib_path)
|
5
|
+
|
6
|
+
require 'pry'
|
7
|
+
require 'gene_system/cli'
|
8
|
+
|
9
|
+
Signal.trap('INT') do
|
10
|
+
warn("\n#{caller.join("\n")}: interrupted")
|
11
|
+
exit(1)
|
12
|
+
end
|
13
|
+
|
14
|
+
begin
|
15
|
+
GeneSystem::CLI.start
|
16
|
+
rescue StandardError => e
|
17
|
+
puts "ERROR: #{e.message}"
|
18
|
+
puts e.backtrace.join("\n")
|
19
|
+
exit 1
|
20
|
+
end
|
data/bin/genesystem
CHANGED
@@ -1,52 +1,20 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
3
|
+
lib_path = File.expand_path('../lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib_path) unless $LOAD_PATH.include?(lib_path)
|
4
5
|
|
5
|
-
require '
|
6
|
-
require 'optparse'
|
7
|
-
require 'highline'
|
8
|
-
|
9
|
-
require 'gene_system'
|
6
|
+
require 'pry'
|
10
7
|
require 'gene_system/cli'
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
\s\s\s\s--trace\t\t trace mode on
|
17
|
-
-h, --help\t\t print usage
|
18
|
-
|
19
|
-
Commands:
|
20
|
-
new <rel>\t\t creates a new manifest
|
21
|
-
install <rel>\t\t applies install steps specified in manifest
|
22
|
-
remove <rel>\t\t applies remove steps specified in manifest
|
23
|
-
".freeze
|
24
|
-
|
25
|
-
@trace = false
|
26
|
-
@overwrite = false
|
27
|
-
|
28
|
-
OptionParser.new do |opts|
|
29
|
-
opts.banner = USAGE
|
30
|
-
opts.on('--trace') { @trace = true }
|
31
|
-
|
32
|
-
opts.on_tail('-h', '--help') do
|
33
|
-
GeneSystem::CLI.print_message_and_exit(USAGE)
|
34
|
-
end
|
35
|
-
end.parse!
|
9
|
+
Signal.trap('INT') do
|
10
|
+
warn("\n#{caller.join("\n")}: interrupted")
|
11
|
+
exit(1)
|
12
|
+
end
|
36
13
|
|
37
14
|
begin
|
38
|
-
|
39
|
-
|
40
|
-
cmd = ARGV.shift
|
41
|
-
GeneSystem::CLI::Commands.public_send(
|
42
|
-
cmd.to_sym,
|
43
|
-
ARGV
|
44
|
-
)
|
15
|
+
GeneSystem::CLI.start
|
45
16
|
rescue StandardError => e
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
GeneSystem::CLI.print_message_and_exit(USAGE)
|
17
|
+
puts "ERROR: #{e.message}"
|
18
|
+
puts e.backtrace.join("\n")
|
19
|
+
exit 1
|
50
20
|
end
|
51
|
-
|
52
|
-
exit(0)
|
data/gene_system.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.version = GeneSystem::VERSION
|
10
10
|
spec.authors = ['Andrew Bigger']
|
11
11
|
spec.email = ['andrew.bigger@gmail.com']
|
12
|
-
spec.summary = 'System configuration tool for applying
|
12
|
+
spec.summary = 'System configuration tool for applying settings'
|
13
13
|
spec.homepage = 'https://github.com/andrewbigger/gene_system'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
@@ -24,6 +24,8 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_dependency 'logger', '~> 1.4'
|
25
25
|
spec.add_dependency 'os'
|
26
26
|
spec.add_dependency 'ruby-handlebars', '~> 0.4'
|
27
|
+
spec.add_dependency 'thor', '~> 1.0'
|
28
|
+
spec.add_dependency 'tty-prompt'
|
27
29
|
|
28
30
|
spec.add_development_dependency 'bump', '~> 0.6'
|
29
31
|
spec.add_development_dependency 'byebug', '~> 11.0'
|
data/lib/gene_system/cli.rb
CHANGED
@@ -1,76 +1,64 @@
|
|
1
|
-
require '
|
1
|
+
require 'thor'
|
2
|
+
require 'gene_system'
|
3
|
+
require 'gene_system/commands'
|
2
4
|
|
3
5
|
require 'hashie'
|
4
6
|
|
5
7
|
module GeneSystem
|
6
8
|
# Command line interface helpers and actions
|
7
|
-
|
8
|
-
|
9
|
-
class <<self
|
10
|
-
##
|
11
|
-
# Creates logger for printing messages
|
12
|
-
#
|
13
|
-
# Sets the formatter to output only the provided message to the
|
14
|
-
# specified IO
|
15
|
-
#
|
16
|
-
# @param [IO] out - default: STDOUT
|
17
|
-
#
|
18
|
-
# @return [Logger]
|
19
|
-
#
|
20
|
-
def logger(out = STDOUT)
|
21
|
-
@logger ||= Logger.new(out)
|
22
|
-
@logger.formatter = proc do |_sev, _time, _prog, msg|
|
23
|
-
"#{msg}\n"
|
24
|
-
end
|
9
|
+
class CLI < Thor
|
10
|
+
package_name 'GeneSystem'
|
25
11
|
|
26
|
-
|
27
|
-
end
|
12
|
+
desc 'version', 'Print gem version'
|
28
13
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
14
|
+
def version
|
15
|
+
cmd = GeneSystem::Commands::PrintVersion.new(options)
|
16
|
+
cmd.run
|
17
|
+
end
|
18
|
+
|
19
|
+
desc 'new', 'Create new manifest'
|
20
|
+
|
21
|
+
method_option(
|
22
|
+
:out,
|
23
|
+
type: :string,
|
24
|
+
desc: 'Path to folder for manifest'
|
25
|
+
)
|
26
|
+
|
27
|
+
method_option(
|
28
|
+
:name,
|
29
|
+
type: :string,
|
30
|
+
desc: 'Name of manifest (i.e. manifest.json)'
|
31
|
+
)
|
32
|
+
|
33
|
+
def new
|
34
|
+
cmd = GeneSystem::Commands::CreateManifest.new(options)
|
35
|
+
cmd.run
|
36
|
+
end
|
37
|
+
|
38
|
+
desc 'install', 'Applies install instructions from given manifest'
|
39
|
+
|
40
|
+
method_option(
|
41
|
+
:manifest,
|
42
|
+
type: :string,
|
43
|
+
desc: 'Path to manifest (i.e. manifest.json)'
|
44
|
+
)
|
45
|
+
|
46
|
+
def install
|
47
|
+
cmd = GeneSystem::Commands::InstallManifest.new(options)
|
48
|
+
cmd.run
|
49
|
+
end
|
39
50
|
|
40
|
-
|
41
|
-
# Prints warning to STDOUT
|
42
|
-
#
|
43
|
-
# For use when printing warn messages to STDOUT
|
44
|
-
#
|
45
|
-
# @param [String] message - message to be printed
|
46
|
-
#
|
47
|
-
def print_warning(message)
|
48
|
-
logger.warn(message)
|
49
|
-
end
|
51
|
+
desc 'remove', 'Applies remove instructions from given manifest'
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
# @param [String] message - message to be printed
|
57
|
-
#
|
58
|
-
def print_error(message)
|
59
|
-
logger(STDERR).error(message)
|
60
|
-
end
|
53
|
+
method_option(
|
54
|
+
:manifest,
|
55
|
+
type: :string,
|
56
|
+
desc: 'Path to manifest (i.e. manifest.json)'
|
57
|
+
)
|
61
58
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
# This will terminate the program with the given status code
|
66
|
-
#
|
67
|
-
# @param [String] message - message to be printed
|
68
|
-
# @param [Integer] exit_code - exit status (default: 1)
|
69
|
-
#
|
70
|
-
def print_message_and_exit(message, exit_code = 1)
|
71
|
-
print_message(message)
|
72
|
-
exit(exit_code)
|
73
|
-
end
|
59
|
+
def remove
|
60
|
+
cmd = GeneSystem::Commands::RemoveManifest.new(options)
|
61
|
+
cmd.run
|
74
62
|
end
|
75
63
|
end
|
76
64
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module GeneSystem
|
2
|
+
module Commands
|
3
|
+
# Create manifest command
|
4
|
+
class CreateManifest
|
5
|
+
##
|
6
|
+
# Default name of gene system manifest
|
7
|
+
#
|
8
|
+
DEFAULT_MANIFEST_NAME = 'manifest.json'.freeze
|
9
|
+
|
10
|
+
def initialize(options)
|
11
|
+
@options = options
|
12
|
+
@prompt = TTY::Prompt.new
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# Creates a new, blank manifest with at the specified
|
17
|
+
# destination with the specified name.
|
18
|
+
#
|
19
|
+
# If the options are not provided the user will be prompted
|
20
|
+
# for the manifest name and location.
|
21
|
+
#
|
22
|
+
# If the output location is not a directory then a
|
23
|
+
# RuntimeError will be raised.
|
24
|
+
#
|
25
|
+
# When successfully rendered a success message will be
|
26
|
+
# printed to STDOUT.
|
27
|
+
#
|
28
|
+
def run
|
29
|
+
manifest_name = @options.name
|
30
|
+
manifest_name ||= @prompt.ask(
|
31
|
+
'Please enter the name of the manifest',
|
32
|
+
default: DEFAULT_MANIFEST_NAME
|
33
|
+
)
|
34
|
+
|
35
|
+
output_location = @options.out
|
36
|
+
output_location ||= @prompt.ask(
|
37
|
+
'Please specify output location',
|
38
|
+
default: Dir.pwd
|
39
|
+
)
|
40
|
+
|
41
|
+
unless File.directory?(output_location)
|
42
|
+
raise 'output location must be a folder'
|
43
|
+
end
|
44
|
+
|
45
|
+
GeneSystem::Generators.render_empty_manifest(
|
46
|
+
manifest_name,
|
47
|
+
output_location
|
48
|
+
)
|
49
|
+
|
50
|
+
puts "✔ Manifest successfully created in #{output_location}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module GeneSystem
|
2
|
+
module Commands
|
3
|
+
# Install manifest command
|
4
|
+
class InstallManifest
|
5
|
+
##
|
6
|
+
# Default name of gene system manifest
|
7
|
+
#
|
8
|
+
DEFAULT_MANIFEST_NAME = 'manifest.json'.freeze
|
9
|
+
|
10
|
+
def initialize(options)
|
11
|
+
@options = options
|
12
|
+
@prompt = TTY::Prompt.new
|
13
|
+
@manifest = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
##
|
17
|
+
# Applies install instructions from a manifest
|
18
|
+
# to the host system.
|
19
|
+
#
|
20
|
+
def run
|
21
|
+
manifest_path = @options.manifest
|
22
|
+
manifest_path ||= @prompt.ask(
|
23
|
+
'Please enter the path to the configuration manifest',
|
24
|
+
default: DEFAULT_MANIFEST_NAME
|
25
|
+
)
|
26
|
+
|
27
|
+
@manifest = GeneSystem::Manifest.new_from_file(manifest_path)
|
28
|
+
platform = GeneSystem::Platform.new
|
29
|
+
|
30
|
+
puts("INSTALL #{@manifest.name_and_version}")
|
31
|
+
|
32
|
+
@manifest.steps.each do |step|
|
33
|
+
next if skip?(step, platform)
|
34
|
+
|
35
|
+
vars = ask(step.install.prompts)
|
36
|
+
|
37
|
+
platform.execute_commands(
|
38
|
+
step.install.cmd,
|
39
|
+
vars
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
puts(
|
44
|
+
"✔ Manifest #{@manifest.name_and_version} successfully installed"
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
##
|
51
|
+
# Asks for user input when given prompts
|
52
|
+
#
|
53
|
+
# @param prompts [Array]
|
54
|
+
#
|
55
|
+
# @return Hashie::Mash
|
56
|
+
#
|
57
|
+
def ask(prompts = [])
|
58
|
+
answers = @manifest.variables
|
59
|
+
return answers if prompts.nil? || prompts.empty?
|
60
|
+
|
61
|
+
prompts.each do |prompt|
|
62
|
+
resp = @prompt.ask(prompt.prompt)
|
63
|
+
answers[prompt.var] = resp
|
64
|
+
end
|
65
|
+
|
66
|
+
answers
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# Determines whether to skip a step
|
71
|
+
#
|
72
|
+
# @param [GeneSystem::Step] step
|
73
|
+
# @param [GeneSystem::Platform] platform
|
74
|
+
#
|
75
|
+
# @return [Boolean]
|
76
|
+
#
|
77
|
+
def skip?(step, platform)
|
78
|
+
return false if step.install.skip.nil?
|
79
|
+
|
80
|
+
platform.execute_command(
|
81
|
+
step.install.skip
|
82
|
+
).zero?
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module GeneSystem
|
2
|
+
module Commands
|
3
|
+
# Remove manifest command
|
4
|
+
class RemoveManifest
|
5
|
+
##
|
6
|
+
# Default name of gene system manifest
|
7
|
+
#
|
8
|
+
DEFAULT_MANIFEST_NAME = 'manifest.json'.freeze
|
9
|
+
|
10
|
+
def initialize(options)
|
11
|
+
@options = options
|
12
|
+
@prompt = TTY::Prompt.new
|
13
|
+
@manifest = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
##
|
17
|
+
# Applies remove instructions from a manifest
|
18
|
+
# to the host system.
|
19
|
+
#
|
20
|
+
def run
|
21
|
+
manifest_path = @options.manifest
|
22
|
+
manifest_path ||= @prompt.ask(
|
23
|
+
'Please enter the path to the configuration manifest',
|
24
|
+
default: DEFAULT_MANIFEST_NAME
|
25
|
+
)
|
26
|
+
|
27
|
+
@manifest = GeneSystem::Manifest.new_from_file(manifest_path)
|
28
|
+
platform = GeneSystem::Platform.new
|
29
|
+
|
30
|
+
puts("REMOVE #{@manifest.name_and_version}")
|
31
|
+
|
32
|
+
@manifest.steps.each do |step|
|
33
|
+
next if skip?(step, platform)
|
34
|
+
|
35
|
+
vars = ask(step.remove.prompts)
|
36
|
+
|
37
|
+
platform.execute_commands(
|
38
|
+
step.remove.cmd,
|
39
|
+
vars
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
puts(
|
44
|
+
"✔ Manifest #{@manifest.name_and_version} successfully removed"
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
##
|
51
|
+
# Asks for user input when given prompts
|
52
|
+
#
|
53
|
+
# @param prompts [Array]
|
54
|
+
#
|
55
|
+
# @return Hashie::Mash
|
56
|
+
#
|
57
|
+
def ask(prompts = [])
|
58
|
+
answers = @manifest.variables
|
59
|
+
return answers if prompts.nil?
|
60
|
+
|
61
|
+
prompts.each do |prompt|
|
62
|
+
resp = @prompt.ask(prompt.prompt)
|
63
|
+
answers[prompt.var] = resp
|
64
|
+
end
|
65
|
+
|
66
|
+
answers
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# Determines whether to skip a step
|
71
|
+
#
|
72
|
+
# @param [GeneSystem::Step] step
|
73
|
+
# @param [GeneSystem::Platform] platform
|
74
|
+
#
|
75
|
+
# @return [Boolean]
|
76
|
+
#
|
77
|
+
def skip?(step, platform)
|
78
|
+
return false if step.remove.skip.nil?
|
79
|
+
|
80
|
+
platform.execute_command(
|
81
|
+
step.remove.skip
|
82
|
+
).zero?
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|