knife-ec-backup 2.4.12 → 2.4.15

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
  SHA256:
3
- metadata.gz: 312e0c84f3b2b40b6a2824917e31da481007f65f1b82282a18ec441e398220bd
4
- data.tar.gz: e2f1962db8526925402afcf73c145f04ffda47263fa8bade5064c2d50f494c3e
3
+ metadata.gz: ddb6a9c53f5ef60525564d583b9906c746c3af34b8fe25fe92d8e0f362d1f039
4
+ data.tar.gz: '04987273e967c37af6b3738bac962349f07edc5a4db1a0ec13c0004093adc8af'
5
5
  SHA512:
6
- metadata.gz: 16f96728387157fad3ef2fe38c18c9597c8c2fc2b6cb295262a7c161fc52d2fddaa40b38e38ad3e4c39af22fbec8dbf4c3bce74b8b0c97da7b22994e3cc2e7c9
7
- data.tar.gz: e8bb31bc8fde89b682b2ab3dd8c89c7bc9b885af3f9e21d30e1e3e3875f8beea9ccb228fb3e6c8909300cf79c6bfe24e799b83af85b83b3d0ec348f59959466b
6
+ metadata.gz: ab40c44efddf1418bf52ed6d329b4e8d4419c927dbdcbfc758440d53b178183747c333c9019bbaec16b59750ec0432e9bf7397bcd651e978445abfe2f4515b4d
7
+ data.tar.gz: b5a4137aca897ffcf811e1c96fc87b3ffeb435337ac1aaf1a2301ed9ea0683983da8c1991daa9ce5413d6551453de98e2c99c6f8cb1156420f78a5104d9919e6
data/README.md CHANGED
@@ -18,24 +18,24 @@ text format. It is similar to the `knife download` and `knife upload`
18
18
  commands and uses the same underlying libraries, but also includes
19
19
  workarounds for objects not yet supported by those tools and various
20
20
  Server API deficiencies. The long-run goal is to improve `knife
21
- download`, `knife upload` and the Chef Server API and deprecate this
21
+ download`, `knife upload` and the Chef Infra Server API and deprecate this
22
22
  tool.
23
23
 
24
24
  ## Requirements
25
25
 
26
- This knife plugin requires Chef Client 11.8+.
26
+ This knife plugin requires Chef Infra Client 11.8+.
27
27
 
28
28
  ### Server Support
29
29
 
30
- This plugin currently supports Enterprise Chef 11 and Chef Server 12+.
30
+ This plugin currently supports Enterprise Chef 11 and Chef Infra Server 12+.
31
31
  Support for the beta key rotation features is provided via the
32
32
  `--with-keys-sql` flag, but users of this feature should note that
33
- 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
34
34
  the key data.
35
35
 
36
36
  ## Installation
37
37
 
38
- ### Chef Server Install (Recommended)
38
+ ### Chef Infra Server Install (Recommended)
39
39
 
40
40
  This gem is installed with chef-server-core 12.0.0 and newer.
41
41
 
@@ -57,6 +57,24 @@ on your system, try the following:
57
57
 
58
58
  /opt/opscode/embedded/bin/gem install knife-ec-backup -- --with-pg-config=/opt/opscode/embedded/postgresql/9.2/bin/pg_config
59
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
+
60
78
  ## Running tests
61
79
 
62
80
  ```
@@ -84,8 +102,8 @@ Clone the git repository and run the following from inside:
84
102
  ### Permissions
85
103
 
86
104
  Note that most users in an EC installation lack the permissions to pull all of the data from all organizations and other users.
87
- This plugin **REQUIRES THE PIVOTAL KEY AND WEBUI KEY** from the Chef Server.
88
- 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.
89
107
 
90
108
  ## Subcommands
91
109
 
@@ -94,14 +112,14 @@ It is recommended that you run this from a frontend Enterprise Chef Server, you
94
112
  The following options are supported across all subcommands:
95
113
 
96
114
  * `--sql-host`:
