obj = resp.json()
if not obj['count']:
raise RuntimeError(
- "Could not find an image for %s %s" %
- (self.os_type, self.os_version))
+ "Fog has no %s image. Available %s images: %s" %
+ (name, self.remote.machine_type, self.suggest_image_names()))
return obj['images'][0]
+ def suggest_image_names(self):
+ """
+ Suggest available image names for this machine type.
+
+ :returns: A list of image names.
+ """
+ resp = self.do_request('/image/search/%s' % self.remote.machine_type)
+ obj = resp.json()
+ images = obj['images']
+ return [image['name'] for image in images]
+
def set_image(self, host_id):
"""
Tell FOG to use the proper image on the next deploy
assert req.body == '{"name": "type1_windows_xp"}'
assert result == img_objs[0]
+ def test_suggest_image_names(self):
+ data = {'images': [
+ {'name': 'mira_rhel_9.1'},
+ {'name': 'mira_rhel_9.2'},
+ ]}
+ self.mocks['m_requests_Session_send']\
+ .return_value.json.return_value = data
+ self.mocks['m_Remote_machine_type'].return_value = 'mira'
+ # Not sure what this klass() is for here:
+ obj = self.klass('name.fqdn', 'mira', '1.0')
+ result = obj.suggest_image_names()
+ assert len(self.mocks['m_requests_Session_send'].call_args_list) == 1
+ req = self.mocks['m_requests_Session_send'].call_args_list[0][0][0]
+ assert req.url == test_config['fog']['endpoint'] + '/image/search/mira'
+ assert result == ['mira_rhel_9.1', 'mira_rhel_9.2']
+
def test_set_image(self):
self.mocks['m_Remote_hostname'].return_value = 'name.fqdn'
self.mocks['m_Remote_machine_type'].return_value = 'type1'