picsolve_docker_builder 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/picsolve_docker_builder/composer/composer.rb +9 -0
- data/lib/picsolve_docker_builder/composer/requirements/base.rb +4 -0
- data/lib/picsolve_docker_builder/composer/requirements/postgres.rb +71 -20
- data/lib/picsolve_docker_builder/helpers/config_manager.rb +0 -1
- data/lib/picsolve_docker_builder/helpers/kubernetes_manager.rb +27 -0
- data/lib/picsolve_docker_builder/version.rb +1 -1
- data/lib/tasks/compose.rake +8 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5054af6f95aeaf16fa2778e2cce3ab643278fd6
|
4
|
+
data.tar.gz: f7a182c402001931a9d1c7782461c47d45937b4a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d79c083d740bd2edfe11ddbf7ad49e7321e474beb0c168f72f5311fdc9cb9d3bdd792ddb392e7c736d06f449df7892b62f267596ed28ee85627dfb7d2f15e6e4
|
7
|
+
data.tar.gz: b392c2ceee3297c4a2f5f9770b6a5ad2ae0310993280e0ab65206be1578a1bb833e063829e38f3d5f36c6d2acd2a7b7ee6e262a3eca45c0966b49bfe629bc8ee
|
data/CHANGELOG.md
CHANGED
@@ -55,6 +55,15 @@ module PicsolveDockerBuilder
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
+
def cleanup
|
59
|
+
kubernetes_clusters.each do |cluster|
|
60
|
+
begin
|
61
|
+
log.info "Cleanup kubernetes cluster #{cluster.host}"
|
62
|
+
cluster.cleanup
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
58
67
|
def deploy
|
59
68
|
errors = 0
|
60
69
|
kubernetes_clusters.each do |cluster|
|
@@ -37,6 +37,10 @@ module PicsolveDockerBuilder
|
|
37
37
|
SecureRandom.urlsafe_base64(length)
|
38
38
|
end
|
39
39
|
|
40
|
+
def delete_secret(name)
|
41
|
+
kubernetes.client.delete_secret name, namespace
|
42
|
+
end
|
43
|
+
|
40
44
|
def create_secret(name, obj)
|
41
45
|
secret = Kubeclient::Secret.new
|
42
46
|
secret.metadata = {
|
@@ -28,20 +28,27 @@ module PicsolveDockerBuilder
|
|
28
28
|
create_postgres_secret
|
29
29
|
end
|
30
30
|
|
31
|
+
# ssh port forward
|
32
|
+
def forward
|
33
|
+
return @forward unless @forward.nil?
|
34
|
+
@forward = ssh_forward(
|
35
|
+
admin_postgres_secret['host'],
|
36
|
+
admin_postgres_secret['port'].to_i
|
37
|
+
)
|
38
|
+
@forward
|
39
|
+
end
|
40
|
+
|
31
41
|
# create a new postgres secret and create the according database
|
32
42
|
def create_postgres_secret
|
33
|
-
admin_secret = admin_postgres_secret
|
34
|
-
|
35
43
|
log.info "Create secret for #{user_and_db_name} database"
|
36
44
|
container_secret = {
|
37
45
|
'name' => user_and_db_name,
|
38
46
|
'user' => user_and_db_name,
|
39
47
|
'password' => gen_password,
|
40
|
-
'host' =>
|
41
|
-
'port' =>
|
48
|
+
'host' => admin_postgres_secret['host'],
|
49
|
+
'port' => admin_postgres_secret['port']
|
42
50
|
}
|
43
51
|
create_postgres_database(
|
44
|
-
admin_secret,
|
45
52
|
container_secret
|
46
53
|
)
|
47
54
|
create_secret(
|
@@ -51,39 +58,80 @@ module PicsolveDockerBuilder
|
|
51
58
|
container_secret
|
52
59
|
end
|
53
60
|
|
54
|
-
|
55
|
-
|
56
|
-
def create_postgres_database(admin_secret, container_secret)
|
57
|
-
log.info "Create database #{user_and_db_name}"
|
58
|
-
|
59
|
-
forward = ssh_forward(admin_secret['host'], admin_secret['port'].to_i)
|
61
|
+
def create_admin_conn
|
62
|
+
admin_secret = admin_postgres_secret.clone
|
60
63
|
admin_secret['host'] = '127.0.0.1'
|
61
64
|
admin_secret['port'] = forward.local_port
|
65
|
+
log.info 'open postgres connection to ' \
|
66
|
+
"#{admin_secret['host']}:#{admin_secret['port']}" \
|
67
|
+
" with user #{admin_secret['user']}"
|
68
|
+
PG::Connection.open(admin_secret)
|
69
|
+
end
|
62
70
|
|
63
|
-
|
71
|
+
def admin_conn
|
72
|
+
@admin_conn ||= create_admin_conn
|
73
|
+
end
|
64
74
|
|
65
|
-
|
66
|
-
|
67
|
-
|
75
|
+
def admin_conn_close
|
76
|
+
admin_conn.close
|
77
|
+
@admin_conn = nil
|
78
|
+
end
|
79
|
+
|
80
|
+
# cleanup postgres database
|
81
|
+
def cleanup_postgres_database
|
82
|
+
dbname = admin_conn.escape_string(user_and_db_name)
|
83
|
+
|
84
|
+
begin
|
85
|
+
sql = "DROP DATABASE \"#{dbname}\";"
|
86
|
+
admin_conn.exec sql
|
87
|
+
log.info "removed database #{user_and_db_name}"
|
88
|
+
rescue
|
89
|
+
log.warn "removing database #{user_and_db_name} failed"
|
90
|
+
end
|
91
|
+
|
92
|
+
begin
|
93
|
+
sql = "DROP USER \"#{dbname}\";"
|
94
|
+
admin_conn.exec sql
|
95
|
+
log.info "removed user #{user_and_db_name}"
|
96
|
+
rescue
|
97
|
+
log.warn "removing user #{user_and_db_name} failed"
|
98
|
+
end
|
99
|
+
|
100
|
+
begin
|
101
|
+
delete_secret user_and_db_name
|
102
|
+
log.info "removed secret #{user_and_db_name}"
|
103
|
+
rescue
|
104
|
+
log.warn "removing secret #{user_and_db_name} failed"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# create postgres database
|
109
|
+
# rubocop:disable Metrics/MethodLength
|
110
|
+
def create_postgres_database(container_secret)
|
111
|
+
log.info "Create database #{user_and_db_name}"
|
112
|
+
|
113
|
+
user = admin_conn.escape_string(container_secret['user'])
|
114
|
+
password = admin_conn.escape_string(container_secret['password'])
|
115
|
+
name = admin_conn.escape_string(container_secret['name'])
|
68
116
|
|
69
117
|
# create user
|
70
|
-
|
118
|
+
admin_conn.exec(
|
71
119
|
"CREATE USER \"#{user}\" " \
|
72
120
|
"WITH PASSWORD '#{password}'"
|
73
121
|
)
|
74
122
|
|
75
123
|
# create db
|
76
|
-
|
124
|
+
admin_conn.exec(
|
77
125
|
"CREATE DATABASE \"#{name}\""
|
78
126
|
)
|
79
127
|
|
80
128
|
# grant all rights to the user and the aws user
|
81
|
-
|
129
|
+
admin_conn.exec("
|
82
130
|
GRANT ALL PRIVILEGES ON DATABASE \"#{name}\" to \"#{user}\";
|
83
131
|
GRANT ALL PRIVILEGES ON DATABASE \"#{name}\" to \"rds_superuser\";
|
84
132
|
")
|
85
133
|
|
86
|
-
|
134
|
+
admin_conn_close
|
87
135
|
|
88
136
|
admin_secret['dbname'] = name
|
89
137
|
admin_secret['user'] = user
|
@@ -110,7 +158,10 @@ module PicsolveDockerBuilder
|
|
110
158
|
|
111
159
|
# get administrative postgres secrets
|
112
160
|
def admin_postgres_secret
|
113
|
-
|
161
|
+
return @admin_postgres_secret unless @admin_postgres_secret.nil?
|
162
|
+
@admin_postgres_secret = get_secret('postgres')
|
163
|
+
@admin_postgres_secret.update('dbname' => 'postgres')
|
164
|
+
@admin_postgres_secret
|
114
165
|
end
|
115
166
|
|
116
167
|
def user_and_db_name
|
@@ -35,6 +35,33 @@ module PicsolveDockerBuilder
|
|
35
35
|
'core'
|
36
36
|
end
|
37
37
|
|
38
|
+
def cleanup
|
39
|
+
stages_allowed = %w(ci test)
|
40
|
+
unless stages_allowed.include? stage
|
41
|
+
log.error "Refuse to cleanup in stage #{stage}." \
|
42
|
+
"I only clean up in stages #{stages_allowed.join ', '}"
|
43
|
+
exit 1
|
44
|
+
end
|
45
|
+
log.info "Cleanup databases for '#{app_name}' in '#{stage}'"
|
46
|
+
rcs = []
|
47
|
+
images.each do |i|
|
48
|
+
i.requirements(self).each do |requirements|
|
49
|
+
continue unless requirements.is_a?(
|
50
|
+
PicsolveDockerBuilder::Composer::Requirements::Postgres
|
51
|
+
)
|
52
|
+
requirements.cleanup_postgres_database
|
53
|
+
end
|
54
|
+
rcs += i.rc(self).existing_rcs
|
55
|
+
end
|
56
|
+
|
57
|
+
log.info "Cleanup replication controllers for '#{app_name}' " \
|
58
|
+
"in '#{stage}'"
|
59
|
+
rcs.each do |rc|
|
60
|
+
rc.remove
|
61
|
+
rc.remove_pods_orphan
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
38
65
|
def create_client
|
39
66
|
Kubeclient::Client.new kubernetes_url, 'v1'
|
40
67
|
end
|
data/lib/tasks/compose.rake
CHANGED
@@ -30,4 +30,12 @@ namespace :compose do
|
|
30
30
|
require 'picsolve_docker_builder/helpers/config_version_update'
|
31
31
|
PicsolveDockerBuilder::Helpers::ConfigVersionUpdate.update_task
|
32
32
|
end
|
33
|
+
|
34
|
+
desc 'Cleanup databases/replication_controllers'
|
35
|
+
task :cleanup do
|
36
|
+
@docker_compose ||= PicsolveDockerBuilder::Composer::Composer.new
|
37
|
+
stage = ENV['STAGE'] || 'CI'
|
38
|
+
@docker_compose.stage = stage
|
39
|
+
@docker_compose.cleanup
|
40
|
+
end
|
33
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: picsolve_docker_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Simon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|