Merge "Using pre-defined Flavors when Openstack not running"

This commit is contained in:
Jenkins 2016-02-03 05:21:14 +00:00 committed by Gerrit Code Review
commit 718222fe8a
2 changed files with 66 additions and 26 deletions

View File

@ -251,3 +251,35 @@ class ToscaComputeTest(TestCase):
self._tosca_compute_test(
tpl_snippet,
expectedprops)
@patch('requests.post')
@patch('requests.get')
@patch('os.getenv')
def test_node_compute_without_nova_flavor(self, mock_os_getenv,
mock_get, mock_post):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
capabilities:
host:
properties:
num_cpus: 1
disk_size: 1 GB
mem_size: 1 GB
'''
with patch('translator.hot.tosca.tosca_compute.ToscaCompute.'
'_check_for_env_variables') as mock_check_env:
mock_check_env.return_value = True
mock_os_getenv.side_effect = ['demo', 'demo',
'demo', 'http://abc.com/5000/']
mock_ks_response = mock.MagicMock()
mock_ks_content = {}
mock_ks_response.content = json.dumps(mock_ks_content)
expectedprops = {'key_name': 'userkey',
'flavor': 'm1.small',
'user_data_format': 'SOFTWARE_CONFIG',
'image': None}
self._tosca_compute_test(
tpl_snippet,
expectedprops)

View File

@ -20,6 +20,7 @@ from toscaparser.utils.gettextutils import _
from toscaparser.utils.validateutils import TOSCAVersionProperty
import translator.common.utils
from translator.hot.syntax.hot_resource import HotResource
log = logging.getLogger('heat-translator')
@ -145,33 +146,40 @@ class ToscaCompute(HotResource):
}
}
headers = {'Content-Type': 'application/json'}
keystone_response = requests.post(auth_url + '/tokens',
data=json.dumps(auth_dict),
headers=headers)
if keystone_response.status_code != 200:
try:
keystone_response = requests.post(auth_url + '/tokens',
data=json.dumps(auth_dict),
headers=headers)
if keystone_response.status_code != 200:
return None
access_dict = json.loads(keystone_response.content)
access_token = access_dict['access']['token']['id']
service_catalog = access_dict['access']['serviceCatalog']
nova_url = ''
for service in service_catalog:
if service['type'] == 'compute':
nova_url = service['endpoints'][0]['publicURL']
if not nova_url:
return None
nova_response = requests.get(nova_url + '/flavors/detail',
headers={'X-Auth-Token':
access_token})
if nova_response.status_code != 200:
return None
flavors = json.loads(nova_response.content)['flavors']
flavor_dict = dict()
for flavor in flavors:
flavor_name = str(flavor['name'])
flavor_dict[flavor_name] = {
'mem_size': flavor['ram'],
'disk_size': flavor['disk'],
'num_cpus': flavor['vcpus'],
}
except Exception as e:
# Handles any exception coming from openstack
log.warn(_('Choosing predefined flavors since received '
'Openstack Exception: %s') % str(e))
return None
access_dict = json.loads(keystone_response.content)
access_token = access_dict['access']['token']['id']
service_catalog = access_dict['access']['serviceCatalog']
nova_url = ''
for service in service_catalog:
if service['type'] == 'compute':
nova_url = service['endpoints'][0]['publicURL']
if not nova_url:
return None
nova_response = requests.get(nova_url + '/flavors/detail',
headers={'X-Auth-Token': access_token})
if nova_response.status_code != 200:
return None
flavors = json.loads(nova_response.content)['flavors']
flavor_dict = dict()
for flavor in flavors:
flavor_name = str(flavor['name'])
flavor_dict[flavor_name] = {
'mem_size': flavor['ram'],
'disk_size': flavor['disk'],
'num_cpus': flavor['vcpus'],
}
return flavor_dict
def _best_flavor(self, properties):