97
- The hostname of the Chef Server's postgresql server. (default: localhost)
115
+ The hostname of the Chef Infra Server's postgresql server. (default: localhost)
98
116
 
99
117
  * `--sql-port`:
100
- The postgresql listening port on the Chef Server. (default: 5432)
118
+ The postgresql listening port on the Chef Infra Server. (default: 5432)
101
119
 
102
120
  * `--sql-db`:
103
- The postgresql Chef Server database name. (default: opscode_chef)
104
- Specify 'automate-cs-oc-erchef' when using Automate Chef Server API
121
+ The postgresql Chef Infra Server database name. (default: opscode_chef)
122
+ Specify 'automate-cs-oc-erchef' when using Automate Chef Infra Server API
105
123
 
106
124
  * `--sql-user`:
107
125
  The username of postgresql user with access to the opscode_chef
@@ -139,8 +157,8 @@ The following options are supported across all subcommands:
139
157
 
140
158
  * `--with-key-sql`: Whether to backup/restore key data directly
141
159
  from the database. This requires access to the listening
142
- postgresql port on the Chef Server. This is required to correctly
143
- 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
144
162
  will only work on `restore` if it was also used during the
145
163
  `backup`.
146
164
 
@@ -151,7 +169,7 @@ The following options are supported across all subcommands:
151
169
  Chef objects.
152
170
 
153
171
  * `--skip-version-check`:
154
- 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)
155
173
 
156
174
  * `--only-org ORG`:
157
175
  Only donwload/restore objects in the named organization. Global
@@ -234,7 +252,7 @@ Private Chef server. DEST_DIR should be a backup directory created by
234
252
  Server. (default: 10)
235
253
 
236
254
  * `--skip-version-check`:
237
- Skip Chef Server version check. This will
255
+ Skip Chef Infra Server version check. This will
238
256
  also skip any auto-configured options (default: false)
239
257
 
240
258
  * `--[no-]skip-user-ids`:
@@ -251,8 +269,8 @@ Private Chef server. DEST_DIR should be a backup directory created by
251
269
 
252
270
  * `--with-key-sql`: Whether to backup/restore key data directly
253
271
  from the database. This requires access to the listening
254
- postgresql port on the Chef Server. This is required to correctly
255
- 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
256
274
  will only work on `restore` if it was also used during the
257
275
  `backup`.
258
276
 
@@ -268,7 +286,7 @@ Private Chef server. DEST_DIR should be a backup directory created by
268
286
 
269
287
  ### knife ec key export [FILENAME]
270
288
 
271
- 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
272
290
  database. If no argument is given, the name of the backup is
273
291
  `key_dump.json`.
274
292
 
@@ -278,7 +296,7 @@ Please note, most users should use `knife ec backup` with the
278
296
  ### knife ec key import [FILENAME]
279
297
 
280
298
  Import a json representation of the users table from FILENAME to the
281
- 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
282
300
  assumed to be `key_dump.json`.
283
301
 
284
302
  Please note, most user should use `knife ec restore` with the
@@ -287,11 +305,11 @@ Please note, most user should use `knife ec restore` with the
287
305
  ## Known Bugs
288
306
 
289
307
  - knife-ec-backup cannot be installed in the embedded gemset of Chef
290
- 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.
291
309
 
292
310
  - `knife ec restore` can fail to restore cookbooks, failing with an
293
311
  internal server error. A common cause of this problem is a
294
- concurrency bug in Chef Server. Setting `--concurrency 1` can often
312
+ concurrency bug in Chef Infra Server. Setting `--concurrency 1` can often
295
313
  work around the issue.
296
314
 
297
315
  - `knife ec restore` can fail if the pool of pre-created organizations
@@ -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
@@ -18,9 +18,10 @@
18
18
 
19
19
  require 'chef/knife'
20
20
  require 'chef/server_api'
21
- require 'veil'
21
+ require 'veil' unless defined?(Veil)
22
22
  require_relative 'ec_error_handler'
