knife-ec-backup 2.4.0 → 2.4.15

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +67 -42
  3. data/Rakefile +1 -1
  4. data/lib/chef/automate.rb +18 -0
  5. data/lib/chef/knife/ec_backup.rb +7 -6
  6. data/lib/chef/knife/ec_base.rb +29 -5
  7. data/lib/chef/knife/ec_key_base.rb +50 -15
  8. data/lib/chef/knife/ec_key_export.rb +1 -1
  9. data/lib/chef/knife/ec_key_import.rb +3 -3
  10. data/lib/chef/knife/ec_restore.rb +7 -6
  11. data/lib/chef/server.rb +3 -4
  12. data/lib/knife_ec_backup/version.rb +2 -1
  13. data/spec/chef/knife/ec_backup_spec.rb +2 -0
  14. data/spec/chef/knife/ec_base_spec.rb +1 -1
  15. data/spec/chef/knife/ec_key_base_spec.rb +5 -4
  16. data/spec/chef/knife/ec_key_export_spec.rb +2 -2
  17. data/spec/chef/knife/ec_restore_spec.rb +1 -1
  18. data/spec/chef/server_spec.rb +22 -17
  19. metadata +19 -31
  20. data/spec/chef/knife/coverage/assets/0.10.2/application.css +0 -799
  21. data/spec/chef/knife/coverage/assets/0.10.2/application.js +0 -1707
  22. data/spec/chef/knife/coverage/assets/0.10.2/colorbox/border.png +0 -0
  23. data/spec/chef/knife/coverage/assets/0.10.2/colorbox/controls.png +0 -0
  24. data/spec/chef/knife/coverage/assets/0.10.2/colorbox/loading.gif +0 -0
  25. data/spec/chef/knife/coverage/assets/0.10.2/colorbox/loading_background.png +0 -0
  26. data/spec/chef/knife/coverage/assets/0.10.2/favicon_green.png +0 -0
  27. data/spec/chef/knife/coverage/assets/0.10.2/favicon_red.png +0 -0
  28. data/spec/chef/knife/coverage/assets/0.10.2/favicon_yellow.png +0 -0
  29. data/spec/chef/knife/coverage/assets/0.10.2/loading.gif +0 -0
  30. data/spec/chef/knife/coverage/assets/0.10.2/magnify.png +0 -0
  31. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  32. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  33. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  34. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  35. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  36. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  37. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  38. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  39. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png +0 -0
  40. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  41. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png +0 -0
  42. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png +0 -0
  43. data/spec/chef/knife/coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  44. data/spec/chef/knife/coverage/index.html +0 -72
  45. data/spec/chef/knife/key_dump.json +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97caddffcc68ceb8414efdcb07a06dd9e3bd25255bdec00c989cee252d726bba
4
- data.tar.gz: e19bc5a8d5927663439cbe2f30026e3b97cc3023bc8836a3726fd9e8a5b0cf23
3
+ metadata.gz: ddb6a9c53f5ef60525564d583b9906c746c3af34b8fe25fe92d8e0f362d1f039
4
+ data.tar.gz: '04987273e967c37af6b3738bac962349f07edc5a4db1a0ec13c0004093adc8af'
5
5
  SHA512:
