coreos-deploy 0.0.2 → 0.1.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 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