mdt-core 0.1.1 → 0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 58b377cd94cbf526fd9b533d0486a6591a728ead132b2c0233283f5f4342fc38
4
- data.tar.gz: da3e561d81bf50299b14da75379d51c4c4877f7d67e1388ea73c96ffe424e92d
3
+ metadata.gz: 1d4b360b10692c81ee67737d4a144883aac685dc396f8d4a8fb364ac508cdebd
4
+ data.tar.gz: 3b9cdc1c0cb40c950eadebc257649817842fb9d615a46df014ba6759be5d3393
5
5
  SHA512:
6
- metadata.gz: 3fa724625df315275c8491cead91a1f623a3fd059aea3503d186f596b5b58df963c9198c08455c3246c999189afb62ebd378a931cc2bd531786e7595c5ee442e
7
- data.tar.gz: 3a59ae7fa5729729154cfb819ca5d31ea438a2443b87cf4459f2f01abcc1ce2e9fdd4d1af5d34d9f2e5d183e0d33403338fe8d35f7678b335255a99a75beffb0
6
+ metadata.gz: c8039873e1e5a0f0582d9fa21b542c81bda5b276235ce00b98a609df741cbe64101ad596b48c3181936702062a4b6b62449b1064e001200faa15eb241a4ee83d
7
+ data.tar.gz: 6095c6a169927bdd804dbfcc2c29a93250e2ceaf8c24100c5367b83e5eef367746acc217688568fb7b216b269d7fcae26152d3ee87df1874604a8174115d1e64
data/README.md CHANGED
@@ -41,6 +41,8 @@ MDT defines 5 modular objects that can be used to build a simple deploy flow. Th
41
41
 