6
- metadata.gz: f4148c8d37140bf17728bfe6212ee7136e25c2d8e9f841ce419787be577c9c8cbc2d0650c7a8e28c2bf2b6db4e461f866cb96002942580593297330d7f74b679
7
- data.tar.gz: a64790d2b77e791985b439939ec442223e89a7f47b6b2af44c83da323d9da58185f4059074c5c6da3cd82bba2071cd33cedcef0410a599a4fae96797b40aaac3
6
+ metadata.gz: ab40c44efddf1418bf52ed6d329b4e8d4419c927dbdcbfc758440d53b178183747c333c9019bbaec16b59750ec0432e9bf7397bcd651e978445abfe2f4515b4d
7
+ data.tar.gz: b5a4137aca897ffcf811e1c96fc87b3ffeb435337ac1aaf1a2301ed9ea0683983da8c1991daa9ce5413d6551453de98e2c99c6f8cb1156420f78a5104d9919e6
data/README.md CHANGED
@@ -1,8 +1,16 @@
1
- # knife EC backup
2
- [![Build Status Master](https://travis-ci.org/chef/knife-ec-backup.svg?branch=master)](https://travis-ci.org/chef/knife-ec-backup)
1
+ # Knife EC Backup
2
+ [![Build status](https://badge.buildkite.com/4bc85427aab66accafbd7abb2932b9dd7f9208162c5be33488.svg?branch=master)](https://buildkite.com/chef-oss/chef-knife-ec-backup-master-verify)
3
3
  [![Gem Version](https://badge.fury.io/rb/knife-ec-backup.svg)](https://badge.fury.io/rb/knife-ec-backup)
4
4
 
5
- # Description
5
+ **Umbrella Project**: [Knife](https://github.com/chef/chef-oss-practices/blob/master/projects/knife.md)
6
+
7
+ **Project State**: [Active](https://github.com/chef/chef-oss-practices/blob/master/repo-management/repo-states.md#active)
8
+
9
+ **Issues [Response Time Maximum](https://github.com/chef/chef-oss-practices/blob/master/repo-management/repo-states.md)**: 14 days
10
+
11
+ **Pull Request [Response Time Maximum](https://github.com/chef/chef-oss-practices/blob/master/repo-management/repo-states.md)**: 14 days
12
+
13
+ ## Description
6
14
 
7
15
  knife-ec-backup can backup and restore the data in an Enterprise Chef
8
16
  Server installation, preserving the data in an intermediate, editable
@@ -10,29 +18,24 @@ text format. It is similar to the `knife download` and `knife upload`
10
18
  commands and uses the same underlying libraries, but also includes
11
19
  workarounds for objects not yet supported by those tools and various
12
20
  Server API deficiencies. The long-run goal is to improve `knife
13
- download`, `knife upload` and the Chef Server API and deprecate this
21
+ download`, `knife upload` and the Chef Infra Server API and deprecate this
14
22
  tool.
15
23
 
16
- # Requirements
24
+ ## Requirements
17
25
 
18
- This knife plugin requires Chef Client 11.8+.
26
+ This knife plugin requires Chef Infra Client 11.8+.
19
27
 
20
- ## Chef 10
28
+ ### Server Support
21
29
 
22
- Users who are still using Chef 10 can use the most recent 1.x version
23
- of this gem. Version 1.x additionally depends on knife-essentials.
24
-
25
- ## Server Support
26
-
27
- This plugin currently supports Enterprise Chef 11 and Chef Server 12.
30
+ This plugin currently supports Enterprise Chef 11 and Chef Infra Server 12+.
28
31
  Support for the beta key rotation features is provided via the
29
32
  `--with-keys-sql` flag, but users of this feature should note that
30
- this may change once the Chef Server supports an API-based export of
33
+ this may change once the Chef Infra Server supports an API-based export of
31
34
  the key data.
32
35
 
33
- # Installation
36
+ ## Installation
34
37
 
35
- ## Chef Server Install (Recommended)
38
+ ### Chef Infra Server Install (Recommended)
36
39
 
37
40
  This gem is installed with chef-server-core 12.0.0 and newer.
38
41
 
@@ -45,7 +48,7 @@ downloading the .zip file. Once unpacked, run:
45
48
  /opt/opscode/embedded/bin/gem install knife-ec-backup*gem --no-ri --no-rdoc -V
46
49
  ```
47
50
 
48
- ### Note on installing with existing development tools:
51
+ #### Note on installing with existing development tools:
49
52
 
50
53
  The latest versions of knife-ec-backup require gems with native
51
54
  extensions, thus you must install a standard build toolchain. To
@@ -54,6 +57,24 @@ on your system, try the following:
54
57
 
55
58
  /opt/opscode/embedded/bin/gem install knife-ec-backup -- --with-pg-config=/opt/opscode/embedded/postgresql/9.2/bin/pg_config
56
59
 
60
+ This uses the libpq headers that are included in the Chef Infra Server
61
+ package installed in `/opt/opscode`.
62
+
63
+ ### Chef Workstation Install (Unsupported)
64
+
65
+ On systems other than the Chef Infra Server, installation of this gem is not
66
+ tested or supported. However, if you attempt to do so you will need the
67
+ postgresql libraries installed.
68
+
69
+ For example, on macOS:
70
+
71
+ ```
72
+ brew install libpq
73
+ gem install knife-ec-backup -- --with-pg-config=/usr/local/Cellar/libpq/9.2/bin/pg_config
74
+ ```
75
+
76
+ The current location of pg_config can be determined with `brew info libpq`.
77
+
57
78
  ## Running tests
58
79
 
59
80
  ```
@@ -76,25 +97,29 @@ Clone the git repository and run the following from inside:
76
97
  gem build knife-ec-backup.gemspec
77
98
  gem install knife-ec-backup*gem
78
99
 
79
- # Configuration
100
+ ## Configuration
80
101
 
81
- ## Permissions
102
+ ### Permissions
82
103
 
83
104
  Note that most users in an EC installation lack the permissions to pull all of the data from all organizations and other users.
84
- This plugin **REQUIRES THE PIVOTAL KEY AND WEBUI KEY** from the Chef Server.
85
- It is recommended that you run this from a frontend Enterprise Chef Server, you can use --user and --key to pass the pivotal information along.
105
+ This plugin **REQUIRES THE PIVOTAL KEY AND WEBUI KEY** from the Chef Infra Server.
106
+ It is recommended that you run this from a frontend Enterprise Chef Infra Server, you can use --user and --key to pass the pivotal information along.
86
107
 
87
- # Subcommands
108
+ ## Subcommands
88
109
 
89
- ## Common Options
110
+ ### Common Options
90
111
 
91
112
  The following options are supported across all subcommands:
92
113
 
93
114
  * `--sql-host`:
94
- The hostname of the Chef Server's postgresql server. (default: localhost)
115
+ The hostname of the Chef Infra Server's postgresql server. (default: localhost)
95
116
 
96
117
  * `--sql-port`:
97
- The postgresql listening port on the Chef Server. (default: 5432)
118
+ The postgresql listening port on the Chef Infra Server. (default: 5432)
119
+
120
+ * `--sql-db`:
121
+ The postgresql Chef Infra Server database name. (default: opscode_chef)
122
+ Specify 'automate-cs-oc-erchef' when using Automate Chef Infra Server API
98
123
 
99
124
  * `--sql-user`:
100
125
  The username of postgresql user with access to the opscode_chef
@@ -110,7 +135,7 @@ The following options are supported across all subcommands:
110
135
  * `--dry-run`:
111
136
  Report what actions would be taken without performing any. (default: false)
112
137
 
113
- ## knife ec backup DEST_DIR (options)
138
+ ### knife ec backup DEST_DIR (options)
114
139
 
115
140
  *Path*: If you have chef-client installed as well, you may need to invoke this as `/opt/opscode/embedded/bin/knife ec backup backup`
116
141
 
@@ -132,8 +157,8 @@ The following options are supported across all subcommands:
132
157
 
133
158
  * `--with-key-sql`: Whether to backup/restore key data directly
134
159
  from the database. This requires access to the listening
135
- postgresql port on the Chef Server. This is required to correctly
136
- handle keys in Chef Servers with multikey support. This option
160
+ postgresql port on the Chef Infra Server. This is required to correctly
161
+ handle keys in Chef Infra Servers with multikey support. This option
137
162
  will only work on `restore` if it was also used during the
138
163
  `backup`.
139
164
 
@@ -144,7 +169,7 @@ The following options are supported across all subcommands:
144
169
  Chef objects.
145
170
 
146
171
  * `--skip-version-check`:
147
- Skip Chef Server version check. This will also skip any auto-configured options (default: false)
172
+ Skip Chef Infra Server version check. This will also skip any auto-configured options (default: false)
148
173
 
149
174
  * `--only-org ORG`:
150
175
  Only donwload/restore objects in the named organization. Global
@@ -202,7 +227,7 @@ This compares very closely with the "knife download /" from an OSC server:
202
227
  users
203
228
  <name>.json>
204
229
 
205
- ## knife ec restore DEST_DIR (options)
230
+ ### knife ec restore DEST_DIR (options)
206
231
 
207
232
  Restores all data from the specified DEST_DIR to an Enterprise Chef /
208
233
  Private Chef server. DEST_DIR should be a backup directory created by
@@ -227,11 +252,11 @@ Private Chef server. DEST_DIR should be a backup directory created by
227
252
  Server. (default: 10)
228
253
 
229
254
  * `--skip-version-check`:
230
- Skip Chef Server version check. This will
255
+ Skip Chef Infra Server version check. This will
231
256
  also skip any auto-configured options (default: false)
232
257
 
233
258
  * `--[no-]skip-user-ids`:
234
- Reuses user ids from the restore destination when updating existing
259
+ Reuses user ids from the restore destination when updating existing
235
260
  users to avoid database conflicts (default: true)
236
261
 
237
262
  * `--with-user-sql`:
@@ -244,8 +269,8 @@ Private Chef server. DEST_DIR should be a backup directory created by
244
269
 
245
270
  * `--with-key-sql`: Whether to backup/restore key data directly
246
271
  from the database. This requires access to the listening
247
- postgresql port on the Chef Server. This is required to correctly
248
- handle keys in Chef Servers with multikey support. This option
272
+ postgresql port on the Chef Infra Server. This is required to correctly
273
+ handle keys in Chef Infra Servers with multikey support. This option
249
274
  will only work on `restore` if it was also used during the
250
275
  `backup`.
251
276
 
@@ -256,35 +281,35 @@ Private Chef server. DEST_DIR should be a backup directory created by
256
281
  Chef objects.
257
282
 
258
283
  * `--only-org ORG`:
259
- Only donwload/restore objects in the named organization. Global
284
+ Only download/restore objects in the named organization. Global
260
285
  objects such as users will still be downloaded/restored.
261
286
 
262
- ## knife ec key export [FILENAME]
287
+ ### knife ec key export [FILENAME]
263
288
 
264
- Create a json representation of the users table from the Chef Server
289
+ Create a json representation of the users table from the Chef Infra Server
265
290
  database. If no argument is given, the name of the backup is
266
291
  `key_dump.json`.
267
292
 
268
293
  Please note, most users should use `knife ec backup` with the
269
294
  `--with-user-sql` option rather than this command.
270
295
 
271
- ## knife ec key import [FILENAME]
296
+ ### knife ec key import [FILENAME]
272
297
 
273
298
  Import a json representation of the users table from FILENAME to the
274
- the Chef Server database. If no argument is given, the filename is
299
+ the Chef Infra Server database. If no argument is given, the filename is
275
300
  assumed to be `key_dump.json`.
276
301
 
277
302
  Please note, most user should use `knife ec restore` with the
278
303
  `--with-user-sql` option rather than this command.
279
304
 
280
- # Known Bugs
305
+ ## Known Bugs
281
306
 
282
307
  - knife-ec-backup cannot be installed in the embedded gemset of Chef
283
- Server 12. This will be resolved in a future Chef Server release.
308
+ Server 12. This will be resolved in a future Chef Infra Server release.
284
309
 
285
310
  - `knife ec restore` can fail to restore cookbooks, failing with an
286
311
  internal server error. A common cause of this problem is a
287
- concurrency bug in Chef Server. Setting `--concurrency 1` can often
312
+ concurrency bug in Chef Infra Server. Setting `--concurrency 1` can often
288
313
  work around the issue.
289
314
 
290
315
  - `knife ec restore` can fail if the pool of pre-created organizations
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'bundler'
2
- require 'rubygems'
2
+ require 'rubygems' unless defined?(Gem)
3
3
  require 'rubygems/package_task'
4
4
  require 'rdoc/task'
5
5
  require 'rspec/core/rake_task'
@@ -0,0 +1,18 @@
1
+ class Chef
2
+ class Automate
3
+ def self.is_installed?
4
+ File.exists?('/hab/svc/automate-cs-oc-erchef/')
5
+ end
6
+
7
+ def self.config
8
+ {
9
+ sql_user: 'automate-cs-oc-erchef',
10
+ sql_cert: '/hab/svc/automate-cs-oc-erchef/config/service.crt',
11
+ sql_key: '/hab/svc/automate-cs-oc-erchef/config/service.key',
12
+ sql_rootcert: '/hab/svc/automate-cs-oc-erchef/config/root_ca.crt',
13
+ sql_db: 'automate-cs-oc-erchef',
14
+ webui_key: '/hab/svc/automate-cs-oc-erchef/data/webui_priv.pem'
15
+ }
16
+ end
17
+ end
18
+ end
@@ -1,5 +1,5 @@
1
1
  require 'chef/knife'
2
- require 'chef/knife/ec_base'
2
+ require_relative 'ec_base'
3
3
 
4
4
  class Chef
5
5
  class Knife
@@ -14,8 +14,8 @@ class Chef
14
14
  require 'chef/chef_fs/file_system'
15
15
  require 'chef/chef_fs/file_pattern'
16
16
  require 'chef/chef_fs/parallelizer'
17
- require 'chef/server'
18
- require 'fileutils'
17
+ require_relative '../server'
18
+ require 'fileutils' unless defined?(FileUtils)
19
19
  end
20
20
 
21
21
  def run
@@ -96,10 +96,10 @@ class Chef
96
96
  knife_ec_error_handler.add(ex)
97
97
  next
98
98
  end
99
- # Enterprise Chef 11 and below uses a pool of precreated
99
+ # Enterprise Chef 11 and below uses a pool of pre-created
100
100
  # organizations to account for slow organization creation
101
101
  # using CouchDB. Thus, on server versions < 12 we want to
102
- # skip any of these precreated organizations by checking if
102
+ # skip any of these pre-created organizations by checking if
103
103
  # they have been assigned or not. The Chef 12 API does not
104
104
  # return an assigned_at field.
105
105
  if org['assigned_at'] || server.version >= Gem::Version.new("12")
@@ -127,12 +127,13 @@ class Chef
127
127
  end
128
128
 
129
129
  def export_from_sql
130
- require 'chef/knife/ec_key_export'
130
+ require_relative 'ec_key_export'
131
131
  Chef::Knife::EcKeyExport.deps
132
132
  k = Chef::Knife::EcKeyExport.new
133
133
  k.name_args = ["#{dest_dir}/key_dump.json", "#{dest_dir}/key_table_dump.json"]
134
134
  k.config[:sql_host] = config[:sql_host]
135
135
  k.config[:sql_port] = config[:sql_port]
136
+ k.config[:sql_db] = config[:sql_db]
136
137
  k.config[:sql_user] = config[:sql_user]
137
138
  k.config[:sql_password] = config[:sql_password]
138
139
  k.config[:skip_users_table] = !config[:with_user_sql]
@@ -18,9 +18,10 @@
18
18
 
19
19
  require 'chef/knife'
20
20
  require 'chef/server_api'
21
- require 'veil'
22
- require 'chef/knife/ec_error_handler'
23
- require 'ffi_yajl'
21
+ require 'veil' unless defined?(Veil)
22
+ require_relative 'ec_error_handler'
23
+ require 'ffi_yajl' unless defined?(FFI_Yajl)
24
+ require_relative '../automate'
24
25
 
25
26
  class Chef
26
27
  class Knife
@@ -31,13 +32,17 @@ class Chef
31
32
  def self.included(includer)
32
33
  includer.class_eval do
33
34
 
35
+ option :error_log_dir,
36
+ :long => '--error-log-dir PATH',
37
+ :description => 'Path to a directory where any errors will be logged'
38
+
34
39
  option :concurrency,
35
40
  :long => '--concurrency THREADS',
36
41
  :description => 'Maximum number of simultaneous requests to send (default: 10)'
37
42
 
38
43
  option :webui_key,
39
44
  :long => '--webui-key KEYPATH',
40
- :description => 'Path to the WebUI Key (default: Read from secrets store or /etc/opscode/webui_priv.pem)'
45
+ :description => 'Path to the WebUI Key (default: Read from secrets store or /etc/opscode/webui_priv.pem or /hab/svc/automate-cs-oc-erchef/data/webui_priv.pem)'
41
46
 
42
47
  option :secrets_file_path,
43
48
  :long => '--secrets-file PATH',
@@ -70,6 +75,10 @@ class Chef
70
75
  :description => 'Postgresql database port (default: 5432)',
71
76
  :default => 5432
72
77
 
78
+ option :sql_db,
79
+ :long => '--sql-db DBNAME',
80
+ :description => 'Postgresql Chef Server database name (default: opscode_chef or automate-cs-oc-erchef)'
81
+
73
82
  option :sql_user,
74
83
  :long => "--sql-user USERNAME",
75
84
  :description => 'User used to connect to the postgresql database.'
@@ -78,6 +87,18 @@ class Chef
78
87
  :long => "--sql-password PASSWORD",
79
88
  :description => 'Password used to connect to the postgresql database'
80
89
 
90
+ option :sql_cert,
91
+ :long => "--sql-cert ",
92
+ :description => 'Path to client ssl cert'
93
+
94
+ option :sql_key,
95
+ :long => "--sql-key PATH",
96
+ :description => 'Path to client ssl key'
97
+
98
+ option :sql_rootcert,
99
+ :long => "--sql-rootcert ",
100
+ :description => 'Path to root ssl cert'
101
+
81
102
  option :with_user_sql,
82
103
  :long => '--with-user-sql',
83
104
  :description => 'Try direct data base access for user export/import. Required to properly handle passwords, keys, and USAGs'
@@ -155,7 +176,8 @@ class Chef
155
176
  end
156
177
 
157
178
  def knife_ec_error_handler
158
- @knife_ec_error_handler ||= Chef::Knife::EcErrorHandler.new(dest_dir, self.class)
179
+ error_dir = config[:error_log_dir] || dest_dir
180
+ @knife_ec_error_handler ||= Chef::Knife::EcErrorHandler.new(error_dir, self.class)
159
181
  end
160
182
 
161
183
  def user_acl_rest
@@ -190,6 +212,8 @@ class Chef
190
212
  def webui_key
191
213
  if config[:webui_key]
192
214
  config[:webui_key]
215
+ elsif Chef::Automate.is_installed?
216
+ config[:webui_key] = Chef::Automate.config[:webui_key]
193
217
  elsif veil.exist?("chef-server", "webui_key")
194
218
  temporary_webui_key
195
219
  else
@@ -17,6 +17,7 @@
17
17
  #
18
18
 
19
19
  require 'chef/knife'
20
+ require 'veil'
20
21
 
21
22
  class Chef
22
23
  class Knife
@@ -27,7 +28,8 @@ class Chef
27
28
 
28
29
  deps do
29
30
  require 'sequel'
30
- require 'json'
31
+ require 'json' unless defined?(JSON)
32
+ require_relative '../automate'
31
33
  end
32
34
 
33
35
  option :sql_host,
@@ -40,6 +42,10 @@ class Chef
40
42
  :description => 'Postgresql database port (default: 5432)',
41
43
  :default => 5432
42
44
 
45
+ option :sql_db,
46
+ :long => '--sql-db DBNAME',
47
+ :description => 'Postgresql Chef Server database name (default: opscode_chef or automate-cs-oc-erchef)'
48
+
43
49
  option :sql_user,
44
50
  :long => "--sql-user USERNAME",
45
51
  :description => 'User used to connect to the postgresql database.'
@@ -48,6 +54,18 @@ class Chef
48
54
  :long => "--sql-password PASSWORD",
49
55
  :description => 'Password used to connect to the postgresql database'
50
56
 
57
+ option :sql_cert,
58
+ :long => "--sql-cert ",
59
+ :description => 'Path to client ssl cert'
60
+
61
+ option :sql_key,
62
+ :long => "--sql-key PATH",
63
+ :description => 'Path to client ssl key'
64
+
65
+ option :sql_rootcert,
66
+ :long => "--sql-rootcert ",
67
+ :description => 'Path to root ssl cert'
68
+
51
69
  option :secrets_file_path,
52
70
  :long => '--secrets-file PATH',
53
71
  :description => 'Path to a valid private-chef-secrets.json file (default: /etc/opscode/private-chef-secrets.json)',
@@ -68,27 +86,44 @@ class Chef
68
86
  def db
69
87
  @db ||= begin
70
88
  require 'sequel'
71
- server_string = "#{config[:sql_user]}:#{config[:sql_password]}@#{config[:sql_host]}:#{config[:sql_port]}/opscode_chef"
72
- ::Sequel.connect("postgres://#{server_string}", :convert_infinite_timestamps => :string)
89
+ require 'uri'
90
+ server_uri = URI('postgres://')
91
+ server_uri.host = config[:sql_host]
92
+ server_uri.port = config[:sql_port]
93
+ server_uri.user = URI.encode_www_form_component(config[:sql_user]) if config[:sql_user]
94
+ server_uri.password = URI.encode_www_form_component(config[:sql_password]) if config[:sql_password]
95
+ query_params = []
96
+ query_params.push("sslcert=#{config[:sql_cert]}") if config[:sql_cert]
97
+ query_params.push("sslkey=#{config[:sql_key]}") if config[:sql_key]
98
+ query_params.push("sslrootcert=#{config[:sql_rootcert]}") if config[:sql_rootcert]
99
+ server_uri.query = query_params.join("&") if query_params.length > 0
100
+
101
+ ::Sequel.connect(server_uri.to_s, :convert_infinite_timestamps => :string)
73
102
  end
74
103
  end
75
104
 
76
105
  # Loads SQL user and password from running config if not passed
77
106
  # as a command line option
78
107
  def load_config_from_file!
79
- if ! File.exists?("/etc/opscode/chef-server-running.json")
80
- ui.fatal "SQL User or Password not provided as option and running config cannot be found!"
81
- exit 1
108
+ if Chef::Automate.is_installed?
109
+ ui.msg "Automate detected"
110
+ config.merge! Chef::Automate.config {|key, v1, v2| v1}
82
111
  else
83
- running_config ||= JSON.parse(File.read("/etc/opscode/chef-server-running.json"))
84
- # Latest versions of chef server put the database info under opscode-erchef.sql_user
85
- hash_key = if running_config['private_chef']['opscode-erchef'].has_key? 'sql_user'
86
- 'opscode-erchef'
87
- else
88
- 'postgresql'
89
- end
90
- config[:sql_user] ||= running_config['private_chef'][hash_key]['sql_user']
91
- config[:sql_password] ||= sql_password
112
+ if ! File.exists?("/etc/opscode/chef-server-running.json")
113
+ ui.fatal "SQL User or Password not provided as option and running config cannot be found!"
114
+ exit 1
115
+ else
116
+ running_config ||= JSON.parse(File.read("/etc/opscode/chef-server-running.json"))
117
+ # Latest versions of chef server put the database info under opscode-erchef.sql_user
118
+ hash_key = if running_config['private_chef']['opscode-erchef'].has_key? 'sql_user'
119
+ 'opscode-erchef'
120
+ else
121
+ 'postgresql'
122
+ end
123
+ config[:sql_user] ||= running_config['private_chef'][hash_key]['sql_user']
124
+ config[:sql_password] ||= (running_config['private_chef'][hash_key]['sql_password'] || sql_password)
125
+ config[:sql_db] ||= 'opscode_chef'
126
+ end
92
127
  end
93
128
  end
94
129