Attempt native imagebuilder image
Some checks reported errors
continuous-integration/drone/push Build encountered an error
Some checks reported errors
continuous-integration/drone/push Build encountered an error
This commit is contained in:
161
REMOVED/hack/generate-goss-specs.py
Executable file
161
REMOVED/hack/generate-goss-specs.py
Executable file
@@ -0,0 +1,161 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright 2021 The Kubernetes Authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import argparse
|
||||
import itertools
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
root_path = os.path.abspath(os.path.join(sys.argv[0], '..', '..'))
|
||||
|
||||
# Define what OS's are supported on which providers
|
||||
builds = {'amazon': ['amazon linux', 'centos', 'flatcar', 'ubuntu', 'windows'],
|
||||
'azure': ['centos', 'ubuntu', 'windows'],
|
||||
'ova': ['centos', 'photon', 'rhel', 'ubuntu', 'windows'],
|
||||
'oci':['ubuntu', 'oracle linux']}
|
||||
|
||||
def generate_goss(provider, system, versions, runtime, dryrun=False, save=False):
|
||||
cmd = ['goss', '-g', 'packer/goss/goss.yaml', '--vars', 'packer/goss/goss-vars.yaml']
|
||||
vars = {'OS': system, 'PROVIDER': provider,
|
||||
'OS_VERSION': versions['os'],
|
||||
'containerd_version': versions['containerd'],
|
||||
'docker_ee_version': versions['docker'],
|
||||
'distribution_version': versions['os'],
|
||||
'kubernetes_version': versions['k8s'],
|
||||
'kubernetes_deb_version': versions['k8s_deb'],
|
||||
'kubernetes_rpm_version': versions['k8s_rpm'],
|
||||
'kubernetes_source_type': 'pkg',
|
||||
'kubernetes_cni_version': versions['cni'],
|
||||
'kubernetes_cni_deb_version': versions['cni_deb'],
|
||||
'kubernetes_cni_rpm_version': versions['cni_rpm'],
|
||||
'kubernetes_cni_source_type': 'pkg',
|
||||
'runtime': runtime,
|
||||
'pause_image': versions['pause']}
|
||||
|
||||
if system == "windows" and versions.get('ssh_url') is not None:
|
||||
vars['ssh_source_url'] = versions['ssh_url']
|
||||
|
||||
# Build command
|
||||
cmd.extend(['--vars-inline', json.dumps(vars), 'render'])
|
||||
print('\nGenerating os: %s, provider: %s, runtime: %s' % (system, provider, runtime))
|
||||
print(cmd)
|
||||
|
||||
# Run command with output going to file
|
||||
if not dryrun:
|
||||
if save:
|
||||
out_dir = os.path.join(root_path, 'packer', 'goss')
|
||||
out_filename = '%s-%s-%s-goss-spec.yaml' % (provider,
|
||||
system.replace(' ', '-'), versions['k8s'])
|
||||
out_filename = os.path.join(out_dir, out_filename)
|
||||
with open(out_filename, 'w') as f:
|
||||
subprocess.run(cmd, cwd=root_path, stdout=f, check=True)
|
||||
else:
|
||||
subprocess.run(cmd, cwd=root_path, check=True)
|
||||
|
||||
|
||||
def read_json_file(filename):
|
||||
j = None
|
||||
with open(filename, 'r') as f:
|
||||
j = json.load(f)
|
||||
return j
|
||||
|
||||
|
||||
def main():
|
||||
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", "2004"]
|
||||
elif system == 'rhel':
|
||||
runtimes = ["containerd"]
|
||||
os_versions = ["7", "8"]
|
||||
elif system == 'photon':
|
||||
runtimes = ["containerd"]
|
||||
os_versions = ["3", "4"]
|
||||
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)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user