def test_glance_ids_tenant(self): add_args = [] if 'OS_TENANT_ID' in os.environ: add_args = ['--owner', os.environ['OS_TENANT_ID']] elif 'OS_TENANT_NAME' in os.environ: tenant_name = os.environ['OS_TENANT_NAME'] ret = utils.run(['keystone', 'tenant-get', tenant_name], out=True, err=True) status, _, out, err = ret if status: self.assertTrue(len(out) > 0) _, block, _, _ = openstack_out.parse_block(out) self.assertTrue(len(block) > 0) for prop, val in block: if prop == 'id': add_args = ['--owner', val] break self.fail('TENANT "%s" not found by keystone...' % tenant_name) else: print 'OUT:', out print 'ERR:', err self.fail('Unable to run keystone tenant-get %s' % tenant_name) self.assertTrue(len(add_args) == 2) l1 = glance.glance_ids(None, *add_args) self.assertTrue(set() < l1) # We can see more images if we are administrator and don't filter on tenant l2 = glance.glance_ids(names=None) self.assertTrue(set() < l1 <= l2)
def get_glance_images(): '''Get info about images already in glance Cache those informations to speedup subsequent calls ''' global _GLANCE_IMAGES if _GLANCE_IMAGES is None: _GLANCE_IMAGES = {} add_args = [] tenant_msg = 'Using %s environment variable to filter image list' if 'OS_TENANT_ID' in os.environ: vprint(tenant_msg % 'OS_TENANT_ID') add_args = ['--owner', os.environ['OS_TENANT_ID']] elif 'OS_TENANT_NAME' in os.environ: vprint(tenant_msg % 'OS_TENANT_NAME') cmd = ['keystone', 'tenant-get', os.environ['OS_TENANT_NAME']] status, _, out, _ = utils.run(cmd, out=True) if status: _, block, _, _ = openstack_out.parse_block(out) for prop, val in block: if prop == 'id': add_args = ['--owner', val] break for imgid in glance.glance_ids(None, *add_args): img = glance.glance_show(imgid) if img: vmmap = openstack_out.map_block(img) if 'mpid' in vmmap: vprint( ("Found 'mpid' property (%(mpid)s) already set on " + "image: %(id)s (%(name)s)") % vmmap) _GLANCE_IMAGES[vmmap['mpid']] = vmmap _GLANCE_IMAGES[vmmap['checksum']] = vmmap _GLANCE_IMAGES[vmmap['name']] = vmmap return _GLANCE_IMAGES
def test_openstack_out_parse_block_body_ne(self): _, b, _, _ = openstack_out.parse_block(neutron_agent_list) self.assertEqual(len(b), 5) self.assertEqual(b[3], [ '75b1db74-fea4-46ed-8133-2eefe1155074', 'L3 agent', 'c7-netw', 'xxx', 'True' ])
def test_openstack_out_parse_block_header_ne(self): h, _, _, _ = openstack_out.parse_block(neutron_agent_list) self.assertEqual(len(h), 5) self.assertEqual(h[0], 'id') self.assertEqual(h[1], 'agent_type') self.assertEqual(h[2], 'host') self.assertEqual(h[3], 'alive') self.assertEqual(h[4], 'admin_state_up')
def glance_ids(names=None, *args): ret = set() # Single name ? if names is not None and isinstance(names, (str, unicode)): names = [names] imglist = glance_run('image-list', glance_args=None, subcmd_args=args) if imglist: _, block, _, _ = openstack_out.parse_block(imglist) for image_id, image_name in block: # Filtering or not ? if (names is None or (utils.is_iter(names) and (image_name in names or image_id in names))): ret.add(image_id) return ret
def glance_import_id(base, md5=None, name=None, diskformat=None): g_args = None args = ['--container-format', 'bare', '--file', base] if diskformat is not None: args += ['--disk-format', diskformat] if name is not None: args += ['--name', name] if md5 is not None: args += ['--checksum', md5] # Passing in the checksum has been deprecated in API v2.x g_args = ['--os-image-api-version', '1'] err_msg = 'failed to import image into glance: %s from %s' % (name, base) out = glance_run('image-create', glance_args=g_args, subcmd_args=args, err_msg=err_msg) if out: _, block, _, _ = openstack_out.parse_block(out) for property_name, value in block: if property_name == 'id': return value return False
def get_glance_images(): '''Get info about images already in glance Cache those informations to speedup subsequent calls ''' global _GLANCE_IMAGES if _GLANCE_IMAGES is None: _GLANCE_IMAGES = {} add_args = [] tenant_msg = 'Using %s environment variable to filter image list' if 'OS_TENANT_ID' in os.environ: vprint(tenant_msg % 'OS_TENANT_ID') add_args = ['--owner', os.environ['OS_TENANT_ID']] elif 'OS_TENANT_NAME' in os.environ: vprint(tenant_msg % 'OS_TENANT_NAME') cmd = ['keystone', 'tenant-get', os.environ['OS_TENANT_NAME']] status, _, out, err = utils.run(cmd, out=True, err=True) if status: _, block, _, _ = openstack_out.parse_block(out) for prop, val in block: if prop == 'id': add_args = ['--owner', val] break else: vprint('Failed to run : %s' % ' '.join(cmd)) vprint('OUT: ' + str(out)) vprint('ERR: ' + str(err)) for imgid in glance.glance_ids(None, *add_args): img = glance.glance_show(imgid) if img: vmmap = openstack_out.map_block(img) if 'mpid' in vmmap: vprint(("Found 'mpid' property (%(mpid)s) already set on " + "image: %(id)s (%(name)s)") % vmmap) _GLANCE_IMAGES[vmmap['mpid']] = vmmap _GLANCE_IMAGES[vmmap['checksum']] = vmmap _GLANCE_IMAGES[vmmap['name']] = vmmap return _GLANCE_IMAGES
def test_openstack_out_parse_block_header_gl(self): h, _, _, _ = openstack_out.parse_block(glance_image_show) self.assertEqual(len(h), 2) self.assertEqual(h[0], 'Property') self.assertEqual(h[1], 'Value')
def test_openstack_out_get_field_ok_uuids(self): _, rows, _, _ = openstack_out.parse_block(neutron_agent_list) for row in rows: u = uuid.UUID(row[0]) self.assertEqual(uuid.UUID, type(u))
def test_openstack_out_parse_block_body_gl(self): _, b, _, _ = openstack_out.parse_block(glance_image_show) self.assertEqual(len(b), 15) self.assertEqual(b[0], ['checksum', 'ee1eca47dc88f4879d8a229cc70a07c6']) self.assertEqual(b[1], ['container_format', 'bare'])
def test_openstack_out_parse_block_body_ne(self): _, b, _, _ = openstack_out.parse_block(neutron_agent_list) self.assertEqual(len(b), 5) self.assertEqual(b[3], ['75b1db74-fea4-46ed-8133-2eefe1155074', 'L3 agent', 'c7-netw', 'xxx', 'True'])
def test_openstack_out_parse_block_header_pb(self): h, _, _, _ = openstack_out.parse_block(pb) self.assertEqual(len(h), 2) self.assertEqual(h[0], '1') self.assertEqual(h[1], '2')
def test_openstack_out_parse_block_body_pb(self): _, b, _, _ = openstack_out.parse_block(pb) self.assertEqual(len(b), 3) self.assertEqual(b[0], ['', '']) self.assertEqual(b[1], ['', '']) self.assertEqual(b[2], ['UN', 'DEUX'])