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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5b91e6db799143fe695ec48b4ce9a18fc87729d
4
- data.tar.gz: 9a9f9f9fd0f9946bef807f3dfa94615249bdadd1
3
+ metadata.gz: ef184e886de61101c15787a20af08631d90f9948
4
+ data.tar.gz: 7ca01708bc06ed362fabb67d531c8ba7651ad252
5
5
  SHA512:
6
- metadata.gz: 21cbdf8e93b831e439442dc16c71b18e879cc0ada0dd82fc5ed95ff340b511d3d36b260a0b8e74bbbd21a38c524096f55a3db3d4905713794866efcd07d81fe1
7
- data.tar.gz: 10330a339ef4fd0b714edf0d34d58424d2be8fe4e15410e06ce8c5e2669b4037e9a0857149e7153a9282c0f16be1f81afe008f90b061d4adf2193c905f8df6cc
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
- begin
4
- require 'thor'
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
- puts "Hello #{host}!!!"
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
- spec.add_development_dependency "thor", "~> 0.19"
23
+
24
+ spec.add_dependency "thor", "~> 0.19"
25
+ spec.add_dependency "net-ssh", "~> 2.9"
24
26
  end
@@ -1,3 +1,3 @@
1
1
  module Coreos
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
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.2
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-28 00:00:00.000000000 Z
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: :development
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