coreos-deploy 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/coreos +79 -8
- data/coreos.gemspec +3 -1
- data/lib/coreos/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef184e886de61101c15787a20af08631d90f9948
|
4
|
+
data.tar.gz: 7ca01708bc06ed362fabb67d531c8ba7651ad252
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c2f9cc319f6653bfd6806d6c6ab03daaa66eb551c781aa4a218d9a33d03a1fd0e8f498eaa8ff0c603f397345fa6a55e816e8320aa8502b8ca3f770a5515c167
|
7
|
+
data.tar.gz: d6bb350c8db717cf8773c00341875352045155a3387b5820fcdb6e73a24bd274deccd3218307c0ae88aed9d53e668cda0fb0c815f715212a4181bb500c8703f7
|
data/bin/coreos
CHANGED
@@ -1,18 +1,89 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
rescue
|
6
|
-
require 'rubygems'
|
7
|
-
require 'thor'
|
8
|
-
end
|
9
|
-
|
3
|
+
require 'thor'
|
4
|
+
require 'net/ssh'
|
10
5
|
|
6
|
+
def loop_ssh_command(ssh, command)
|
7
|
+
puts "==> #{command}"
|
8
|
+
ssh.exec command
|
9
|
+
ssh.loop
|
10
|
+
end
|
11
11
|
|
12
12
|
class CoreOS < Thor
|
13
13
|
desc "deploy HOST", "deploys all services in ./coreos/HOST/*.service to HOST"
|
14
14
|
def deploy(host)
|
15
|
-
|
15
|
+
directories = Dir.entries("./coreos").select { |s| s.start_with? host }
|
16
|
+
puts directories
|
17
|
+
if directories.count == 1
|
18
|
+
host = directories[0]
|
19
|
+
end
|
20
|
+
|
21
|
+
base_directory = "./coreos/#{host}"
|
22
|
+
abort "Directory '#{base_directory}' does not exist" unless File.exists? base_directory
|
23
|
+
|
24
|
+
service_files = Dir.entries(base_directory).select { |s| s.end_with? ".service" }
|
25
|
+
abort "No service files found for #{host}" unless service_files.count > 0
|
26
|
+
|
27
|
+
login = nil
|
28
|
+
images = []
|
29
|
+
for file in service_files
|
30
|
+
path = "#{base_directory}/#{file}"
|
31
|
+
content = File.open(path, "rb").read
|
32
|
+
images << content.scan(/docker pull (.*)/).flatten
|
33
|
+
|
34
|
+
logins = content.scan(/docker login (.*)/).flatten
|
35
|
+
if logins.count > 0
|
36
|
+
login = logins[0]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
images = images.flatten.uniq
|
41
|
+
abort "no docker image found to pull" unless images.count > 0
|
42
|
+
|
43
|
+
puts "==> Copying service files"
|
44
|
+
system "scp #{base_directory}/*.service #{host}:"
|
45
|
+
|
46
|
+
Net::SSH.start("#{host}", ENV['USER'] ) do |ssh|
|
47
|
+
if login
|
48
|
+
loop_ssh_command ssh, "docker login #{login}"
|
49
|
+
end
|
50
|
+
|
51
|
+
for image in images
|
52
|
+
puts "==> docker pull #{image}"
|
53
|
+
ssh.exec! "docker pull #{image}"
|
54
|
+
ssh.loop
|
55
|
+
end
|
56
|
+
|
57
|
+
start_services = []
|
58
|
+
restart_services = []
|
59
|
+
|
60
|
+
for service in service_files
|
61
|
+
exists = ssh.exec!("test -e /etc/systemd/system/#{service} && echo 1 || echo 0")
|
62
|
+
ssh.exec! "sudo mv #{service} /etc/systemd/system/"
|
63
|
+
|
64
|
+
if exists.to_i == 1
|
65
|
+
restart_services << service
|
66
|
+
else
|
67
|
+
start_services << service
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
for service in start_services
|
72
|
+
loop_ssh_command ssh, "sudo systemctl enable /etc/systemd/system/#{service}"
|
73
|
+
end
|
74
|
+
|
75
|
+
if restart_services.count > 0
|
76
|
+
loop_ssh_command ssh, "sudo systemctl daemon-reload"
|
77
|
+
end
|
78
|
+
|
79
|
+
if start_services.count > 0
|
80
|
+
loop_ssh_command ssh, "sudo systemctl start #{start_services.join " "}"
|
81
|
+
end
|
82
|
+
|
83
|
+
if restart_services.count > 0
|
84
|
+
loop_ssh_command ssh, "sudo systemctl restart #{restart_services.join " "}"
|
85
|
+
end
|
86
|
+
end
|
16
87
|
end
|
17
88
|
end
|
18
89
|
|
data/coreos.gemspec
CHANGED
@@ -20,5 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.7"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
-
|
23
|
+
|
24
|
+
spec.add_dependency "thor", "~> 0.19"
|
25
|
+
spec.add_dependency "net-ssh", "~> 2.9"
|
24
26
|
end
|
data/lib/coreos/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coreos-deploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oliver Letterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -45,13 +45,27 @@ dependencies:
|
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0.19'
|
48
|
-
type: :
|
48
|
+
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.19'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: net-ssh
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.9'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.9'
|
55
69
|
description: Binary that let's You deploy docker services to coreos hosts.
|
56
70
|
email:
|
57
71
|
- oliver.letterer@gmail.com
|