42
42
  * [mdt-dummy](https://github.com/Phitherek/mdt-dummy "mdt-dummy") - a module containing dummy implementations of each extensible MDT class. They can be used to skip a particular deployment step.
43
43
  * [mdt-simple](https://github.com/Phitherek/mdt-simple "mdt-simple") - a module that contains simple implementations for MDT.
44
+ * [mdt-versioned](https://github.com/Phitherek/mdt-versioned "mdt-versioned") - a module that implements versioned releases deployment flow for MDT.
45
+ * [mdt-git](https://github.com/Phitherek/mdt-git "mdt-git") - a Git module for MDT.
44
46
 
45
47
  ## Contributing
46
48
 
data/bin/mdt CHANGED
@@ -25,6 +25,7 @@ op.parse!
25
25
 
26
26
  if ARGV.count < 1
27
27
  puts op.banner
28
+ exit 0
28
29
  end
29
30
 
30
31
  config = YAML.load_file(script_opts[:config_path])
@@ -41,6 +42,8 @@ unless subconfig.has_key?('directory_chooser') && subconfig.has_key?('fetcher')
41
42
  exit 1
42
43
  end
43
44
 
45
+ pre_contents = subconfig['pre_contents'] || []
46
+
44
47
  dirchooser_config = subconfig['directory_chooser']
45
48
 
46
49
  unless dirchooser_config.has_key?('type')
@@ -89,9 +92,23 @@ end
89
92
  fetcher = fetcher.new
90
93
 
91
94
  root_contents = subconfig['contents']
95
+ post_contents = subconfig['post_contents'] || []
92
96
 
93
97
  puts "Successfully loaded config: #{config_key}! Starting deploy..."
94
98
 
99
+ puts 'Running pre-deploy commands...'
100
+
101
+ begin
102
+ unless MDT::Helpers::Runner.process_contents(pre_contents)
103
+ puts 'ERROR: Pre-deploy process finished with failure!'
104
+ exit 1
105
+ end
106
+ rescue => e
107
+ puts "Exception: #{e.message}"
108
+ puts e.backtrace
109
+ exit 1
110
+ end
111
+
95
112
  unless dirchooser.mkdir(dirchooser_value, dirchooser_options) == 0
96
113
  puts 'ERROR: Directory chooser could not create a directory!'
97
114
  exit 1
@@ -99,25 +116,35 @@ end
99
116
  begin
100
117
  unless dirchooser.cd(dirchooser_value, dirchooser_options) == 0
101
118
  puts 'ERROR: Directory chooser could not enter a directory!'
119
+ puts 'Running post-deploy commands...'
120
+ MDT::Helpers::Runner.process_post_contents(post_contents, [], true)
102
121
  dirchooser.rm(dirchooser_value, dirchooser_options)
103
122
  exit 1
104
123
  end
105
124
  unless fetcher.fetch(fetcher_value, fetcher_options) == 0
106
125
  puts 'ERROR: Fetcher could not fetch!'
126
+ puts 'Running post-deploy commands...'
127
+ MDT::Helpers::Runner.process_post_contents(post_contents, [], true)
107
128
  dirchooser.rm(dirchooser_value, dirchooser_options)
108
129
  exit 1
109
130
  end
110
131
  unless MDT::Helpers::Runner.process_contents(root_contents) == 0
111
132
  puts 'ERROR: Deploy process ended with failure!'
133
+ puts 'Running post-deploy commands...'
134
+ MDT::Helpers::Runner.process_post_contents(post_contents, [], true)
112
135
  dirchooser.rm(dirchooser_value, dirchooser_options)
113
136
  exit 1
114
137
  end
115
138
  rescue => e
116
139
  puts "Exception: #{e.message}"
117
140
  puts e.backtrace
141
+ puts 'Running post-deploy commands...'
142
+ MDT::Helpers::Runner.process_post_contents(post_contents, [], true)
118
143
  dirchooser.rm(dirchooser_value, dirchooser_options)
119
144
  exit 1
120
145
  end
121
146
 
122
147
  puts 'Deploy process finished successfully!'
148
+ puts 'Running post-deploy commands...'
149
+ MDT::Helpers::Runner.process_post_contents(post_contents)
123
150
  exit 0
@@ -33,15 +33,15 @@ module MDT
33
33
  puts "ERROR: Could not find a command set with key #{cmd_key}. Check its correctness or install needed MDT modules."
34
34
  if cmd_config['break_on_failure']
35
35
  failure = true
36
- next
37
36
  end
37
+ next
38
38
  end
39
39
  unless cmd.subkeys.include?(cmd_value)
40
40
  puts "ERROR: Command set with key #{cmd_key} does not have a command with key #{cmd_value}!"
41
41
  if cmd_config['break_on_failure']
42
42
  failure = true
43
- next
44
43
  end
44
+ next
45
45
  end
46
46
  cmd = cmd.new
47
47
  code = cmd.execute(cmd_value, cmd_modifiers, cmd_options)
@@ -51,8 +51,8 @@ module MDT
51
51
  puts "Command exited with error code #{code}"
52
52
  if cmd_config['break_on_failure']
53
53
  failure = true
54
- next
55
54
  end
55
+ next
56
56
  end
57
57
  elsif elem.has_key?('command_group')
58
58
  cg_config = elem['command_group']
@@ -61,8 +61,8 @@ module MDT
61
61
  puts "ERROR: Command group #{cg_config['name']} without contents!"
62
62
  if cg_config['break_on_failure']
63
63
  failure = true
64
- next
65
64
  end
65
+ next
66
66
  end
67
67
  puts "Executing command group: #{cg_config['name']}"
68
68
  code = MDT::Helpers::Runner.process_contents(cg_config['contents'], modifiers + (cg_config['command_modifiers'] || []))
@@ -72,8 +72,8 @@ module MDT
72
72
  puts "Command group: #{cg_config['name']} - finished with failure"
73
73
  if cg_config['break_on_failure']
74
74
  failure = true
75
- next
76
75
  end
76
+ next
77
77
  end
78
78
  else
79
79
  puts 'WARNING: Encountered a config element that is not command nor command_group, skipping...'
@@ -82,6 +82,66 @@ module MDT
82
82
  end
83
83
  failure ? 1 : 0
84
84
  end
85
+
86
+ # A method that processes an array of contents that includes configurations for commands and command groups.
87
+ # Arguments:
88
+ # * +contents+ - an array of configurations for commands and command groups. Refer to example configuration file in the code repository for structure description
89
+ # * +modifiers+ - an array of configurations for command modifiers that have to be applied to every command defined in +contents+
90
+ # * +failure+ - a boolean that describes if the deploy process has ended with failure, false by default
91
+ # Returns:
92
+ # * nil
93
+ def self.process_post_contents(contents, modifiers = [], failure = false)
94
+ contents.each do |elem|
95
+ if elem.has_key?('command')
96
+ cmd_config = elem['command']
97
+ cmd_config['status'] ||= 'all'
98
+ cmd_key = cmd_config['type'].split('.').first
99
+ cmd_value = cmd_config['type'].split('.').last
100
+ cmd_options = cmd_config['options'] || {}
101
+ cmd_modifiers = modifiers + (cmd_config['command_modifiers'] || [])
102
+ cmd = MDT::Commands::Base.descendants.select { |c| c.key == cmd_key }.first
103
+ if cmd == nil
104
+ puts "ERROR: Could not find a command set with key #{cmd_key}. Check its correctness or install needed MDT modules."
105
+ next
106
+ end
107
+ unless cmd.subkeys.include?(cmd_value)
108
+ puts "ERROR: Command set with key #{cmd_key} does not have a command with key #{cmd_value}!"
109
+ next
110
+ end
111
+ if cmd_config['status'] == 'all'
112
+ cmd = cmd.new
113
+ code = cmd.execute(cmd_value, cmd_modifiers, cmd_options)
114
+ puts "Command exited with code #{code}"
115
+ elsif cmd_config['status'] == 'success'
116
+ unless failure
117
+ cmd = cmd.new
118
+ code = cmd.execute(cmd_value, cmd_modifiers, cmd_options)
119
+ puts "Command exited with code #{code}"
120
+ end
121
+ elsif cmd_config['status'] == 'failure'
122
+ if failure
123
+ cmd = cmd.new
124
+ code = cmd.execute(cmd_value, cmd_modifiers, cmd_options)
125
+ puts "Command exited with code #{code}"
126
+ end
127
+ else
128
+ puts 'status config key should have value all, success or failure, skipping command...'
129
+ end
130
+ elsif elem.has_key?('command_group')
131
+ cg_config = elem['command_group']
132
+ unless cg_config.has_key?('contents')
133
+ puts "ERROR: Command group #{cg_config['name']} without contents!"
134
+ next
135
+ end
136
+ puts "Executing command group: #{cg_config['name']}"
137
+ MDT::Helpers::Runner.process_post_contents(cg_config['contents'], modifiers + (cg_config['command_modifiers'] || []), failure)
138
+ puts "Command group: #{cg_config['name']} - finished"
139
+ else
140
+ puts 'WARNING: Encountered a config element that is not command nor command_group, skipping...'
141
+ end
142
+ end
143
+ nil
144
+ end
85
145
  end
86
146
  end
87
147
  end
@@ -3,6 +3,6 @@ module MDT
3
3
  # A module referring specifically to mdt-core
4
4
  module Core
5
5
  # mdt-core gem version
6
- VERSION = '0.1.1'
6
+ VERSION = '0.2'
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mdt-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phitherek_