def get_best_version(arg_name, default_arg_name, replicated_channel, app_slug, app_channel, scheduler=None): if app_slug and app_channel: app_version = get_version_for_app(app_slug, app_channel, replicated_channel, scheduler=scheduler) if app_version: return app_version arg_version = get_arg(arg_name, get_arg(default_arg_name, None)) if arg_version: # versions were different between products if semver.lt(arg_version, '2.1.0', loose=False): return arg_version # this only checks replicated_v2 product version if (replicated_channel == 'stable' and get_arg('build', '') == 'prestable'): # prestable builds use beta channel version if is_valid_replicated_version(arg_version, 'beta', scheduler=scheduler): return arg_version elif is_valid_replicated_version(arg_version, replicated_channel, scheduler=scheduler): return arg_version raise Exception('version {} does not exist'.format(arg_version)) return get_current_replicated_version(replicated_channel, scheduler=scheduler)
def comparison(): # [version1, version2] # version1 should be greater than version2 tests = [['0.0.0', '0.0.0-foo'], ['0.0.1', '0.0.0'], ['1.0.0', '0.9.9'], ['0.10.0', '0.9.0'], ['0.99.0', '0.10.0'], ['2.0.0', '1.2.3'], ['v0.0.0', '0.0.0-foo'], ['v0.0.1', '0.0.0'], ['v1.0.0', '0.9.9'], ['v0.10.0', '0.9.0'], ['v0.99.0', '0.10.0'], ['v2.0.0', '1.2.3'], ['0.0.0', 'v0.0.0-foo'], ['0.0.1', 'v0.0.0'], ['1.0.0', 'v0.9.9'], ['0.10.0', 'v0.9.0'], ['0.99.0', 'v0.10.0'], ['2.0.0', 'v1.2.3'], ['1.2.3', '1.2.3-asdf'], ['1.2.3', '1.2.3-4'], ['1.2.3', '1.2.3-4-foo'], ['1.2.3-5-foo', '1.2.3-5'], ['1.2.3-5', '1.2.3-4'], ['1.2.3-5-foo', '1.2.3-5-Foo'], ['3.0.0', '2.7.2+asdf'], ['1.2.3-a.10', '1.2.3-a.5'], ['1.2.3-a.b', '1.2.3-a.5'], ['1.2.3-a.b', '1.2.3-a'], ['1.2.3-a.b.c.10.d.5', '1.2.3-a.b.c.5.d.100'] ] for v in tests: v0 = v[0] v1 = v[1] ok(gt(v0, v1), "gt('" + v0 + "', '" + v1 + "')") ok(lt(v1, v0), "lt('" + v1 + "', '" + v0 + "')") ok(not gt(v1, v0), "!gt('" + v1 + "', '" + v0 + "')") ok(not lt(v0, v1), "!lt('" + v0 + "', '" + v1 + "')") ok(eq(v0, v0), "eq('" + v0 + "', '" + v0 + "')") ok(eq(v1, v1), "eq('" + v1 + "', '" + v1 + "')") ok(ne(v0, v1), "ne('" + v0 + "', '" + v1 + "')")
def get_replicated_compose_v2(replicated_channel=None, app_slug=None, app_channel=None): replicated_channel = replicated_channel if replicated_channel else 'stable' print('Looking up tags for:', replicated_channel, app_slug, app_channel, file=sys.stderr) scheduler = constant.SCHEDULER_SWARM replicated_version = helpers.get_replicated_version(replicated_channel, app_slug, app_channel, scheduler=scheduler) replicated_ui_version = helpers.get_replicated_ui_version( replicated_channel, app_slug, app_channel, scheduler=scheduler) replicated_operator_version = helpers.get_replicated_operator_version( replicated_channel, app_slug, app_channel, scheduler=scheduler) replicated_tag = '{}-{}'.format(replicated_channel, replicated_version) replicated_ui_tag = '{}-{}'.format(replicated_channel, replicated_ui_version) replicated_operator_tag = '{}-{}'.format(replicated_channel, replicated_operator_version) data_dir_path = helpers.get_arg('data_dir_path', '/tmp') log_level = helpers.get_arg('log_level', '') operator_tags = helpers.get_arg('operator_tags', 'local') public_address = helpers.get_arg('public_address', '') ui_bind_port = helpers.get_arg('ui_bind_port', '') if semver.lt(replicated_version, '2.10.0', loose=False): tmpl_file = 'swarm/docker-compose-v2-legacy.yml' else: tmpl_file = 'swarm/docker-compose-v2.yml' response = render_template( tmpl_file, **helpers.template_args( channel_name=replicated_channel, replicated_tag=replicated_tag, replicated_ui_tag=replicated_ui_tag, replicated_operator_tag=replicated_operator_tag, # query params data_dir_path=data_dir_path, log_level=log_level, operator_tags=operator_tags, public_address=public_address, ui_bind_port=ui_bind_port, )) if helpers.get_arg('accept', None) == 'text': return Response(response, mimetype='text/plain') return Response(response, mimetype='application/x-yaml')
def equality(): # [version1, version2] # version1 should be equivalent to version2 tests = [['1.2.3', 'v1.2.3'], ['1.2.3', '=1.2.3'], ['1.2.3', 'v 1.2.3'], ['1.2.3', '= 1.2.3'], ['1.2.3', ' v1.2.3'], ['1.2.3', ' =1.2.3'], ['1.2.3', ' v 1.2.3'], ['1.2.3', ' = 1.2.3'], ['1.2.3-0', 'v1.2.3-0'], ['1.2.3-0', '=1.2.3-0'], ['1.2.3-0', 'v 1.2.3-0'], ['1.2.3-0', '= 1.2.3-0'], ['1.2.3-0', ' v1.2.3-0'], ['1.2.3-0', ' =1.2.3-0'], ['1.2.3-0', ' v 1.2.3-0'], ['1.2.3-0', ' = 1.2.3-0'], ['1.2.3-1', 'v1.2.3-1'], ['1.2.3-1', '=1.2.3-1'], ['1.2.3-1', 'v 1.2.3-1'], ['1.2.3-1', '= 1.2.3-1'], ['1.2.3-1', ' v1.2.3-1'], ['1.2.3-1', ' =1.2.3-1'], ['1.2.3-1', ' v 1.2.3-1'], ['1.2.3-1', ' = 1.2.3-1'], ['1.2.3-beta', 'v1.2.3-beta'], ['1.2.3-beta', '=1.2.3-beta'], ['1.2.3-beta', 'v 1.2.3-beta'], ['1.2.3-beta', '= 1.2.3-beta'], ['1.2.3-beta', ' v1.2.3-beta'], ['1.2.3-beta', ' =1.2.3-beta'], ['1.2.3-beta', ' v 1.2.3-beta'], ['1.2.3-beta', ' = 1.2.3-beta'], ['1.2.3-beta+build', ' = 1.2.3-beta+otherbuild'], ['1.2.3+build', ' = 1.2.3+otherbuild'], ['1.2.3-beta+build', '1.2.3-beta+otherbuild'], ['1.2.3+build', '1.2.3+otherbuild'], [' v1.2.3+build', '1.2.3+otherbuild'] ] for v in tests: v0 = v[0] v1 = v[1] ok(eq(v0, v1), "eq('" + v0 + "', '" + v1 + "')") ok(not ne(v0, v1), "!ne('" + v0 + "', '" + v1 + "')") ok(not gt(v0, v1), "!gt('" + v0 + "', '" + v1 + "')") ok(ge(v0, v1), "ge('" + v0 + "', '" + v1 + "')") ok(not lt(v0, v1), "!lt('" + v0 + "', '" + v1 + "')") ok(le(v0, v1), "le('" + v0 + "', '" + v1 + "')")
def get_additional_etc_mounts(version_tag): if semver.lt(version_tag, '2.5.0', loose=False): return ('-v /etc/replicated.conf:/etc/replicated.conf ' '-v /etc/replicated.alias:/etc/replicated.alias ' '-v /etc/docker/certs.d:/host/etc/docker/certs.d') return ''
def get_root_volume_mount(version_tag): if semver.lt(version_tag, '2.1.0-alpha', loose=False): return '-v /:/replicated/host:ro' return ''
def get_premkit_data_dir(replicated_tag): if semver.lt(replicated_tag, '2.13.0', loose=False): return '/premkit/data' elif semver.lt(replicated_tag, '2.13.1', loose=False): return '/tmp/premkit-data' return ''
def get_port_range(replicated_tag): if semver.lt(replicated_tag, '2.0.1654', loose=False): return '9874-9880:9874-9880/tcp' return '9874-9879:9874-9879/tcp'
def test_lt(v0, v1, loose): from semver import lt assert not (lt(v0, v1, loose)) is True
def snapshots_use_overlay(replicated_version): if semver.lt(replicated_version, '2.22.0', loose=False): return False return True
def test_nlt(v0, v1, loose): from semver import lt assert (not lt(v0, v1, loose)) is True
def test_lt(v0, v1, loose): from semver import lt assert lt(v1, v0, loose) is True
def get_operator_additional_etc_mounts(version_tag): if semver.lt(version_tag, '2.5.0', loose=False): return '-v /etc/docker/certs.d:/host/etc/docker/certs.d' return ''
def get_replicated_username(version_tag): if semver.lt(version_tag, '2.5.0', loose=False): return 'root' return 'replicated'