def METHOD_NAME():
    parser = argparse.ArgumentParser(
        description='Generates GOSS specs. By default, generates all '
                    'possible specs to stdout.',
        usage='%(prog)s [-h] [--provider {amazon,azure,ova}] '
              '[--os {al2,centos,flatcar,photon,rhel,ubuntu,windows}]')
    parser.add_argument('--provider',
                        choices=['amazon', 'azure', 'ova','oci'],
                        action='append',
                        default=None,
                        help='One provider. Can be used multiple times')
    parser.add_argument('--os',
                        choices=['al2', 'centos', 'flatcar', 'photon', 'rhel', 'ubuntu', 'windows'],
                        action='append',
                        default=None,
                        help='One OS. Can be used multiple times')
    parser.add_argument('--dry-run',
                        action='store_true',
                        help='Do not run GOSS, just print GOSS commands')
    parser.add_argument('--write',
                        action='store_true',
                        help='Write GOSS specs to file')
    args = parser.parse_args()
    versions = {}
    # Load JSON files with Version info
    cni = read_json_file(os.path.join(root_path, 'packer', 'config', 'cni.json'))
    versions['cni'] = cni['kubernetes_cni_semver'].lstrip('v')
    versions['cni_deb'] = cni['kubernetes_cni_deb_version']
    versions['cni_rpm'] = cni['kubernetes_cni_rpm_version'].split('-')[0]
    k8s = read_json_file(os.path.join(root_path, 'packer', 'config', 'kubernetes.json'))
    versions['k8s'] = k8s['kubernetes_semver'].lstrip('v')
    versions['k8s_deb'] = k8s['kubernetes_deb_version']
    versions['k8s_rpm'] = k8s['kubernetes_rpm_version'].split('-')[0]
    containerd = read_json_file(os.path.join(root_path, 'packer', 'config', 'containerd.json'))
    versions['containerd'] = containerd['containerd_version']
    docker = read_json_file(os.path.join(root_path, 'packer', 'config', 'windows', 'docker.json'))
    versions['docker'] = docker['docker_ee_version']
    wincommon = read_json_file(os.path.join(root_path, 'packer', 'config', 'windows', 'common.json'))
    versions['ssh_url'] = wincommon['ssh_source_url']
    common = read_json_file(os.path.join(root_path, 'packer', 'config', 'common.json'))
    versions['pause'] = common['pause_image']
    providers = builds.keys()
    if args.provider is not None:
        providers = args.provider
    # Generate a unique list of all possible OS's if a choice wasn't made
    oss = args.os
    if args.os is None:
        oss = []
        for x in list(builds.values()):
            for o in x:
                oss.append(o)
        oss = list(set(oss))
    oss = [sub.replace('al2', 'amazon linux') for sub in oss]
    # Generate spec for each valid permutation
    for provider, system in itertools.product(providers, oss):
        if system in builds[provider]:
            if system == 'windows':
                runtimes = ["docker-ee","containerd"]
                os_versions = ["2019", "2022"]
            elif system == 'rhel':
                runtimes = ["containerd"]
                os_versions = ["7", "8"]
            elif system == 'photon':
                runtimes = ["containerd"]
                os_versions = ["3", "4", "5"]
            else: 
                runtimes = ["containerd"]
                os_versions = [""]
            for runtime in runtimes:
                for version in os_versions:
                    versions["os"] = version
                    generate_goss(provider, system, versions, runtime, args.dry_run, args.write)