23
23
  require 'ffi_yajl' unless defined?(FFI_Yajl)
24
+ require_relative '../automate'
24
25
 
25
26
  class Chef
26
27
  class Knife
@@ -41,7 +42,7 @@ class Chef
41
42
 
42
43
  option :webui_key,
43
44
  :long => '--webui-key KEYPATH',
44
- :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)'
45
46
 
46
47
  option :secrets_file_path,
47
48
  :long => '--secrets-file PATH',
@@ -76,8 +77,7 @@ class Chef
76
77
 
77
78
  option :sql_db,
78
79
  :long => '--sql-db DBNAME',
79
- :description => 'Postgresql Chef Server database name (default: opscode_chef)',
80
- :default => "opscode_chef"
80
+ :description => 'Postgresql Chef Server database name (default: opscode_chef or automate-cs-oc-erchef)'
81
81
 
82
82
  option :sql_user,
83
83
  :long => "--sql-user USERNAME",
@@ -87,6 +87,18 @@ class Chef
87
87
  :long => "--sql-password PASSWORD",
88
88
  :description => 'Password used to connect to the postgresql database'
89
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
+
90
102
  option :with_user_sql,
91
103
  :long => '--with-user-sql',
92
104
  :description => 'Try direct data base access for user export/import. Required to properly handle passwords, keys, and USAGs'
@@ -200,6 +212,8 @@ class Chef
200
212
  def webui_key
201
213
  if config[:webui_key]
202
214
  config[:webui_key]
215
+ elsif Chef::Automate.is_installed?
216
+ config[:webui_key] = Chef::Automate.config[:webui_key]
203
217
  elsif veil.exist?("chef-server", "webui_key")
204
218
  temporary_webui_key
205
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
@@ -28,6 +29,7 @@ class Chef
28
29
  deps do
29
30
  require 'sequel'
30
31
  require 'json' unless defined?(JSON)
32
+ require_relative '../automate'
31
33
  end
32
34
 
33
35
  option :sql_host,
@@ -42,8 +44,7 @@ class Chef
42
44
 
43
45
  option :sql_db,
44
46
  :long => '--sql-db DBNAME',
45
- :description => 'Postgresql Chef Server database name (default: opscode_chef)',
46
- :default => "opscode_chef"
47
+ :description => 'Postgresql Chef Server database name (default: opscode_chef or automate-cs-oc-erchef)'
47
48
 
48
49
  option :sql_user,
49
50
  :long => "--sql-user USERNAME",
@@ -53,6 +54,18 @@ class Chef
53
54
  :long => "--sql-password PASSWORD",
54
55
  :description => 'Password used to connect to the postgresql database'
55
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
+
56
69
  option :secrets_file_path,
57
70
  :long => '--secrets-file PATH',
58
71
  :description => 'Path to a valid private-chef-secrets.json file (default: /etc/opscode/private-chef-secrets.json)',
@@ -73,27 +86,44 @@ class Chef
73
86
  def db
74
87
  @db ||= begin
75
88
  require 'sequel'
76
- server_string = "#{config[:sql_user]}:#{config[:sql_password]}@#{config[:sql_host]}:#{config[:sql_port]}/#{config[:sql_db]}"
77
- ::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)
78
102
  end
79
103
  end
80
104
 
81
105
  # Loads SQL user and password from running config if not passed
82
106
  # as a command line option
83
107
  def load_config_from_file!
84
- if ! File.exists?("/etc/opscode/chef-server-running.json")
85
- ui.fatal "SQL User or Password not provided as option and running config cannot be found!"
86
- exit 1
108
+ if Chef::Automate.is_installed?
109
+ ui.msg "Automate detected"
110
+ config.merge! Chef::Automate.config {|key, v1, v2| v1}
87
111
  else
