def do_command()

in ebcli/controllers/migrate.py [0:0]


    def do_command(self):
        if not sys.platform.startswith("win"):
            raise NotSupportedError("'eb migrate' is only supported on Windows")
        validate_iis_version_greater_than_7_0()
        verbose = self.app.pargs.verbose

        site_names = self.app.pargs.sites
        env_name = self.app.pargs.environment_name
        app_name = self.app.pargs.application_name
        platform = self.app.pargs.platform
        instance_type = self.app.pargs.instance_type
        instance_profile = self.app.pargs.instance_profile
        service_role = self.app.pargs.service_role
        ebs_snapshots = self.app.pargs.ebs_snapshots
        keyname = self.app.pargs.keyname
        interactive = self.app.pargs.interactive
        cname = self.app.pargs.cname
        region = self.app.pargs.region
        archive_only = self.app.pargs.archive_only
        on_prem_mode = self.app.pargs.on_prem_mode
        tags = self.app.pargs.tags
        tags = tagops.get_and_validate_tags(tags)
        copy_firewall_config = self.app.pargs.copy_firewall_config
        encrypt_ebs_volumes = self.app.pargs.encrypt_ebs_volumes
        ssl_certificate = self.app.pargs.ssl_certificates
        archive = self.app.pargs.archive
        if archive and archive_only:
            raise ValueError("Cannot use --archive-only with --archive-dir together.")
        vpc_config = self.app.pargs.vpc_config

        sites = establish_candidate_sites(site_names, interactive)
        on_an_ec2_instance = True
        try:
            environment_vpc, _region, instance_id, instance_tags = (
                construct_environment_vpc_config(on_prem_mode, verbose)
            )
            on_an_ec2_instance = not not instance_id
        except NotAnEC2Instance:
            environment_vpc, _region, instance_id, instance_tags = (
                dict(),
                None,
                list(),
                None,
            )
            on_an_ec2_instance = False
        if vpc_config:
            environment_vpc = load_environment_vpc_from_vpc_config(vpc_config)
        region = _region or establish_region(region, interactive, app_name, platform)
        LOG.debug("Writing region_name to .elasticbeanstalk/config")
        fileoperations.write_config_setting("global", "region_name", region)
        tags = tags or instance_tags
        snapshots_string = generate_snapshots_string(ebs_snapshots)

        app_name = establish_app_name(app_name, interactive, sites)
        env_name = establish_env_name(env_name, app_name, interactive, sites)
        platform = establish_platform(platform, interactive)
        process_keyname(keyname)

        listener_configs = []
        if not _arr_enabled():
            listener_configs = get_listener_configs(sites, ssl_certificate)
        all_ports = get_all_ports(sites)
        ec2_security_group = None
        load_balancer_security_group = None
        if on_an_ec2_instance and copy_firewall_config:
            load_balancer_security_group, ec2_security_group = (
                ec2.establish_security_group(all_ports, env_name, environment_vpc["id"])
            )

        source_bundle_zip = None
        upload_target_dir = None
        latest_migration_run_path = None
        if not archive:
            latest_migration_run_path = setup_migrations_dir(verbose)
            upload_target_dir = os.path.join(latest_migration_run_path, "upload_target")
            os.makedirs(upload_target_dir, exist_ok=True)
            self.package_sites(
                sites, latest_migration_run_path, upload_target_dir, verbose
            )
            write_ebdeploy_utility_script(upload_target_dir)
            if _arr_enabled():
                export_arr_config(upload_target_dir, verbose)
            if copy_firewall_config:
                write_copy_firewall_config_script(upload_target_dir, sites)
            fileoperations.zip_up_folder(upload_target_dir, upload_target_zip_path())
        else:
            if zipfile.is_zipfile(archive):
                source_bundle_zip = archive
            else:
                upload_target_dir = archive
                latest_migration_run_path = os.path.dirname(upload_target_dir)
                self.package_sites(
                    sites, latest_migration_run_path, upload_target_dir, verbose
                )
                fileoperations.zip_up_folder(
                    upload_target_dir, upload_target_zip_path()
                )
        if listener_configs and latest_migration_run_path:
            with open(
                os.path.join(latest_migration_run_path, "listener_configs.json"), "w"
            ) as file:
                listener_configs_json = {"listener_configs": listener_configs}
                json.dump(listener_configs_json, file, indent=2)
        if archive_only and upload_target_dir:
            generate_upload_target_archive(upload_target_dir, env_name, region)
            return

        self.create_app_version_and_environment(
            app_name=app_name,
            source_bundle_zip=source_bundle_zip,
            instance_profile=instance_profile,
            service_role=service_role,
            instance_type=instance_type,
            cname=cname,
            env_name=env_name,
            encrypt_ebs_volumes=encrypt_ebs_volumes,
            environment_vpc=environment_vpc,
            ec2_security_group=ec2_security_group,
            platform=platform,
            keyname=keyname,
            tags=tags,
            snapshots_string=snapshots_string,
            listener_configs=listener_configs,
            load_balancer_security_group=load_balancer_security_group,
            interactive=interactive,
        )