Skip to content

Commit a5a42b7

Browse files
committed
MB-67688 += --path-style-addressing, cluster-init prereq check
- Add --path-style-addressing to setting-enterprise-analytics - Ensure setting-enterprise-analytics has been performed prior to cluster-init on Enterprise Analytics cluster, otherwise provide helpful error message Change-Id: Id2b99cec72c8042e09e6f68ef1124e3adfa33936 Reviewed-on: https://review.couchbase.org/c/couchbase-cli/+/230974 Reviewed-by: Michael Blow <michael.blow@couchbase.com> Tested-by: Build Bot <build@couchbase.com> Reviewed-by: Matt Hall <matt.hall@couchbase.com>
1 parent 0597caf commit a5a42b7

4 files changed

Lines changed: 46 additions & 23 deletions

File tree

cbmgr.py

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,32 +1110,39 @@ def execute(self, opts):
11101110
services, errors = process_services(opts.services, self.enterprise, self.enterprise_analytics)
11111111
_exit_if_errors(errors)
11121112

1113-
if not self.enterprise_analytics and 'kv' not in services.split(','):
1114-
_exit_if_errors(["Cannot set up first cluster node without the data service"])
1115-
11161113
if 'ipv4' in opts.ip_family:
11171114
ip_family = 'ipv4'
11181115
elif 'ipv6' in opts.ip_family:
11191116
ip_family = 'ipv6'
11201117
ip_only = True if 'only' in opts.ip_family else False
11211118

1122-
if not self.enterprise_analytics and not opts.index_storage_mode and 'index' in services.split(','):
1123-
opts.index_storage_mode = "default"
1119+
indexer_storage = None
1120+
if not self.enterprise_analytics:
1121+
if 'kv' not in services.split(','):
1122+
_exit_if_errors(["Cannot set up first cluster node without the data service"])
11241123

1125-
default = "plasma"
1126-
if not self.enterprise:
1127-
default = "forestdb"
1124+
if not opts.index_storage_mode and 'index' in services.split(','):
1125+
opts.index_storage_mode = "default"
11281126

1129-
indexer_storage = None
1130-
if opts.index_storage_mode:
1131-
indexer_storage = index_storage_mode_to_param(opts.index_storage_mode, default)
1127+
default = "plasma"
1128+
if not self.enterprise:
1129+
default = "forestdb"
11321130

1133-
min_version, errors = self.rest.node_version()
1134-
_exit_if_errors(errors)
1131+
if opts.index_storage_mode:
1132+
indexer_storage = index_storage_mode_to_param(opts.index_storage_mode, default)
11351133

1136-
versionCheck = compare_versions(min_version, "7.2.3")
1137-
if not self.enterprise_analytics and versionCheck == -1:
1138-
_exit_if_errors(["--cluster-init can only be used against >= 7.2.3 clusters"])
1134+
min_version, errors = self.rest.node_version()
1135+
_exit_if_errors(errors)
1136+
1137+
versionCheck = compare_versions(min_version, "7.2.3")
1138+
if versionCheck == -1:
1139+
_exit_if_errors(["--cluster-init can only be used against >= 7.2.3 clusters"])
1140+
else:
1141+
settings, err = self.rest.get_analytics_settings()
1142+
_exit_if_errors(err)
1143+
if not settings.get('blobStorageScheme'):
1144+
_exit_if_errors(
1145+
["Cannot initialize cluster before running the 'setting-enterprise-analytics' command"])
11391146

11401147
if not self.enterprise and opts.notifications == "0":
11411148
_exit_if_errors(["--update-notifications can only be configured on Enterprise Edition"])
@@ -3497,21 +3504,27 @@ def __init__(self):
34973504
help="The BLOB storage endpoint")
34983505
group.add_argument("--anonymous-auth", dest="blob_storage_anonymous_auth", metavar="<0|1>",
34993506
choices=["0", "1"], help="Allow BLOB storage anonymous auth")
3507+
group.add_argument("--path-style-addressing", dest="blob_storage_path_style_addressing", metavar="<0|1>",
3508+
choices=["0", "1"], help="Use BLOB storage path style addressing")
35003509

3501-
# We disable the cluster init check so people can use '--set' before the cluster is initiaslised. See MB-66986.
3510+
# We disable the cluster init check so people can use '--set' before the cluster is initialised. See MB-66986.
35023511
@rest_initialiser(cluster_init_check=False, version_check=True)
35033512
def execute(self, opts):
35043513
if opts.set:
35053514
if not (opts.num_storage_partitions or opts.blob_storage_scheme or opts.blob_storage_bucket
35063515
or opts.blob_storage_prefix or opts.blob_storage_region or opts.blob_storage_endpoint
3507-
or opts.blob_storage_anonymous_auth):
3516+
or opts.blob_storage_anonymous_auth or opts.blob_storage_path_style_addressing):
35083517
_exit_if_errors(["At least one option (--partitions, --scheme, --bucket, --prefix, --region," +
3509-
" --endpoint, --anonymous-auth) must be specified."])
3518+
" --endpoint, --anonymous-auth, --path-style-addressing) must be specified."])
35103519

