def main(): parser = argparse.ArgumentParser() parser.add_argument("name", help="server name") parser.add_argument("--ram", dest="ram", default=1024, type=int, help="minimum amount of ram") parser.add_argument("--image", dest="image", default="Ubuntu 12.04 LTS (Precise Pangolin)", help="image name") parser.add_argument("--environment", dest="environment", default="production", help="puppet environment name") parser.add_argument("--cert", dest="cert", help="name of signed puppet certificate file (e.g., " "hostname.example.com.pem)") parser.add_argument("--salt", dest="salt", action="store_true", help="Manage salt keys for this host.") parser.add_argument("--server", dest="server", help="Puppetmaster to use.", default="ci-puppetmaster.openstack.org") options = parser.parse_args() client = get_client() if options.cert: cert = options.cert else: cert = options.name + ".pem" if not os.path.exists(os.path.join("/var/lib/puppet/ssl/private_keys", cert)): raise Exception("Please specify the name of a signed puppet cert.") flavors = [f for f in client.flavors.list() if f.ram >= options.ram] flavors.sort(lambda a, b: cmp(a.ram, b.ram)) flavor = flavors[0] print "Found flavor", flavor images = [i for i in client.images.list() if (options.image.lower() in i.name.lower() and not i.name.endswith('(Kernel)') and not i.name.endswith('(Ramdisk)'))] if len(images) > 1: print "Ambiguous image name; matches:" for i in images: print i.name sys.exit(1) if len(images) == 0: print "Unable to find matching image; image list:" for i in client.images.list(): print i.name sys.exit(1) image = images[0] print "Found image", image build_server(client, options.name, image, flavor, cert, options.environment, options.salt, options.server) dns.print_dns(client, options.name)
def main(): parser = argparse.ArgumentParser() parser.add_argument("name", help="server name") parser.add_argument("--ram", dest="ram", default=1024, type=int, help="minimum amount of ram") parser.add_argument("--image", dest="image", default="Ubuntu 12.04 LTS (Precise Pangolin)", help="image name") parser.add_argument("--environment", dest="environment", default="production", help="puppet environment name") parser.add_argument("--cert", dest="cert", help="name of signed puppet certificate file (e.g., " "hostname.example.com.pem)") parser.add_argument("--salt", dest="salt", action="store_true", help="Manage salt keys for this host.") options = parser.parse_args() client = get_client() if options.cert: cert = options.cert else: cert = options.name + ".pem" if not os.path.exists(os.path.join("/var/lib/puppet/ssl/private_keys", cert)): raise Exception("Please specify the name of a signed puppet cert.") flavors = [f for f in client.flavors.list() if f.ram >= options.ram] flavors.sort(lambda a, b: cmp(a.ram, b.ram)) flavor = flavors[0] print "Found flavor", flavor images = [i for i in client.images.list() if (options.image.lower() in i.name.lower() and not i.name.endswith('(Kernel)') and not i.name.endswith('(Ramdisk)'))] if len(images) > 1: print "Ambiguous image name; matches:" for i in images: print i.name sys.exit(1) if len(images) == 0: print "Unable to find matching image; image list:" for i in client.images.list(): print i.name sys.exit(1) image = images[0] print "Found image", image build_server(client, options.name, image, flavor, cert, options.environment, options.salt) dns.print_dns(client, options.name)
def main(): parser = argparse.ArgumentParser() parser.add_argument("name", help="server name") parser.add_argument("--flavor", dest="flavor", default='1GB', help="name (or substring) of flavor") parser.add_argument("--image", dest="image", default="Ubuntu 12.04 LTS (Precise Pangolin) (PVHVM)", help="image name") parser.add_argument("--environment", dest="environment", default="production", help="puppet environment name") parser.add_argument("--cert", dest="cert", help="name of signed puppet certificate file (e.g., " "hostname.example.com.pem)") parser.add_argument("--server", dest="server", help="Puppetmaster to use.", default="ci-puppetmaster.openstack.org") options = parser.parse_args() client = get_client() if options.cert: cert = options.cert else: cert = options.name + ".pem" if not os.path.exists(os.path.join("/var/lib/puppet/ssl/private_keys", cert)): raise Exception("Please specify the name of a signed puppet cert.") flavors = [f for f in client.flavors.list() if options.flavor in (f.name, f.id)] flavor = flavors[0] print "Found flavor", flavor images = [i for i in client.images.list() if (options.image.lower() in (i.id, i.name.lower()) and not i.name.endswith('(Kernel)') and not i.name.endswith('(Ramdisk)'))] if len(images) > 1: print "Ambiguous image name; matches:" for i in images: print i.name sys.exit(1) if len(images) == 0: print "Unable to find matching image; image list:" for i in client.images.list(): print i.name sys.exit(1) image = images[0] print "Found image", image build_server(client, options.name, image, flavor, cert, options.environment, options.server) dns.print_dns(client, options.name)
def main(): parser = argparse.ArgumentParser() parser.add_argument("name", help="server name") parser.add_argument("--flavor", dest="flavor", default='1GB', help="name (or substring) of flavor") parser.add_argument("--image", dest="image", default="Ubuntu 12.04 LTS (Precise Pangolin) (PVHVM)", help="image name") parser.add_argument("--environment", dest="environment", default="production", help="puppet environment name") parser.add_argument("--cert", dest="cert", help="name of signed puppet certificate file (e.g., " "hostname.example.com.pem)") parser.add_argument("--server", dest="server", help="Puppetmaster to use.", default="puppetmaster.openstack.org") parser.add_argument("--volume", dest="volume", help="UUID of volume to attach to the new server.", default=None) 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("--net-label", dest="net_label", default='', help="network label to attach instance to") parser.add_argument("--fip-pool", dest="floating_ip_pool", default=None, help="pool to assign floating IP from") options = parser.parse_args() client = get_client() if options.cert: cert = options.cert else: cert = options.name + ".pem" if not os.path.exists(os.path.join("/var/lib/puppet/ssl/private_keys", cert)): raise Exception("Please specify the name of a signed puppet cert.") flavors = [f for f in client.flavors.list() if options.flavor in (f.name, f.id)] flavor = flavors[0] print "Found flavor", flavor images = [i for i in client.images.list() if (options.image.lower() in (i.id, i.name.lower()) and not i.name.endswith('(Kernel)') and not i.name.endswith('(Ramdisk)'))] if len(images) > 1: print "Ambiguous image name; matches:" for i in images: print i.name sys.exit(1) if len(images) == 0: print "Unable to find matching image; image list:" for i in client.images.list(): print i.name sys.exit(1) image = images[0] print "Found image", image build_server(client, options.name, image, flavor, cert, options.environment, options.server, options.volume, options.keep, options.net_label, options.floating_ip_pool) dns.print_dns(client, options.name)
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("--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) dns.print_dns(cloud, server)
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("--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=True) 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) dns.print_dns(cloud, server) # Zero the ansible inventory cache so that next run finds the new server inventory_cache = '/var/cache/ansible-inventory/ansible-inventory.cache' if os.path.exists(inventory_cache): with open(inventory_cache, 'w'): pass # Remove cloud and region from the environment to work around a bug in occ expand_env = os.environ.copy() expand_env.pop('OS_CLOUD', None) expand_env.pop('OS_REGION_NAME', None) print subprocess.check_output( '/usr/local/bin/expand-groups.sh', env=expand_env, stderr=subprocess.STDOUT)
def main(): parser = argparse.ArgumentParser() parser.add_argument("name", help="server name") 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", default="production", help="puppet environment name") parser.add_argument("--cert", dest="cert", help="name of signed puppet certificate file (e.g., " "hostname.example.com.pem)") parser.add_argument("--server", dest="server", help="Puppetmaster to use.", default="puppetmaster.openstack.org") parser.add_argument("--volume", dest="volume", help="UUID of volume to attach to the new server.", 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("--net-label", dest="net_label", default='', help="network label to attach instance to") parser.add_argument("--fip-pool", dest="floating_ip_pool", default=None, help="pool to assign floating IP from") options = parser.parse_args() client = get_client() if options.cert: cert = options.cert else: cert = options.name + ".pem" if not os.path.exists( os.path.join("/var/lib/puppet/ssl/private_keys", cert)): raise Exception("Please specify the name of a signed puppet cert.") flavors = [ f for f in client.flavors.list() if options.flavor in (f.name, f.id) ] flavor = flavors[0] print "Found flavor", flavor images = [ i for i in client.images.list() if (options.image.lower() in ( i.id, i.name.lower()) and not i.name.endswith('(Kernel)') and not i.name.endswith('(Ramdisk)')) ] if len(images) > 1: print "Ambiguous image name; matches:" for i in images: print i.name sys.exit(1) if len(images) == 0: print "Unable to find matching image; image list:" for i in client.images.list(): print i.name sys.exit(1) image = images[0] print "Found image", image build_server(client, options.name, image, flavor, cert, options.environment, options.server, options.volume, options.keep, options.net_label, options.floating_ip_pool, options.boot_from_volume) dns.print_dns(client, options.name)
def main(): parser = argparse.ArgumentParser() parser.add_argument("name", help="server name") 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", default="production", help="puppet environment name") parser.add_argument("--cert", dest="cert", help="name of signed puppet certificate file (e.g., " "hostname.example.com.pem)") parser.add_argument("--server", dest="server", help="Puppetmaster to use.", default="puppetmaster.openstack.org") parser.add_argument("--volume", dest="volume", help="UUID of volume to attach to the new server.", 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("--net-label", dest="net_label", default='', help="network label to attach instance to") parser.add_argument("--fip-pool", dest="floating_ip_pool", default=None, help="pool to assign floating IP from") options = parser.parse_args() client = get_client() if options.cert: cert = options.cert else: cert = options.name + ".pem" if not os.path.exists(os.path.join("/var/lib/puppet/ssl/private_keys", cert)): raise Exception("Please specify the name of a signed puppet cert.") flavors = [f for f in client.flavors.list() if options.flavor in (f.name, f.id)] flavor = flavors[0] print "Found flavor", flavor images = [i for i in client.images.list() if (options.image.lower() in (i.id, i.name.lower()) and not i.name.endswith('(Kernel)') and not i.name.endswith('(Ramdisk)'))] if len(images) > 1: print "Ambiguous image name; matches:" for i in images: print i.name sys.exit(1) if len(images) == 0: print "Unable to find matching image; image list:" for i in client.images.list(): print i.name sys.exit(1) image = images[0] print "Found image", image if options.volume: print "The --volume option does not support cinder; until it does" print "it should not be used." sys.exit(1) build_server(client, options.name, image, flavor, cert, options.environment, options.server, options.volume, options.keep, options.net_label, options.floating_ip_pool, options.boot_from_volume) dns.print_dns(client, options.name) # Remove the ansible inventory cache so that next run finds the new # server if os.path.exists('/var/cache/ansible-inventory/ansible-inventory.cache'): os.unlink('/var/cache/ansible-inventory/ansible-inventory.cache') os.system('/usr/local/bin/expand-groups.sh')
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)
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("--volume", dest="volume", help="UUID of volume to attach to the new server.", 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=True) 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) dns.print_dns(cloud, server) # Zero the ansible inventory cache so that next run finds the new server inventory_cache = '/var/cache/ansible-inventory/ansible-inventory.cache' if os.path.exists(inventory_cache): with open(inventory_cache, 'w'): pass # Remove cloud and region from the environment to work around a bug in occ expand_env = os.environ.copy() expand_env.pop('OS_CLOUD', None) expand_env.pop('OS_REGION_NAME', None) print subprocess.check_output( '/usr/local/bin/expand-groups.sh', env=expand_env, stderr=subprocess.STDOUT)
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 18.04 LTS (Bionic Beaver) (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("--volume-size", dest="volume_size", help="Size of volume (GB) for --boot-from-volume", default="50") 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("--timeout", dest="timeout", help="Increase timeouts (default 600s)", type=int, default=600) parser.add_argument("--az", dest="availability_zone", default=None, help="AZ to boot in.") options = parser.parse_args() openstack.enable_logging(debug=options.verbose) cloud_kwargs = {} if options.region: cloud_kwargs['region_name'] = options.region cloud = openstack.connect(cloud=options.cloud, **cloud_kwargs) 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, options.volume_size, options.timeout) dns.print_dns(cloud, server)