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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff6dc295b2b3965dc57e04b6939e98c6e39028f6
4
- data.tar.gz: fa1feef27218916f7c8ea253b43495645089c0fc
3
+ metadata.gz: b5054af6f95aeaf16fa2778e2cce3ab643278fd6
4
+ data.tar.gz: f7a182c402001931a9d1c7782461c47d45937b4a
5
5
  SHA512:
6
- metadata.gz: 610fb9fd6451749f7c11aaf818ca6a39d578617a45a65e915e25d69266d3c40f2114d76df9e76387283478d5650c63c086c6e1b8488c8fa8439108b9c028e265
7
- data.tar.gz: 731f2eeafe0e07ca9bc4cae992eda2022a3c9a9add0b499321f1f874c25e14fd6f796e5a269bc040d44799e86450f99742a831293a153db3de84049016b4395e
6
+ metadata.gz: d79c083d740bd2edfe11ddbf7ad49e7321e474beb0c168f72f5311fdc9cb9d3bdd792ddb392e7c736d06f449df7892b62f267596ed28ee85627dfb7d2f15e6e4
7
+ data.tar.gz: b392c2ceee3297c4a2f5f9770b6a5ad2ae0310993280e0ab65206be1578a1bb833e063829e38f3d5f36c6d2acd2a7b7ee6e262a3eca45c0966b49bfe629bc8ee
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Change Log
2
2
 
3
+ ## [0.5.2] - 2016-03-08
4
+ ### Added
5
+ - Support for cleaning up ci/test stage databases and replication controllers
6
+
3
7
  ## [0.5.1] - 2016-03-07
4
8
  ### Added
5
9
  - Support for storing/updateing tag information within config file
@@ -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' => admin_secret['host'],
41
- 'port' => admin_secret['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
- # create postgres database
55
- # rubocop:disable Metrics/MethodLength
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
- conn = PG::Connection.open(admin_secret)
71
+ def admin_conn
72
+ @admin_conn ||= create_admin_conn
73
+ end
64
74
 
65
- user = conn.escape_string(container_secret['user'])
66
- password = conn.escape_string(container_secret['password'])
67
- name = conn.escape_string(container_secret['name'])
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
- conn.exec(
118
+ admin_conn.exec(
71
119
  "CREATE USER \"#{user}\" " \
72
120
  "WITH PASSWORD '#{password}'"
73
121
  )
74
122
 
75
123
  # create db
76
- conn.exec(
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
- conn.exec("
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
- conn.close
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
- get_secret('postgres').update('dbname' => 'postgres')
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
@@ -92,7 +92,6 @@ module PicsolveDockerBuilder
92
92
  def read
93
93
  @config = default
94
94
  @paths.each do |file|
95
- puts "my file is '#{@paths}'"
96
95
  begin
97
96
  yaml = Psych.load_file file
98
97
  @config = @config.deep_merge(yaml)
@@ -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
@@ -1,4 +1,4 @@
1
1
  # version
2
2
  module PicsolveDockerBuilder
3
- VERSION = '0.5.1'
3
+ VERSION = '0.5.2'
4
4
  end
@@ -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.1
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-07 00:00:00.000000000 Z
11
+ date: 2016-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler