Fix deployment --fromenv option

* Updated config that created by fromenv option to new format

Change-Id: I1e0a7dd1d12a97ff39cb9c4c243440510f5b2445
This commit is contained in:
Anton Studenov 2017-03-22 11:35:24 +03:00
parent 516b3628b7
commit c7b48f3893
4 changed files with 49 additions and 34 deletions

View File

@ -88,8 +88,10 @@ class DeploymentCommands(object):
""" """
if fromenv: if fromenv:
config = {"type": "ExistingCloud"} # TODO(astudenov): move this to Credential plugin
config.update(envutils.get_creds_from_env_vars()) config = {
"type": "ExistingCloud",
"creds": {"openstack": envutils.get_creds_from_env_vars()}}
else: else:
if not filename: if not filename:
print("Either --filename or --fromenv is required.") print("Either --filename or --fromenv is required.")

View File

@ -203,9 +203,11 @@ class ExistingCloud(engine.Engine):
builder_cls.validate(creds) builder_cls.validate(creds)
def _get_creds(self, config): def _get_creds(self, config):
# NOTE(astudenov): copy config to prevent compatibility changes
# from saving to database
config = copy.deepcopy(config)
if "creds" not in config: if "creds" not in config:
# backward compatibility with old schema # backward compatibility with old schema
config = copy.deepcopy(config)
del config["type"] del config["type"]
creds_config = {"openstack": [config]} creds_config = {"openstack": [config]}
else: else:

View File

@ -46,20 +46,23 @@ class DeploymentTestCase(unittest.TestCase):
self.rally.env.update(utils.TEST_ENV) self.rally.env.update(utils.TEST_ENV)
self.rally("deployment create --name t_create_env --fromenv") self.rally("deployment create --name t_create_env --fromenv")
config = json.loads(self.rally("deployment config")) config = json.loads(self.rally("deployment config"))
self.assertIn("creds", config)
self.assertIn("openstack", config["creds"])
oscreds = config["creds"]["openstack"]
self.assertEqual(utils.TEST_ENV["OS_USERNAME"], self.assertEqual(utils.TEST_ENV["OS_USERNAME"],
config["admin"]["username"]) oscreds["admin"]["username"])
self.assertEqual(utils.TEST_ENV["OS_PASSWORD"], self.assertEqual(utils.TEST_ENV["OS_PASSWORD"],
config["admin"]["password"]) oscreds["admin"]["password"])
if "project_name" in config["admin"]: if "project_name" in oscreds["admin"]:
# keystone v3 # keystone v3
self.assertEqual(utils.TEST_ENV["OS_TENANT_NAME"], self.assertEqual(utils.TEST_ENV["OS_TENANT_NAME"],
config["admin"]["project_name"]) oscreds["admin"]["project_name"])
else: else:
# keystone v2 # keystone v2
self.assertEqual(utils.TEST_ENV["OS_TENANT_NAME"], self.assertEqual(utils.TEST_ENV["OS_TENANT_NAME"],
config["admin"]["tenant_name"]) oscreds["admin"]["tenant_name"])
self.assertEqual(utils.TEST_ENV["OS_AUTH_URL"], self.assertEqual(utils.TEST_ENV["OS_AUTH_URL"],
config["auth_url"]) oscreds["auth_url"])
def test_destroy(self): def test_destroy(self):
self.rally.env.update(utils.TEST_ENV) self.rally.env.update(utils.TEST_ENV)
@ -87,7 +90,7 @@ class DeploymentTestCase(unittest.TestCase):
self.rally.env.update(utils.TEST_ENV) self.rally.env.update(utils.TEST_ENV)
self.rally("deployment create --name t_create_env --fromenv") self.rally("deployment create --name t_create_env --fromenv")
config = json.loads(self.rally("deployment config")) config = json.loads(self.rally("deployment config"))
config["auth_url"] = "http://foo/" config["creds"]["openstack"]["auth_url"] = "http://foo/"
file = utils.JsonTempFile(config) file = utils.JsonTempFile(config)
self.rally("deployment recreate --deployment t_create_env " self.rally("deployment recreate --deployment t_create_env "
"--filename %s" % file.filename) "--filename %s" % file.filename)

View File

@ -59,17 +59,21 @@ class DeploymentCommandsTestCase(test.TestCase):
self.fake_api.deployment.create.assert_called_once_with( self.fake_api.deployment.create.assert_called_once_with(
{ {
"type": "ExistingCloud", "type": "ExistingCloud",
"auth_url": "fake_auth_url", "creds": {
"region_name": "fake_region_name", "openstack": {
"endpoint_type": "fake_endpoint_type", "auth_url": "fake_auth_url",
"endpoint": "fake_endpoint", "region_name": "fake_region_name",
"admin": { "endpoint_type": "fake_endpoint_type",
"username": "fake_username", "endpoint": "fake_endpoint",
"password": "fake_password", "admin": {
"tenant_name": "fake_tenant_name" "username": "fake_username",
}, "password": "fake_password",
"https_insecure": True, "tenant_name": "fake_tenant_name"
"https_cacert": "fake_cacert" },
"https_insecure": True,
"https_cacert": "fake_cacert"
}
}
}, },
"from_env" "from_env"
) )
@ -92,19 +96,23 @@ class DeploymentCommandsTestCase(test.TestCase):
self.fake_api.deployment.create.assert_called_once_with( self.fake_api.deployment.create.assert_called_once_with(
{ {
"type": "ExistingCloud", "type": "ExistingCloud",
"auth_url": "fake_auth_url", "creds": {
"region_name": "fake_region_name", "openstack": {
"endpoint_type": "fake_endpoint_type", "auth_url": "fake_auth_url",
"endpoint": "fake_endpoint", "region_name": "fake_region_name",
"admin": { "endpoint_type": "fake_endpoint_type",
"username": "fake_username", "endpoint": "fake_endpoint",
"password": "fake_password", "admin": {
"user_domain_name": "fake_udn", "username": "fake_username",
"project_domain_name": "fake_pdn", "password": "fake_password",
"project_name": "fake_tenant_name" "user_domain_name": "fake_udn",
}, "project_domain_name": "fake_pdn",
"https_insecure": True, "project_name": "fake_tenant_name"
"https_cacert": "fake_cacert" },
"https_insecure": True,
"https_cacert": "fake_cacert"
}
}
}, },
"from_env" "from_env"
) )