dpl-deis 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 01a6e67712b3c91b357285519aff49912a880dec
4
+ data.tar.gz: dcf932f286c63fe16d0c5a29e07b94ce37ac701d
5
+ SHA512:
6
+ metadata.gz: a7588a1bcbfed7212226cd165c853e580cd6d3260b92580d5d278469d651e2ecd16f0263897c7151127a0cb9589e04bfd9a4e64557bdc4d2410ff7ab1f62ed80
7
+ data.tar.gz: 217a930fa0a285d9b688475b00f73e2518a5c3842f2a66785a9b292228aec48cd75efc9c3e8cef3d7812e83e2c8cb684cd6a702084c99aa07847a6c85f90502b
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'deis'
@@ -0,0 +1,128 @@
1
+ module DPL
2
+ class Provider
3
+ class Deis < Provider
4
+
5
+ def install_deploy_dependencies
6
+ install_url = determine_install_url
7
+ context.shell "curl -sSL #{install_url} | bash -x -s #{option(:cli_version)}"
8
+ end
9
+
10
+ #Default to installing the default v1 client. Otherwise determine if this is a v2 client
11
+ def determine_install_url
12
+ if option(:cli_version).nil?
13
+ return "http://deis.io/deis-cli/install.sh"
14
+ else
15
+ version_arg = Gem::Version.new(option(:cli_version).gsub(/^v?V?/,''))
16
+ if version_arg >= Gem::Version.new('2.0.0')
17
+ return "http://deis.io/deis-cli/install-v2.sh"
18
+ else
19
+ return "http://deis.io/deis-cli/install.sh"
20
+ end
21
+ end
22
+ end
23
+
24
+ def needs_key?
25
+ true
26
+ end
27
+
28
+ def check_auth
29
+ unless context.shell "./deis login #{option(:controller)}" \
30
+ " --username=#{option(:username)}" \
31
+ " --password=#{option(:password)}"
32
+ error 'Login failed.'
33
+ end
34
+ end
35
+
36
+ def check_app
37
+ unless context.shell "./deis apps:info --app=#{option(:app)}"
38
+ error 'Application could not be verified.'
39
+ end
40
+ end
41
+
42
+ def setup_key(file)
43
+ unless context.shell "./deis keys:add #{file}"
44
+ error 'Adding keys failed.'
45
+ end
46
+ end
47
+
48
+ def setup_git_ssh(path, key_path)
49
+ key_path = File.expand_path(key_path)
50
+ path = File.expand_path(path)
51
+
52
+ File.open(path, 'w') do |file|
53
+ file.write "#!/bin/sh\n"
54
+ file.write "exec ssh #{verbose_flag} -o StrictHostKeychecking=no -o CheckHostIP=no -o UserKnownHostsFile=/dev/null -i #{key_path} \"$@\"\n"
55
+ end
56
+
57
+ chmod(0740, path)
58
+ context.env['GIT_SSH'] = path
59
+
60
+ wait_for_git_access
61
+ end
62
+
63
+ def wait_for_git_access()
64
+ retry_count=0
65
+ max_retries=30
66
+
67
+ #Get the deis git remote host and port
68
+ remote_uri=repository_url.split("ssh://")[1].split("/")[0]
69
+ remote_host, remote_port = remote_uri.split(":")
70
+ puts "Git remote is #{remote_host} at port #{remote_port}"
71
+
72
+ #Try and connect to the github remote via ssh.
73
+ while retry_count < max_retries
74
+ puts "Waiting for ssh key to propagate..."
75
+ if context.shell "#{context.env['GIT_SSH']} #{remote_host} -p #{remote_port} 2>&1 | grep -c 'PTY allocation request failed' > /dev/null"
76
+ puts "SSH connection established."
77
+ break
78
+ end
79
+ retry_count += 1
80
+ sleep(1)
81
+ end
82
+ end
83
+
84
+ def remove_key
85
+ unless context.shell "./deis keys:remove #{option(:key_name)}"
86
+ error 'Removing keys failed.'
87
+ end
88
+ end
89
+
90
+ def repository_url
91
+ "ssh://git@#{builder_hostname}:2222/#{option(:app)}.git"
92
+ end
93
+
94
+ def builder_hostname
95
+ host_tokens = controller_host.split(".")
96
+ host_tokens[0] = [host_tokens[0], "builder"].join("-")
97
+ host_tokens.join(".")
98
+ end
99
+
100
+ def controller_host
101
+ option(:controller).gsub(/https?:\/\//, "").split(":")[0]
102
+ end
103
+
104
+ def push_app
105
+ unless context.shell "bash -c 'git push #{verbose_flag} #{repository_url} HEAD:refs/heads/master -f 2>&1 | tr -dc \"[:alnum:][:space:][:punct:]\" | sed -E \"s/remote: (\\[1G)+//\" | sed \"s/\\[K$//\"; exit ${PIPESTATUS[0]}'"
106
+ error 'Deploying application failed.'
107
+ end
108
+ end
109
+
110
+ def run(command)
111
+ unless context.shell "./deis run -a #{option(:app)} -- #{command}"
112
+ error 'Running command failed.'
113
+ end
114
+ end
115
+
116
+ def cleanup
117
+ return if options[:skip_cleanup]
118
+ context.shell "mv deis ~/deis"
119
+ super
120
+ context.shell "mv ~/deis deis"
121
+ end
122
+
123
+ def verbose_flag
124
+ '-v' if options[:verbose]
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,116 @@
1
+ require 'spec_helper'
2
+ require 'dpl/provider/deis'
3
+
4
+ describe DPL::Provider::Deis do
5
+ let(:options) do
6
+ {
7
+ :app => 'example',
8
+ :key_name => 'key',
9
+ :controller => 'https://deis.deisapps.com',
10
+ :username => 'travis',
11
+ :password => 'secret',
12
+ :cli_version => 'v2.0.0'
13
+ }
14
+ end
15
+
16
+ subject :provider do
17
+ described_class.new(DummyContext.new, options)
18
+ end
19
+
20
+ describe "#install_deploy_dependencies" do
21
+ example do
22
+ expect(provider.context).to receive(:shell).with(
23
+ 'curl -sSL http://deis.io/deis-cli/install-v2.sh | bash -x -s v2.0.0'
24
+ ).and_return(true)
25
+ provider.install_deploy_dependencies
26
+ end
27
+ end
28
+
29
+ describe "#needs_key?" do
30
+ example do
31
+ expect(provider.needs_key?).to eq(true)
32
+ end
33
+ end
34
+
35
+ describe "#check_auth" do
36
+ example do
37
+ expect(provider.context).to receive(:shell).with(
38
+ './deis login https://deis.deisapps.com --username=travis --password=secret'
39
+ ).and_return(true)
40
+ provider.check_auth
41
+ end
42
+ end
43
+
44
+ describe "#check_app" do
45
+ example do
46
+ expect(provider.context).to receive(:shell).with(
47
+ './deis apps:info --app=example'
48
+ ).and_return(true)
49
+ provider.check_app
50
+ end
51
+ end
52
+
53
+ describe "#setup_key" do
54
+ let(:ssh_config_handle) { double 'ssh_config_handle' }
55
+ let(:ssh_config) { File.join(Dir.home, '.ssh', 'config') }
56
+ let(:identity_file) { File.join(Dir.pwd, 'key_file') }
57
+ example do
58
+ expect(provider.context).to receive(:shell).with(
59
+ './deis keys:add key_file'
60
+ ).and_return(true)
61
+ provider.setup_key('key_file')
62
+ end
63
+ end
64
+
65
+ describe "#setup_git_ssh" do
66
+ example do
67
+ expect(provider.context).to receive(:shell).with(
68
+ /grep -c 'PTY allocation request failed'/
69
+ ).and_return(false)
70
+
71
+ expect(provider.context).to receive(:shell).with(
72
+ /grep -c 'PTY allocation request failed'/
73
+ ).and_return(true)
74
+
75
+ provider.setup_git_ssh('foo', 'key_file')
76
+ end
77
+ end
78
+
79
+ describe "#remove_key" do
80
+ example do
81
+ expect(provider.context).to receive(:shell).with(
82
+ './deis keys:remove key'
83
+ ).and_return(true)
84
+ provider.remove_key
85
+ end
86
+ end
87
+
88
+ describe "#push_app" do
89
+ example do
90
+ expect(provider.context).to receive(:shell).with(
91
+ "bash -c 'git push ssh://git@deis-builder.deisapps.com:2222/example.git HEAD:refs/heads/master -f 2>&1 | tr -dc \"[:alnum:][:space:][:punct:]\" | sed -E \"s/remote: (\\[1G)+//\" | sed \"s/\\[K$//\"; exit ${PIPESTATUS[0]}'"
92
+ ).and_return(true)
93
+ provider.push_app
94
+ end
95
+ end
96
+
97
+ describe "#run" do
98
+ example do
99
+ expect(provider.context).to receive(:shell).with(
100
+ './deis run -a example -- shell command'
101
+ ).and_return(true)
102
+ provider.run('shell command')
103
+ end
104
+ end
105
+
106
+ describe "#cleanup" do
107
+ example do
108
+ expect(provider.context).to receive(:shell).with('mv deis ~/deis')
109
+ expect(provider.context).to receive(:shell).with('mv .dpl ~/dpl')
110
+ expect(provider.context).to receive(:shell).with('git stash --all')
111
+ expect(provider.context).to receive(:shell).with('mv ~/dpl .dpl')
112
+ expect(provider.context).to receive(:shell).with('mv ~/deis deis')
113
+ provider.cleanup
114
+ end
115
+ end
116
+ end
metadata ADDED
@@ -0,0 +1,159 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dpl-deis
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Konstantin Haase
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dpl
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.9.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.9.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-its
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: json_pure
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: tins
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: coveralls
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: highline
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: deploy tool abstraction for clients
126
+ email: konstantin.mailinglists@googlemail.com
127
+ executables: []
128
+ extensions: []
129
+ extra_rdoc_files: []
130
+ files:
131
+ - dpl-deis.gemspec
132
+ - lib/dpl/provider/deis.rb
133
+ - spec/provider/deis_spec.rb
134
+ homepage: https://github.com/travis-ci/dpl
135
+ licenses:
136
+ - MIT
137
+ metadata: {}
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '2.2'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 2.6.13
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: deploy tool
158
+ test_files:
159
+ - spec/provider/deis_spec.rb