mesos-deploy 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.
Files changed (6) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +1 -0
  4. data/bin/mesos-deploy +40 -0
  5. data/lib/mesos-deploy.rb +82 -0
  6. metadata +108 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 59fdc7d0147f32fdcc9203c700d1dffcd593a3bd
4
+ data.tar.gz: 222f071e0b9cd50e2844f376a2d1718560a5565b
5
+ SHA512:
6
+ metadata.gz: d1cb3eb7b140ac1ada12bfd28687c1fe41765e16e1c0d2d9afe44d239652d60f8f7ef0db56bb4e84da4beca9a1bbd92c692034b9dbc41a0035d0b259ff0dd546
7
+ data.tar.gz: a93e41280c1162cf07ba54ce2b26934bfd0dc005ef38eb9f8a8ef71fcf0b06458372071c46eb63b104032b24b40f27368ada087908f0b0d30e3cce7cf14e81f5
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Offers.com
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1 @@
1
+ # mesos-deploy
data/bin/mesos-deploy ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+ require 'mesos-deploy'
3
+
4
+ def valid_release?(release)
5
+ !!release && release =~ /r([0-9]*)/
6
+ end
7
+
8
+ def usage
9
+ puts <<USAGE
10
+ Usage: mesos-deploy <release> [config.yml]
11
+ You must have added a release tag in the registry/repo, like r01
12
+
13
+ USAGE
14
+ end
15
+
16
+ begin
17
+ release = ARGV[0]
18
+ usage unless valid_release?(release)
19
+
20
+ deployer = MesosDeploy.new(release, ARGV[1])
21
+ rescue
22
+ puts <<ERROR_MESSAGE
23
+ A mesos-config.yml file must be in the same directory that this command is run, or passed as an argument.
24
+ This yml file should be formatted like so and contain at least the top line:
25
+
26
+ repo: registry.example.net/engineering/example
27
+ singularity_url: http://singularity.example/singularity
28
+ marathon:
29
+ url: http://marathon.example
30
+ user: example
31
+ password: example
32
+ marathons:
33
+ - /example/example
34
+ - ...<as many entries here as necessary>
35
+ ERROR_MESSAGE
36
+ exit
37
+ end
38
+
39
+ deployer.run
40
+
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+ require 'colorize'
3
+ require 'erb'
4
+ require 'json'
5
+ require 'singularity'
6
+ require 'yaml'
7
+
8
+ class MesosDeploy
9
+
10
+ def initialize(release, file = nil)
11
+ path = File.join(Dir.pwd, "mesos-deploy.yml")
12
+ if !!file
13
+ @config = YAML.load_file(file)
14
+ elsif File.exists? (path)
15
+ @config = YAML.load_file(path)
16
+ else
17
+ raise ArgumentError.new("No mesos-deploy.yml file found.")
18
+ end
19
+
20
+ if !valid_release?(release)
21
+ raise ArgumentError.new("Invalid release number given.")
22
+ end
23
+
24
+ if !@config['repo']
25
+ raise ArgumentError.new("YML file given has no repo defined.")
26
+ end
27
+
28
+ @release = release
29
+ @repo = @config['repo']
30
+ if @config['singularity_url']
31
+ @singularity_url = @config['singularity_url']
32
+ end
33
+ if @config['marathons']
34
+ @marathon_url = @config['marathon']['url']
35
+ @marathon_user = @config['marathon']['user']
36
+ @marathon_password = @config['marathon']['password']
37
+ @marathons = @config['marathons']
38
+ end
39
+ end
40
+
41
+ def deploy_singularity
42
+ path = File.join(Dir.pwd, 'singularity')
43
+ Dir["#{path}/*.json"].each do |file|
44
+ Singularity::Deployer.new(@singularity_url, file, @release).deploy
45
+ end
46
+ end
47
+
48
+ def update_mescal_config(image)
49
+ # Update mescal config file revision
50
+ config = JSON.parse(File.read(".mescal.json"))
51
+ config['image'] = image
52
+ File.open(".mescal.json", 'w') { |config_file| config_file.puts(JSON.dump(config)) }
53
+
54
+ puts "Updating .mescal.json".yellow
55
+ system("git add .mescal.json && git commit -m \"update .mescal.json [skip build]\" && git push origin `git rev-parse --abbrev-ref HEAD`")
56
+ end
57
+
58
+ def valid_release?(release)
59
+ !!release && release =~ /r([0-9]*)/
60
+ end
61
+
62
+ def run
63
+ # singularity deploy if necessary
64
+ if !!@singularity_url
65
+ deploy_singularity
66
+ end
67
+
68
+ # marathon deploy if necessary
69
+ docker_image = "#{@repo}:#{@release}"
70
+ if !!@marathons
71
+ @marathons.each do |app_id|
72
+ cmd = "haile -R #{@marathon_url} -U #{@marathon_user} -P #{@marathon_password} docker_deploy -i #{app_id} -d #{docker_image}"
73
+ system(cmd)
74
+ end
75
+ end
76
+
77
+ # update mescal configuration
78
+ if File.exists?(File.join(Dir.pwd, ".mescal.json"))
79
+ update_mescal_config(docker_image)
80
+ end
81
+ end
82
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mesos-deploy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Travis Webb
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.7.7
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.7.7
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 0.7.7
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.7.7
33
+ - !ruby/object:Gem::Dependency
34
+ name: singularity-cli
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.2.1
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.2.1
53
+ - !ruby/object:Gem::Dependency
54
+ name: haile
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.4.2
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.4.2
73
+ description: 'Usage: mesos-deploy <release> [config.yml]'
74
+ email:
75
+ executables:
76
+ - mesos-deploy
77
+ extensions: []
78
+ extra_rdoc_files: []
79
+ files:
80
+ - LICENSE
81
+ - README.md
82
+ - bin/mesos-deploy
83
+ - lib/mesos-deploy.rb
84
+ homepage: https://github.com/offers/mesos-deploy
85
+ licenses:
86
+ - MIT
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 2.5.1
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: mesos deploy tools
108
+ test_files: []