picsolve_docker_builder 0.5.1 → 0.5.2
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 +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
|