35113520
if opts.blob_storage_anonymous_auth == "0":
35123521
opts.blob_storage_anonymous_auth = "false"
35133522
if opts.blob_storage_anonymous_auth == "1":
35143523
opts.blob_storage_anonymous_auth = "true"
3524+
if opts.blob_storage_path_style_addressing == "0":
3525+
opts.blob_storage_path_style_addressing = "false"
3526+
if opts.blob_storage_path_style_addressing == "1":
3527+
opts.blob_storage_path_style_addressing = "true"
35153528

35163529
_, errors = self.rest.set_enterprise_analytics_settings(opts)
35173530
_exit_if_errors(errors)

cluster_manager.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2944,6 +2944,8 @@ def set_enterprise_analytics_settings(self, opts):
29442944
params["blobStorageEndpoint"] = opts.blob_storage_endpoint
29452945
if opts.blob_storage_anonymous_auth:
29462946
params["blobStorageAnonymousAuth"] = opts.blob_storage_anonymous_auth
2947+
if opts.blob_storage_path_style_addressing:
2948+
params["blobStoragePathStyleAddressing"] = opts.blob_storage_path_style_addressing
29472949

29482950
return self._post_form_encoded(url, params)
29492951

docs/modules/cli/pages/cbcli/couchbase-cli-setting-enterprise-analytics.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ include::{partialsdir}/cbcli/part-common-options.adoc[]
4949
--anonymous-auth <0|1>::
5050
Allow BLOB storage anonymous auth
5151

52+
--path-style-addressing <0|1>::
53+
Use BLOB storage path style addressing
54+
5255
include::{partialsdir}/cbcli/part-host-formats.adoc[]
5356

5457
include::{partialsdir}/cbcli/part-certificate-authentication.adoc[]

test/test_cli.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5357,25 +5357,30 @@ def test_anonymous_auth(self):
53575357
self.assertIn('POST:/settings/analytics', self.server.trace)
53585358
self.rest_parameter_match(['blobStorageAnonymousAuth=true'])
53595359

5360+
def test_path_style_addressing(self):
5361+
self.no_error_run(self.command + ['--set', '--path-style-addressing', '1'], self.server_args)
5362+
self.assertIn('POST:/settings/analytics', self.server.trace)
5363+
self.rest_parameter_match(['blobStoragePathStyleAddressing=true'])
5364+
53605365
def test_all_flags(self):
53615366
self.no_error_run(self.command + ['--set', '--partitions', '7', '--scheme', 's3', '--bucket', 'aaa',
53625367
'--prefix', 'aaa', '--region', 'aaa', '--endpoint', 'aaa',
5363-
'--anonymous-auth', '1',], self.server_args)
5368+
'--anonymous-auth', '1', '--path-style-addressing', '1',], self.server_args)
53645369
self.assertIn('POST:/settings/analytics', self.server.trace)
53655370
self.rest_parameter_match(['numStoragePartitions=7', 'blobStorageScheme=s3', 'blobStorageBucket=aaa',
53665371
'blobStoragePrefix=aaa', 'blobStorageRegion=aaa', 'blobStorageEndpoint=aaa',
5367-
'blobStorageAnonymousAuth=true'])
5372+
'blobStorageAnonymousAuth=true', 'blobStoragePathStyleAddressing=true'])
53685373

53695374
def test_all_flags_uninitialised(self):
53705375
server_args = self.server_args
53715376
server_args['init'] = False
53725377
self.no_error_run(self.command + ['--set', '--partitions', '7', '--scheme', 's3', '--bucket', 'aaa',
53735378
'--prefix', 'aaa', '--region', 'aaa', '--endpoint', 'aaa',
5374-
'--anonymous-auth', '1',], server_args)
5379+
'--anonymous-auth', '1', '--path-style-addressing', '1',], server_args)
53755380
self.assertIn('POST:/settings/analytics', self.server.trace)
53765381
self.rest_parameter_match(['numStoragePartitions=7', 'blobStorageScheme=s3', 'blobStorageBucket=aaa',
53775382
'blobStoragePrefix=aaa', 'blobStorageRegion=aaa', 'blobStorageEndpoint=aaa',
5378-
'blobStorageAnonymousAuth=true'])
5383+
'blobStorageAnonymousAuth=true', 'blobStoragePathStyleAddressing=true'])
53795384

53805385

53815386
if __name__ == '__main__':

0 commit comments

Comments
 (0)