def download_template_scripts(self, template_name, revision, force_overwrite=False): """Download all scripts of a template to local scripts folder. :param str template_name: "param str revision: :param bool force_overwrite: if True, will download the script even if it already exists. """ for script_file in ScriptFile: remote_script_url = \ self._get_remote_script_url(template_name, revision, script_file) local_script_filepath = ltm.get_script_filepath( template_name, revision, script_file) download_file(url=remote_script_url, filepath=local_script_filepath, force_overwrite=force_overwrite, logger=self.logger, msg_update_callback=self.msg_update_callback) # Set Read,Write permission only for the owner if os.name != 'nt': os.chmod(local_script_filepath, stat.S_IRUSR | stat.S_IWUSR)
def _upload_source_ova(self): """Upload the base OS ova to catalog.""" if catalog_item_exists(org=self.org, catalog_name=self.catalog_name, catalog_item_name=self.ova_name): msg = f"Found ova file '{self.ova_name}' in catalog " \ f"'{self.catalog_name}'" self.msg_update_callback.general(msg) self.logger.info(msg) else: ova_filepath = f"cse_cache/{self.ova_name}" download_file(url=self.ova_href, filepath=ova_filepath, sha256=self.ova_sha256, logger=self.logger, msg_update_callback=self.msg_update_callback) upload_ova_to_catalog(self.client, self.catalog_name, ova_filepath, org=self.org, logger=self.logger, msg_update_callback=self.msg_update_callback)
def download_template_scripts(self, template_name, revision, force_overwrite=False): """Download all scripts of a template to local scripts folder. :param str template_name: "param str revision: :param bool force_overwrite: if True, will download the script even if it already exists. """ for script_file in ScriptFile: remote_script_url = \ self._get_remote_script_url(template_name, revision, script_file) local_script_filepath = get_local_script_filepath( template_name, revision, script_file) download_file(url=remote_script_url, filepath=local_script_filepath, force_overwrite=force_overwrite, logger=self.logger, msg_update_callback=self.msg_update_callback)
def create_template(ctx, client, config, template_config, update=False, no_capture=False, ssh_key=None, org=None, vdc=None): """Handles template creation phase during CSE installation. :param click.core.Context ctx: click context object. :param pyvcloud.vcd.client.Client client: :param dict config: CSE config. :param dict template_config: specific template section of @config. :param bool update: if True and templates already exist in vCD, overwrites existing templates. :param bool no_capture: if True, temporary vApp will not be captured or destroyed, so the user can ssh into the VM and debug. :param str ssh_key: public ssh key to place into the template vApp(s). :param pyvcloud.vcd.org.Org org: specific org to use. If None, uses org specified in @config. :param pyvcloud.vcd.vdc.VDC vdc: specific vdc to use. If None, uses vdc specified in @config. """ if org is None: org = get_org(client, org_name=config['broker']['org']) if vdc is None: vdc = get_vdc(client, config['broker']['vdc'], org=org) ctx.obj = {'client': client} catalog_name = config['broker']['catalog'] template_name = template_config['catalog_item'] vapp_name = template_config['temp_vapp'] ova_name = template_config['source_ova_name'] if not update and catalog_item_exists(org, catalog_name, template_name): msg = f"Found template '{template_name}' in catalog '{catalog_name}'" click.secho(msg, fg='green') LOGGER.info(msg) return # if update flag is set, delete existing template/ova file/temp vapp if update: msg = f"--update flag set. If template, source ova file, " \ f"and temporary vApp exist, they will be deleted" click.secho(msg, fg='yellow') LOGGER.info(msg) try: org.delete_catalog_item(catalog_name, template_name) wait_for_catalog_item_to_resolve(client, catalog_name, template_name, org=org) org.reload() msg = "Deleted vApp template" click.secho(msg, fg='green') LOGGER.info(msg) except EntityNotFoundException: pass try: org.delete_catalog_item(catalog_name, ova_name) wait_for_catalog_item_to_resolve(client, catalog_name, ova_name, org=org) org.reload() msg = "Deleted ova file" click.secho(msg, fg='green') LOGGER.info(msg) except EntityNotFoundException: pass try: task = vdc.delete_vapp(vapp_name, force=True) stdout(task, ctx=ctx) vdc.reload() msg = "Deleted temporary vApp" click.secho(msg, fg='green') LOGGER.info(msg) except EntityNotFoundException: pass # if needed, upload ova and create temp vapp msg = f"Creating template '{template_name}' in catalog '{catalog_name}'" click.secho(msg, fg='yellow') LOGGER.info(msg) temp_vapp_exists = True try: vapp = VApp(client, resource=vdc.get_vapp(vapp_name)) msg = f"Found vApp '{vapp_name}'" click.secho(msg, fg='green') LOGGER.info(msg) except EntityNotFoundException: temp_vapp_exists = False # flag is used to hide previous try/except error if an error occurs below if not temp_vapp_exists: if catalog_item_exists(org, catalog_name, ova_name): msg = f"Found ova file '{ova_name}' in catalog '{catalog_name}'" click.secho(msg, fg='green') LOGGER.info(msg) else: # download/upload files to catalog if necessary ova_filepath = f"cse_cache/{ova_name}" download_file(template_config['source_ova'], ova_filepath, sha256=template_config['sha256_ova'], logger=LOGGER) upload_ova_to_catalog(client, catalog_name, ova_filepath, org=org, logger=LOGGER) vapp = _create_temp_vapp(ctx, client, vdc, config, template_config, ssh_key) if no_capture: msg = f"'--no-capture' flag set. " \ f"Not capturing vApp '{vapp.name}' as a template" click.secho(msg, fg='yellow') LOGGER.info(msg) return # capture temp vapp as template msg = f"Creating template '{template_name}' from vApp '{vapp.name}'" click.secho(msg, fg='yellow') LOGGER.info(msg) capture_vapp_to_template(ctx, vapp, catalog_name, template_name, org=org, desc=template_config['description'], power_on=not template_config['cleanup']) msg = f"Created template '{template_name}' from vApp '{vapp_name}'" click.secho(msg, fg='green') LOGGER.info(msg) # delete temp vapp if template_config['cleanup']: msg = f"Deleting vApp '{vapp_name}'" click.secho(msg, fg='yellow') LOGGER.info(msg) task = vdc.delete_vapp(vapp_name, force=True) stdout(task, ctx=ctx) vdc.reload() msg = f"Deleted vApp '{vapp_name}'" click.secho(msg, fg='green') LOGGER.info(msg)