88
- running_config ||= JSON.parse(File.read("/etc/opscode/chef-server-running.json"))
89
- # Latest versions of chef server put the database info under opscode-erchef.sql_user
90
- hash_key = if running_config['private_chef']['opscode-erchef'].has_key? 'sql_user'
91
- 'opscode-erchef'
92
- else
93
- 'postgresql'
94
- end
95
- config[:sql_user] ||= running_config['private_chef'][hash_key]['sql_user']
96
- 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
97
127
  end
98
128
  end
99
129
 
@@ -1,4 +1,4 @@
1
1
  # when you change this to double quotes, also update .expeditor/update_version.sh
2
2
  module KnifeECBackup
3
- VERSION = '2.4.12'
3
+ VERSION = '2.4.15'
4
4
  end
@@ -38,6 +38,8 @@ describe Chef::Knife::EcBackup do
38
38
  allow(@knife).to receive(:rest).and_return(@rest)
39
39
  allow(@knife).to receive(:user_acl_rest).and_return(@rest)
40
40
  allow_any_instance_of(Chef::Knife::EcBase).to receive(:dest_dir).and_return(dest_dir)
41
+ allow(@knife.ui).to receive(:msg)
42
+ allow(@knife.ui).to receive(:error)
41
43
  end
42
44
 
43
45
  describe "#for_each_user" do
@@ -1,5 +1,6 @@
1
1
  require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
2
2
  require 'chef/knife/ec_key_base'
3
+ require 'chef/automate'
3
4
 
4
5
  class KeyBaseTester < Chef::Knife
5
6
  include Chef::Knife::EcKeyBase
@@ -9,15 +10,16 @@ describe Chef::Knife::EcKeyBase do
9
10
  let (:knife) { KeyBaseTester.new }
10
11
 
11
12
  let(:running_server_postgresql_sql_config_json) {
12
- '{"private_chef": { "opscode-erchef":{}, "postgresql": { "sql_user": "jiminy", "sql_password": "secret"} }, "postgresql": { "sql_user": "jiminy", "sql_password": "secret"} }'
13
+ '{"private_chef": { "opscode-erchef":{}, "postgresql": { "sql_user": "jiminy", "sql_password": "secret"} } }'
13
14
  }
14
15
 
15
16
 
16
17
  let(:running_server_erchef_config_json) {
17
- '{"private_chef": { "opscode-erchef": { "sql_user": "cricket", "sql_password": "secrete"}}, "opscode_erchef": { "sql_user": "cricket", "sql_password": "secrete"}}'
18
+ '{"private_chef": { "opscode-erchef": { "sql_user": "cricket", "sql_password": "secrete"} } }'
18
19
  }
19
20
  describe "#load_config_from_file!" do
20
21
  before(:each) do
22
+ allow(Chef::Automate).to receive(:is_installed?).and_return(false)
21
23
  allow(File).to receive(:exists?).and_return(true)
22
24
  allow(File).to receive(:size).and_return(1)
23
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-ec-backup
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.12
4
+ version: 2.4.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Keiser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-21 00:00:00.000000000 Z
11
+ date: 2021-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -91,6 +91,7 @@ files:
91
91
  - LICENSE
92
92
  - README.md
93
93
  - Rakefile
94
+ - lib/chef/automate.rb
94
95
  - lib/chef/knife/ec_backup.rb
95
96
  - lib/chef/knife/ec_base.rb
96
97
  - lib/chef/knife/ec_error_handler.rb
@@ -114,7 +115,7 @@ files:
114
115
  - spec/spec_helper.rb
115
116
  homepage: https://www.chef.io
116
117
  licenses:
117
- - Apache 2.0
118
+ - Apache-2.0
118
119
  metadata: {}
119
120
  post_install_message:
120
121
  rdoc_options: []
@@ -131,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
132
  - !ruby/object:Gem::Version
132
133
  version: '0'
133
134
  requirements: []
134
- rubygems_version: 3.0.3
135
+ rubygems_version: 3.1.4
135
136
  signing_key:
136
137
  specification_version: 4
137
138
  summary: Backup and Restore of Enterprise Chef