def setUp(self): super(TestCreateServer, self).setUp() config = os_client_config.OpenStackConfig() self.client = OpenStackCloud( cloud_config=config.get_one_cloud(validate=False)) self.client._SERVER_AGE = 0
def setUp(self): super(TestFloatingIP, self).setUp() config = os_client_config.OpenStackConfig() self.client = OpenStackCloud(cloud_config=config.get_one_cloud( validate=False))
def get_cloud_config(cloud='devstack-admin'): return os_client_config.OpenStackConfig().get_one_cloud(cloud=cloud)
def setUp(self): super(TestRebuildServer, self).setUp() config = os_client_config.OpenStackConfig() self.client = OpenStackCloud(cloud_config=config.get_one_cloud( validate=False))
def run(argv): parser = argparse.ArgumentParser( description='Simple HTTP testing for Openstack') parser.add_argument('--debug', action='store_true', help='Enable debug output') config = os_client_config.OpenStackConfig() config.register_argparse_arguments(parser, argv) positional = parser.add_argument_group('Positional Arguments') positional.add_argument('method', metavar='METHOD', help='The HTTP method to make the request with') positional.add_argument('url', metavar='URL', help='The URL or path to request') positional.add_argument('items', metavar='ITEM', nargs='*', help='Additional items') opts = parser.parse_args(argv) if opts.debug: logging.basicConfig(level=logging.DEBUG) else: logging.basicConfig(level=logging.WARN) cloud = config.get_one_cloud(argparse=opts) adap = cloud.get_session_client(None) # FIXME(jamielennox): These things should be handled by os-client-config adap.logger = LOG adap.user_agent = 'os-http/%s os-client-config/%s %s' % ( version.version_string, _occ_version, session.DEFAULT_USER_AGENT) adap.version = opts.os_api_version headers = {'Accept': 'application/json'} for item in opts.items: if ':' in item: key, val = item.split(':', 1) headers[key] = val else: raise ErrorExit("Unknown item: %s" % item) try: resp = adap.request(opts.url, opts.method.upper(), headers=headers, raise_exc=False) except exceptions.EmptyCatalog: message = ("Failed to find an endpoint because the returned service " "catalog is empty.") try: get_access = adap.session.auth.get_access except AttributeError: # not an identity plugin - see if it specifies project_id scoped = bool(adap.get_project_id()) else: scoped = get_access(adap.session).scoped if not scoped: message += (" This seems to be because the credentials provided " "result in an unscoped token. Please check your " "authentication credentials.") raise ErrorExit(message) except exceptions.EndpointNotFound: service_params = ('service_type', 'service_name', 'interface', 'region_name', 'version') query = ", ".join("%s=%s" % (p, getattr(adap, p)) for p in service_params if getattr(adap, p)) raise ErrorExit("Failed to find an endpoint in the service catalog " "that matches your query: %s" % query) return format_resp(resp)
class Opts(object): def __init__(self, cloud_name='devstack-admin', debug=False): self.cloud = cloud_name self.debug = debug def _get_resource_value(resource_key, default): try: return cloud.config['functional'][resource_key] except KeyError: return default opts = Opts(cloud_name=TEST_CLOUD) occ = os_client_config.OpenStackConfig() cloud = occ.get_one_cloud(opts.cloud, argparse=opts) IMAGE_NAME = _get_resource_value('image_name', 'cirros-0.3.5-x86_64-disk') FLAVOR_NAME = _get_resource_value('flavor_name', 'm1.small') def service_exists(**kwargs): """Decorator function to check whether a service exists Usage: @unittest.skipUnless(base.service_exists(service_type="metering"), "Metering service does not exist") class TestMeter(base.BaseFunctionalTest): ...
def loadConfig(config_path): retry = 3 # Since some nodepool code attempts to dynamically re-read its config # file, we need to handle the race that happens if an outside entity # edits it (causing it to temporarily not exist) at the same time we # attempt to reload it. while True: try: config = yaml.load(open(config_path)) break except IOError as e: if e.errno == 2: retry = retry - 1 time.sleep(.5) else: raise e if retry == 0: raise e cloud_config = os_client_config.OpenStackConfig() newconfig = Config() newconfig.db = None newconfig.dburi = None newconfig.providers = {} newconfig.targets = {} newconfig.labels = {} newconfig.elementsdir = config.get('elements-dir') newconfig.imagesdir = config.get('images-dir') newconfig.dburi = None newconfig.provider_managers = {} newconfig.jenkins_managers = {} newconfig.zmq_publishers = {} newconfig.gearman_servers = {} newconfig.zookeeper_servers = {} newconfig.diskimages = {} newconfig.crons = {} for name, default in [ ('cleanup', '* * * * *'), ('check', '*/15 * * * *'), ]: c = Cron() c.name = name newconfig.crons[c.name] = c c.job = None c.timespec = config.get('cron', {}).get(name, default) for addr in config.get('zmq-publishers', []): z = ZMQPublisher() z.name = addr z.listener = None newconfig.zmq_publishers[z.name] = z for server in config.get('gearman-servers', []): g = GearmanServer() g.host = server['host'] g.port = server.get('port', 4730) g.name = g.host + '_' + str(g.port) newconfig.gearman_servers[g.name] = g for server in config.get('zookeeper-servers', []): z = zk.ZooKeeperConnectionConfig(server['host'], server.get('port', 2181), server.get('chroot', None)) name = z.host + '_' + str(z.port) newconfig.zookeeper_servers[name] = z for provider in config.get('providers', []): p = Provider() p.name = provider['name'] newconfig.providers[p.name] = p cloud_kwargs = _cloudKwargsFromProvider(provider) p.cloud_config = _get_one_cloud(cloud_config, cloud_kwargs) p.nodepool_id = provider.get('nodepool-id', None) p.region_name = provider.get('region-name') p.max_servers = provider['max-servers'] p.pool = provider.get('pool', None) p.rate = provider.get('rate', 1.0) p.api_timeout = provider.get('api-timeout') p.boot_timeout = provider.get('boot-timeout', 60) p.launch_timeout = provider.get('launch-timeout', 3600) p.networks = [] for network in provider.get('networks', []): n = Network() p.networks.append(n) if 'net-id' in network: n.id = network['net-id'] n.name = None elif 'net-label' in network: n.name = network['net-label'] n.id = None else: n.name = network.get('name') n.id = None p.ipv6_preferred = provider.get('ipv6-preferred') p.clean_floating_ips = provider.get('clean-floating-ips') p.azs = provider.get('availability-zones') p.template_hostname = provider.get( 'template-hostname', 'template-{image.name}-{timestamp}') p.image_type = provider.get('image-type', p.cloud_config.config['image_format']) p.images = {} for image in provider['images']: i = ProviderImage() i.name = image['name'] p.images[i.name] = i i.min_ram = image['min-ram'] i.name_filter = image.get('name-filter', None) i.key_name = image.get('key-name', None) i.username = image.get('username', 'jenkins') i.user_home = image.get('user-home', '/home/jenkins') i.pause = bool(image.get('pause', False)) i.private_key = image.get('private-key', '/var/lib/jenkins/.ssh/id_rsa') i.config_drive = image.get('config-drive', True) # This dict is expanded and used as custom properties when # the image is uploaded. i.meta = image.get('meta', {}) # 5 elements, and no key or value can be > 255 chars # per Nova API rules if i.meta: if len(i.meta) > 5 or \ any([len(k) > 255 or len(v) > 255 for k, v in i.meta.iteritems()]): # soft-fail #self.log.error("Invalid metadata for %s; ignored" # % i.name) i.meta = {} if 'diskimages' in config: for diskimage in config['diskimages']: d = DiskImage() d.name = diskimage['name'] newconfig.diskimages[d.name] = d if 'elements' in diskimage: d.elements = u' '.join(diskimage['elements']) else: d.elements = '' # must be a string, as it's passed as env-var to # d-i-b, but might be untyped in the yaml and # interpreted as a number (e.g. "21" for fedora) d.release = str(diskimage.get('release', '')) d.rebuild_age = int(diskimage.get('rebuild-age', 86400)) d.env_vars = diskimage.get('env-vars', {}) if not isinstance(d.env_vars, dict): #self.log.error("%s: ignoring env-vars; " # "should be a dict" % d.name) d.env_vars = {} d.image_types = set(diskimage.get('formats', [])) d.pause = bool(diskimage.get('pause', False)) # Do this after providers to build the image-types for provider in newconfig.providers.values(): for image in provider.images.values(): diskimage = newconfig.diskimages[image.name] diskimage.image_types.add(provider.image_type) for label in config.get('labels', []): l = Label() l.name = label['name'] newconfig.labels[l.name] = l l.image = label['image'] l.min_ready = label.get('min-ready', 2) l.subnodes = label.get('subnodes', 0) l.ready_script = label.get('ready-script') l.providers = {} for provider in label['providers']: p = LabelProvider() p.name = provider['name'] l.providers[p.name] = p for target in config.get('targets', []): t = Target() t.name = target['name'] newconfig.targets[t.name] = t jenkins = target.get('jenkins', {}) t.online = True t.rate = target.get('rate', 1.0) t.jenkins_test_job = jenkins.get('test-job') t.jenkins_url = None t.jenkins_user = None t.jenkins_apikey = None t.jenkins_credentials_id = None t.assign_via_gearman = target.get('assign-via-gearman', False) t.hostname = target.get('hostname', '{label.name}-{provider.name}-{node_id}') t.subnode_hostname = target.get( 'subnode-hostname', '{label.name}-{provider.name}-{node_id}-{subnode_id}') return newconfig
def loadConfig(config_path): config = yaml.load(open(config_path)) cloud_config = os_client_config.OpenStackConfig() newconfig = Config() newconfig.db = None newconfig.dburi = None newconfig.providers = {} newconfig.targets = {} newconfig.labels = {} newconfig.scriptdir = config.get('script-dir') newconfig.elementsdir = config.get('elements-dir') newconfig.imagesdir = config.get('images-dir') newconfig.dburi = None newconfig.provider_managers = {} newconfig.jenkins_managers = {} newconfig.zmq_publishers = {} newconfig.gearman_servers = {} newconfig.diskimages = {} newconfig.crons = {} for name, default in [ ('image-update', '14 2 * * *'), ('cleanup', '* * * * *'), ('check', '*/15 * * * *'), ]: c = Cron() c.name = name newconfig.crons[c.name] = c c.job = None c.timespec = config.get('cron', {}).get(name, default) for addr in config.get('zmq-publishers', []): z = ZMQPublisher() z.name = addr z.listener = None newconfig.zmq_publishers[z.name] = z for server in config.get('gearman-servers', []): g = GearmanServer() g.host = server['host'] g.port = server.get('port', 4730) g.name = g.host + '_' + str(g.port) newconfig.gearman_servers[g.name] = g for provider in config.get('providers', []): p = Provider() p.name = provider['name'] newconfig.providers[p.name] = p cloud_kwargs = _cloudKwargsFromProvider(provider) p.cloud_config = _get_one_cloud(cloud_config, cloud_kwargs) p.region_name = provider.get('region-name') p.max_servers = provider['max-servers'] p.keypair = provider.get('keypair', None) p.pool = provider.get('pool', None) p.rate = provider.get('rate', 1.0) p.api_timeout = provider.get('api-timeout') p.boot_timeout = provider.get('boot-timeout', 60) p.launch_timeout = provider.get('launch-timeout', 3600) p.networks = [] for network in provider.get('networks', []): n = Network() p.networks.append(n) if 'net-id' in network: n.id = network['net-id'] n.name = None elif 'net-label' in network: n.name = network['net-label'] n.id = None else: n.name = network.get('name') n.id = None n.public = network.get('public', False) p.ipv6_preferred = provider.get('ipv6-preferred') p.clean_floating_ips = provider.get('clean-floating-ips') p.azs = provider.get('availability-zones') p.template_hostname = provider.get( 'template-hostname', 'template-{image.name}-{timestamp}' ) p.image_type = provider.get( 'image-type', p.cloud_config.config['image_format']) p.images = {} for image in provider['images']: i = ProviderImage() i.name = image['name'] p.images[i.name] = i i.base_image = image.get('base-image', None) i.min_ram = image['min-ram'] i.name_filter = image.get('name-filter', None) i.setup = image.get('setup', None) i.diskimage = image.get('diskimage', None) i.username = image.get('username', 'jenkins') i.user_home = image.get('user-home', '/home/jenkins') i.private_key = image.get('private-key', '/var/lib/jenkins/.ssh/id_rsa') i.config_drive = image.get('config-drive', None) # note this does "double-duty" -- for # SnapshotImageUpdater the meta-data dict is passed to # nova when the snapshot image is created. For # DiskImageUpdater, this dict is expanded and used as # custom properties when the image is uploaded. i.meta = image.get('meta', {}) # 5 elements, and no key or value can be > 255 chars # per Nova API rules if i.meta: if len(i.meta) > 5 or \ any([len(k) > 255 or len(v) > 255 for k, v in i.meta.iteritems()]): # soft-fail #self.log.error("Invalid metadata for %s; ignored" # % i.name) i.meta = {} if 'diskimages' in config: for diskimage in config['diskimages']: d = DiskImage() d.name = diskimage['name'] newconfig.diskimages[d.name] = d if 'elements' in diskimage: d.elements = u' '.join(diskimage['elements']) else: d.elements = '' # must be a string, as it's passed as env-var to # d-i-b, but might be untyped in the yaml and # interpreted as a number (e.g. "21" for fedora) d.release = str(diskimage.get('release', '')) d.env_vars = diskimage.get('env-vars', {}) if not isinstance(d.env_vars, dict): #self.log.error("%s: ignoring env-vars; " # "should be a dict" % d.name) d.env_vars = {} d.image_types = set() # Do this after providers to build the image-types for provider in newconfig.providers.values(): for image in provider.images.values(): if (image.diskimage and image.diskimage in newconfig.diskimages): diskimage = newconfig.diskimages[image.diskimage] diskimage.image_types.add(provider.image_type) for label in config.get('labels', []): l = Label() l.name = label['name'] newconfig.labels[l.name] = l l.image = label['image'] l.min_ready = label.get('min-ready', 2) l.subnodes = label.get('subnodes', 0) l.ready_script = label.get('ready-script') l.providers = {} for provider in label['providers']: p = LabelProvider() p.name = provider['name'] l.providers[p.name] = p for target in config.get('targets', []): t = Target() t.name = target['name'] newconfig.targets[t.name] = t jenkins = target.get('jenkins', {}) t.online = True t.rate = target.get('rate', 1.0) t.jenkins_test_job = jenkins.get('test-job') t.jenkins_url = None t.jenkins_user = None t.jenkins_apikey = None t.jenkins_credentials_id = None t.assign_via_gearman = target.get('assign-via-gearman', False) t.hostname = target.get( 'hostname', '{label.name}-{provider.name}-{node_id}' ) t.subnode_hostname = target.get( 'subnode-hostname', '{label.name}-{provider.name}-{node_id}-{subnode_id}' ) # A set of image names that are in use by labels, to be # used by the image update methods to determine whether # a given image needs to be updated. newconfig.images_in_use = set() for label in newconfig.labels.values(): if label.min_ready >= 0: newconfig.images_in_use.add(label.image) return newconfig
def setUp(self): super(TestObject, self).setUp() config = os_client_config.OpenStackConfig() self.cloud = OpenStackCloud(cloud_config=config.get_one_cloud())
for version in r['values']: print_version(version) if isinstance(r, list): for version in r: print_version(version) def print_version(version): if version['status'] in ('CURRENT', 'stable'): print("\tVersion ID: {id} updated {updated}".format( id=version.get('id'), updated=version.get('updated'))) verbose = '-v' in sys.argv ran = [] for cloud in os_client_config.OpenStackConfig().get_all_clouds(): if cloud.name in ran: continue ran.append(cloud.name) # We don't actually need a compute client - but we'll be getting full urls # anyway. Without this SSL cert info becomes wrong. c = cloud.get_session_client('compute') endpoint = cloud.config['auth']['auth_url'] try: print(endpoint) r = c.get(endpoint).json() if verbose: pprint.pprint(r) except Exception as e: print("Error with {cloud}: {e}".format(cloud=cloud.name, e=str(e))) continue
def main(): parser = argparse.ArgumentParser() parser.add_argument("name", help="server name") parser.add_argument("--cloud", dest="cloud", required=True, help="cloud name") parser.add_argument("--region", dest="region", help="cloud region") parser.add_argument("--flavor", dest="flavor", default='1GB', help="name (or substring) of flavor") parser.add_argument("--image", dest="image", default="Ubuntu 14.04 LTS (Trusty Tahr) (PVHVM)", help="image name") parser.add_argument("--environment", dest="environment", help="Puppet environment to use", default=None) parser.add_argument("--volume", dest="volume", help="UUID of volume to attach to the new server.", default=None) parser.add_argument("--mount-path", dest="mount_path", help="Path to mount cinder volume at.", default=None) parser.add_argument("--fs-label", dest="fs_label", help="FS label to use when mounting cinder volume.", default=None) parser.add_argument("--boot-from-volume", dest="boot_from_volume", help="Create a boot volume for the server and use it.", action='store_true', default=False) parser.add_argument("--keep", dest="keep", help="Don't clean up or delete the server on error.", action='store_true', default=False) parser.add_argument("--verbose", dest="verbose", default=False, action='store_true', help="Be verbose about logging cloud actions") parser.add_argument("--network", dest="network", default=None, help="network label to attach instance to") parser.add_argument("--config-drive", dest="config_drive", help="Boot with config_drive attached.", action='store_true', default=False) parser.add_argument("--az", dest="availability_zone", default=None, help="AZ to boot in.") options = parser.parse_args() shade.simple_logging(debug=options.verbose) cloud_kwargs = {} if options.region: cloud_kwargs['region_name'] = options.region cloud_config = os_client_config.OpenStackConfig().get_one_cloud( options.cloud, **cloud_kwargs) cloud = shade.OpenStackCloud(cloud_config) flavor = cloud.get_flavor(options.flavor) if flavor: print "Found flavor", flavor.name else: print "Unable to find matching flavor; flavor list:" for i in cloud.list_flavors(): print i.name sys.exit(1) image = cloud.get_image_exclude(options.image, 'deprecated') if image: print "Found image", image.name else: print "Unable to find matching image; image list:" for i in cloud.list_images(): print i.name sys.exit(1) server = build_server(cloud, options.name, image, flavor, options.volume, options.keep, options.network, options.boot_from_volume, options.config_drive, options.mount_path, options.fs_label, options.availability_zone, options.environment) dns.print_dns(cloud, server)