Support to create public instance
Add two params for creating instance: '--is-public' and '--allowed-cidr' Change-Id: I3bc69e3d56d250b562543f0de2c78c05fcaefead Story: 2006500 Task: 36469
This commit is contained in:
@@ -268,17 +268,9 @@ class CreateDatabaseInstance(command.ShowOne):
|
|||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--nic',
|
'--nic',
|
||||||
metavar='<net-id=<net-uuid>,v4-fixed-ip=<ip-addr>,'
|
metavar='<net-id=<net-uuid>>',
|
||||||
'port-id=<port-uuid>>',
|
|
||||||
action='append',
|
|
||||||
dest='nics',
|
dest='nics',
|
||||||
default=[],
|
help=_("Create instance in the given Neutron network."),
|
||||||
help=_("Create a NIC on the instance. Specify option multiple "
|
|
||||||
"times to create multiple NICs. net-id: attach NIC to "
|
|
||||||
"network with this ID (either port-id or net-id must be "
|
|
||||||
"specified), v4-fixed-ip: IPv4 fixed address for NIC "
|
|
||||||
"(optional), port-id: attach NIC to port with this ID "
|
|
||||||
"(either port-id or net-id must be specified)."),
|
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--configuration',
|
'--configuration',
|
||||||
@@ -325,6 +317,18 @@ class CreateDatabaseInstance(command.ShowOne):
|
|||||||
default=None,
|
default=None,
|
||||||
help=argparse.SUPPRESS,
|
help=argparse.SUPPRESS,
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--is-public',
|
||||||
|
action='store_true',
|
||||||
|
help="Whether or not to make the instance public.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--allowed-cidr',
|
||||||
|
action='append',
|
||||||
|
dest='allowed_cidrs',
|
||||||
|
help="The IP CIDRs that are allowed to access the database "
|
||||||
|
"instance.",
|
||||||
|
)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
@@ -361,41 +365,48 @@ class CreateDatabaseInstance(command.ShowOne):
|
|||||||
users = [{'name': n, 'password': p, 'databases': databases} for (n, p)
|
users = [{'name': n, 'password': p, 'databases': databases} for (n, p)
|
||||||
in
|
in
|
||||||
[z.split(':')[:2] for z in parsed_args.users]]
|
[z.split(':')[:2] for z in parsed_args.users]]
|
||||||
|
|
||||||
nics = []
|
nics = []
|
||||||
for nic_str in parsed_args.nics:
|
if parsed_args.nics:
|
||||||
nic_info = dict([(k, v) for (k, v) in [z.split("=", 1)[:2] for z in
|
nic_info = dict(
|
||||||
nic_str.split(",")]])
|
[(k, v) for (k, v) in [parsed_args.nics.split("=", 1)[:2]]]
|
||||||
# need one or the other, not both, not none (!= ~ XOR)
|
)
|
||||||
if not (bool(nic_info.get('net-id')) != bool(
|
if not nic_info.get('net-id'):
|
||||||
nic_info.get('port-id'))):
|
raise exceptions.ValidationError(
|
||||||
raise exceptions.\
|
"net-id is not set in %s" % parsed_args.nics
|
||||||
ValidationError(_("Invalid NIC argument: %s. Must specify "
|
)
|
||||||
"either net-id or port-id but not both. "
|
|
||||||
"Please refer to help.")
|
|
||||||
% (_("nic='%s'") % nic_str))
|
|
||||||
nics.append(nic_info)
|
nics.append(nic_info)
|
||||||
|
|
||||||
modules = []
|
modules = []
|
||||||
for module in parsed_args.modules:
|
for module in parsed_args.modules:
|
||||||
modules.append(osc_utils.find_resource(database.modules,
|
modules.append(osc_utils.find_resource(database.modules,
|
||||||
module).id)
|
module).id)
|
||||||
instance = db_instances.create(parsed_args.name,
|
|
||||||
flavor_id,
|
access = {'is_public': False}
|
||||||
volume=volume,
|
if parsed_args.is_public:
|
||||||
databases=databases,
|
access['is_public'] = True
|
||||||
users=users,
|
if parsed_args.allowed_cidrs:
|
||||||
restorePoint=restore_point,
|
access['allowed_cidrs'] = parsed_args.allowed_cidrs
|
||||||
availability_zone=(parsed_args.
|
|
||||||
availability_zone),
|
instance = db_instances.create(
|
||||||
datastore=parsed_args.datastore,
|
parsed_args.name,
|
||||||
datastore_version=(parsed_args.
|
flavor_id,
|
||||||
datastore_version),
|
volume=volume,
|
||||||
nics=nics,
|
databases=databases,
|
||||||
configuration=parsed_args.configuration,
|
users=users,
|
||||||
replica_of=replica_of,
|
restorePoint=restore_point,
|
||||||
replica_count=replica_count,
|
availability_zone=(parsed_args.availability_zone),
|
||||||
modules=modules,
|
datastore=parsed_args.datastore,
|
||||||
locality=locality,
|
datastore_version=(parsed_args.datastore_version),
|
||||||
region_name=parsed_args.region)
|
nics=nics,
|
||||||
|
configuration=parsed_args.configuration,
|
||||||
|
replica_of=replica_of,
|
||||||
|
replica_count=replica_count,
|
||||||
|
modules=modules,
|
||||||
|
locality=locality,
|
||||||
|
region_name=parsed_args.region,
|
||||||
|
access=access
|
||||||
|
)
|
||||||
instance = set_attributes_for_print_detail(instance)
|
instance = set_attributes_for_print_detail(instance)
|
||||||
return zip(*sorted(six.iteritems(instance)))
|
return zip(*sorted(six.iteritems(instance)))
|
||||||
|
|
||||||
|
@@ -196,7 +196,10 @@ class TestDatabaseInstanceCreate(TestInstances):
|
|||||||
'--nic', 'net-id=net1',
|
'--nic', 'net-id=net1',
|
||||||
'--replica_of', 'test',
|
'--replica_of', 'test',
|
||||||
'--replica_count', '4',
|
'--replica_count', '4',
|
||||||
'--module', 'mod_id']
|
'--module', 'mod_id',
|
||||||
|
'--is-public',
|
||||||
|
'--allowed-cidr', '10.0.0.1/24',
|
||||||
|
'--allowed-cidr', '192.168.0.1/24']
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('name', 'test-name'),
|
('name', 'test-name'),
|
||||||
('flavor', '103'),
|
('flavor', '103'),
|
||||||
@@ -205,10 +208,12 @@ class TestDatabaseInstanceCreate(TestInstances):
|
|||||||
('users', ['u1:111', 'u2:111']),
|
('users', ['u1:111', 'u2:111']),
|
||||||
('datastore', "datastore"),
|
('datastore', "datastore"),
|
||||||
('datastore_version', "datastore_version"),
|
('datastore_version', "datastore_version"),
|
||||||
('nics', ['net-id=net1']),
|
('nics', 'net-id=net1'),
|
||||||
('replica_of', 'test'),
|
('replica_of', 'test'),
|
||||||
('replica_count', 4),
|
('replica_count', 4),
|
||||||
('modules', ['mod_id']),
|
('modules', ['mod_id']),
|
||||||
|
('is_public', True),
|
||||||
|
('allowed_cidrs', ['10.0.0.1/24', '192.168.0.1/24'])
|
||||||
]
|
]
|
||||||
parsed_args = self.check_parser(self.cmd, args, verifylist)
|
parsed_args = self.check_parser(self.cmd, args, verifylist)
|
||||||
columns, data = self.cmd.take_action(parsed_args)
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
@@ -97,7 +97,8 @@ class InstancesTest(testtools.TestCase):
|
|||||||
nics=nics, replica_of='test',
|
nics=nics, replica_of='test',
|
||||||
replica_count=4,
|
replica_count=4,
|
||||||
modules=['mod_id'],
|
modules=['mod_id'],
|
||||||
locality='affinity')
|
locality='affinity',
|
||||||
|
access={'is_public': True})
|
||||||
self.assertEqual("/instances", p)
|
self.assertEqual("/instances", p)
|
||||||
self.assertEqual("instance", i)
|
self.assertEqual("instance", i)
|
||||||
self.assertEqual(['db1', 'db2'], b["instance"]["databases"])
|
self.assertEqual(['db1', 'db2'], b["instance"]["databases"])
|
||||||
@@ -113,6 +114,7 @@ class InstancesTest(testtools.TestCase):
|
|||||||
self.assertEqual([{'id': 'mod_id'}], b["instance"]["modules"])
|
self.assertEqual([{'id': 'mod_id'}], b["instance"]["modules"])
|
||||||
self.assertEqual(4, b["instance"]["replica_count"])
|
self.assertEqual(4, b["instance"]["replica_count"])
|
||||||
self.assertEqual('affinity', b["instance"]["locality"])
|
self.assertEqual('affinity', b["instance"]["locality"])
|
||||||
|
self.assertEqual({'is_public': True}, b["instance"]["access"])
|
||||||
|
|
||||||
def test_list(self):
|
def test_list(self):
|
||||||
page_mock = mock.Mock()
|
page_mock = mock.Mock()
|
||||||
|
@@ -93,7 +93,7 @@ class Instances(base.ManagerWithFind):
|
|||||||
restorePoint=None, availability_zone=None, datastore=None,
|
restorePoint=None, availability_zone=None, datastore=None,
|
||||||
datastore_version=None, nics=None, configuration=None,
|
datastore_version=None, nics=None, configuration=None,
|
||||||
replica_of=None, replica_count=None, modules=None,
|
replica_of=None, replica_count=None, modules=None,
|
||||||
locality=None, region_name=None):
|
locality=None, region_name=None, access=None, **kwargs):
|
||||||
"""Create (boot) a new instance."""
|
"""Create (boot) a new instance."""
|
||||||
|
|
||||||
body = {"instance": {
|
body = {"instance": {
|
||||||
@@ -131,6 +131,8 @@ class Instances(base.ManagerWithFind):
|
|||||||
body["instance"]["locality"] = locality
|
body["instance"]["locality"] = locality
|
||||||
if region_name:
|
if region_name:
|
||||||
body["instance"]["region_name"] = region_name
|
body["instance"]["region_name"] = region_name
|
||||||
|
if access:
|
||||||
|
body["instance"]["access"] = access
|
||||||
|
|
||||||
return self._create("/instances", body, "instance")
|
return self._create("/instances", body, "instance")
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user