Change environment settings on upgrade-env cmd
set up provision image_data uri based on release version (before that
them copied from original env)
Change-Id: Ibb7400d2b98ca81fd2a58ca76b04a3e80d4e76a5
Closes-bug: 1582231
(cherry picked from commit a40e4e4073
)
This commit is contained in:
parent
8defa232ca
commit
03a5c7bc0f
|
@ -10,6 +10,7 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import json
|
||||
import mock
|
||||
import pytest
|
||||
|
||||
|
@ -237,9 +238,42 @@ ENV_SETTINGS = {
|
|||
|
||||
|
||||
@pytest.mark.parametrize("env_id,master_ip", [(1, '10.0.0.1')])
|
||||
def test_change_env_settings(mocker, env_id, master_ip):
|
||||
@pytest.mark.parametrize("format_tuples", [
|
||||
[
|
||||
# (path, release_template, expected_result)
|
||||
('/boot', "{settings.MASTER_IP}_{cluster.id}", "10.0.0.1_1"),
|
||||
(
|
||||
'/',
|
||||
"{cluster.id}_{settings.MASTER_IP}_blabal.tar.gz",
|
||||
"1_10.0.0.1_blabal.tar.gz"
|
||||
),
|
||||
]
|
||||
])
|
||||
def test_change_env_settings(mocker, env_id, master_ip, format_tuples):
|
||||
env = mocker.patch("fuelclient.objects.environment.Environment")
|
||||
env_dict = {
|
||||
'provision': {
|
||||
'image_data': {f[0]: {'uri': 'bad_value'} for f in format_tuples}}
|
||||
}
|
||||
expected_dict = {
|
||||
'provision': {
|
||||
'image_data': {f[0]: {'uri': f[2]} for f in format_tuples}}
|
||||
}
|
||||
release_dict = {
|
||||
'generated': {
|
||||
'provision': {
|
||||
'image_data': {f[0]: {'uri': f[1]} for f in format_tuples}}
|
||||
}
|
||||
}
|
||||
sql_call_mock = mocker.patch(
|
||||
"octane.util.sql.run_psql_in_container",
|
||||
side_effect=[
|
||||
[json.dumps(env_dict)], [json.dumps(release_dict)], 1
|
||||
]
|
||||
)
|
||||
mock_json_dumps = mocker.patch("json.dumps", return_value="generated_json")
|
||||
mock_env = env.return_value = mock.Mock()
|
||||
mock_env.data = {"release_id": 1}
|
||||
mock_env.get_attributes.return_value = ENV_SETTINGS
|
||||
env_util.change_env_settings(env_id, master_ip)
|
||||
mock_env.update_attributes.assert_called_once_with({
|
||||
|
@ -269,6 +303,13 @@ def test_change_env_settings(mocker, env_id, master_ip):
|
|||
}
|
||||
}
|
||||
})
|
||||
mock_json_dumps.assert_called_once_with(expected_dict)
|
||||
sql_call_mock.assert_called_with(
|
||||
"update attributes set generated='{0}' where cluster_id={1}".format(
|
||||
mock_json_dumps.return_value, env_id
|
||||
),
|
||||
'nailgun'
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("mock_method,version,expected_result",
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
# under the License.
|
||||
|
||||
import fuelclient
|
||||
|
||||
import collections
|
||||
import json
|
||||
import logging
|
||||
import os.path
|
||||
|
@ -27,6 +29,7 @@ from fuelclient.objects import task as task_obj
|
|||
from octane.helpers import tasks as tasks_helpers
|
||||
from octane.helpers import transformations
|
||||
from octane import magic_consts
|
||||
from octane.util import sql
|
||||
from octane.util import ssh
|
||||
from octane.util import subprocess
|
||||
|
||||
|
@ -78,6 +81,28 @@ def change_env_settings(env_id, master_ip=''):
|
|||
if get_env_provision_method(env) != 'image':
|
||||
attrs['editable']['provision']['method']['value'] = 'image'
|
||||
env.update_attributes(attrs)
|
||||
generated_data = sql.run_psql_in_container(
|
||||
"select generated from attributes where cluster_id={0}".format(env_id),
|
||||
"nailgun"
|
||||
)[0]
|
||||
generated_json = json.loads(generated_data)
|
||||
release_data = sql.run_psql_in_container(
|
||||
"select attributes_metadata from releases where id={0}".format(
|
||||
env.data['release_id']),
|
||||
"nailgun"
|
||||
)[0]
|
||||
release_json = json.loads(release_data)
|
||||
release_image_dict = release_json['generated']['provision']['image_data']
|
||||
settings_cls = collections.namedtuple("settings", ["MASTER_IP", "id"])
|
||||
settings = settings_cls(master_ip, env_id)
|
||||
for key, value in generated_json['provision']['image_data'].iteritems():
|
||||
value['uri'] = release_image_dict[key]['uri'].format(settings=settings,
|
||||
cluster=settings)
|
||||
sql.run_psql_in_container(
|
||||
"update attributes set generated='{0}' where cluster_id={1}".format(
|
||||
json.dumps(generated_json), env_id),
|
||||
"nailgun"
|
||||
)
|
||||
|
||||
|
||||
def clone_env(env_id, release):
|
||||
|
|
Loading…
Reference in New Issue