def command_push(args): image_name = args.microservice_name if not image_name: raise ArmadaCommandException('ERROR: Please specify microservice_name argument' ' or set MICROSERVICE_NAME environment variable') dockyard_alias = args.dockyard image = ArmadaImage(image_name, dockyard_alias) if '/' not in image_name: if not ArmadaImage(image.microservice_name, 'local').exists(): raise Exception('Image {image.microservice_name} does not exist. Typo?'.format(**locals())) dockyard_string = image.dockyard_address or '' dockyard_string += ' (alias: {dockyard_alias})'.format(**locals()) if dockyard_alias else '' print('Pushing microservice {image.microservice_name} to dockyard: {dockyard_string}...'.format( **locals())) tag_command = 'docker tag -f {image.microservice_name} {image.image_path}'.format(**locals()) assert execute_local_command(tag_command, stream_output=True, retries=1)[0] == 0 else: # If command was called with [docker_registry_address]/[microservice_name] and no -d/--dockyard, then simply # mimic 'docker push' behavior (without tagging). print('Pushing image {image}...'.format(**locals())) dockyard_dict = dockyard.get_dockyard_dict(dockyard_alias) did_print = print_dockyard_unavailability_warning(dockyard_dict.get("address"), dockyard_dict.get("user"), dockyard_dict.get("password"), "ERROR! Cannot push to dockyard!") retries = 0 if did_print else 3 login_to_dockyard(dockyard_alias) push_command = 'docker push {image.image_path}'.format(**locals()) assert execute_local_command(push_command, stream_output=True, retries=retries)[0] == 0
def command_build(args): microservice_name = args.microservice_name or os.environ.get('MICROSERVICE_NAME') if not microservice_name: raise ValueError('No microservice name supplied.') if not os.path.exists('Dockerfile'): print('ERROR: Dockerfile not found in current directory', file=sys.stderr) return base_image_name = _get_base_image_name() dockyard_alias = args.dockyard or dockyard.get_dockyard_alias(base_image_name, is_run_locally=True) base_image = ArmadaImage(base_image_name, dockyard_alias) if base_image.is_remote(): if not base_image.exists(): if dockyard_alias == DOCKYARD_FALLBACK_ALIAS: was_fallback_dockyard = True else: print('Base image {base_image} not found. Searching in official Armada dockyard...'.format(**locals())) dockyard_alias = DOCKYARD_FALLBACK_ALIAS base_image = ArmadaImage(base_image_name, dockyard_alias) was_fallback_dockyard = False if was_fallback_dockyard or not base_image.exists(): print('Base image {base_image} not found. Aborting.'.format(**locals())) sys.exit(1) dockyard_dict = dockyard.get_dockyard_dict(dockyard_alias) did_print = print_dockyard_unavailability_warning(dockyard_dict.get("address"), dockyard_dict.get("user"), dockyard_dict.get("password"), "ERROR! Cannot pull from dockyard!") retries = 0 if did_print else 3 base_image_path = base_image.image_path pull_command = 'docker pull {base_image_path}'.format(**locals()) assert execute_local_command(pull_command, stream_output=True, retries=retries)[0] == 0 if base_image_path != base_image_name: tag_command = 'docker tag -f {base_image_path} {base_image_name}'.format(**locals()) assert execute_local_command(tag_command, stream_output=True, retries=1)[0] == 0 build_command = 'docker build -t {microservice_name} .'.format(**locals()) assert execute_local_command(build_command, stream_output=True)[0] == 0