Merge "Using pre-defined Flavors when Openstack not running"
This commit is contained in:
commit
718222fe8a
@ -251,3 +251,35 @@ class ToscaComputeTest(TestCase):
|
|||||||
self._tosca_compute_test(
|
self._tosca_compute_test(
|
||||||
tpl_snippet,
|
tpl_snippet,
|
||||||
expectedprops)
|
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)
|
||||||
|
@ -20,6 +20,7 @@ from toscaparser.utils.gettextutils import _
|
|||||||
from toscaparser.utils.validateutils import TOSCAVersionProperty
|
from toscaparser.utils.validateutils import TOSCAVersionProperty
|
||||||
import translator.common.utils
|
import translator.common.utils
|
||||||
from translator.hot.syntax.hot_resource import HotResource
|
from translator.hot.syntax.hot_resource import HotResource
|
||||||
|
|
||||||
log = logging.getLogger('heat-translator')
|
log = logging.getLogger('heat-translator')
|
||||||
|
|
||||||
|
|
||||||
@ -145,33 +146,40 @@ class ToscaCompute(HotResource):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
headers = {'Content-Type': 'application/json'}
|
headers = {'Content-Type': 'application/json'}
|
||||||
keystone_response = requests.post(auth_url + '/tokens',
|
try:
|
||||||
data=json.dumps(auth_dict),
|
keystone_response = requests.post(auth_url + '/tokens',
|
||||||
headers=headers)
|
data=json.dumps(auth_dict),
|
||||||
if keystone_response.status_code != 200:
|
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
|
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
|
return flavor_dict
|
||||||
|
|
||||||
def _best_flavor(self, properties):
|
def _best_flavor(self, properties):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user