Class: Command::DeployImage

Inherits:
Base
  • Object
show all
Defined in:
lib/command/deploy_image.rb

Constant Summary collapse

NAME =
"deploy-image"
OPTIONS =
[
  app_option(required: true),
  run_release_phase_option
].freeze
DESCRIPTION =
"Deploys the latest image to app workloads, and runs a release script (optional)"
LONG_DESCRIPTION =
<<~DESC
  - Deploys the latest image to app workloads
  - Runs a release script before deploying if `release_script` is specified in the `.controlplane/controlplane.yml` file and `--run-release-phase` is provided
  - The release script is run in the context of `cpflow run` with the latest image
  - If the release script exits with a non-zero code, the command will stop executing and also exit with a non-zero code
DESC

Constants inherited from Base

Base::ACCEPTS_EXTRA_OPTIONS, Base::ALL_VALIDATIONS, Base::DEFAULT_ARGS, Base::EXAMPLES, Base::HIDE, Base::REQUIRES_ARGS, Base::USAGE, Base::VALIDATIONS, Base::VALIDATIONS_WITHOUT_ADDITIONAL_OPTIONS, Base::VALIDATIONS_WITH_ADDITIONAL_OPTIONS, Base::WITH_INFO_HEADER

Instance Attribute Summary

Attributes inherited from Base

#config

Instance Method Summary collapse

Methods inherited from Base

add_app_identity_option, all_commands, all_options, all_options_by_key_name, app_option, #args_join, commit_option, common_options, #cp, cpu_option, detached_option, docker_context_option, domain_option, #ensure_docker_running!, entrypoint_option, image_option, #initialize, interactive_option, location_option, log_method_option, logs_limit_option, logs_since_option, memory_option, org_option, #progress, replica_option, #run_command_in_latest_image, #run_cpflow_command, run_release_phase_option, skip_confirm_option, skip_post_creation_hook_option, skip_pre_deletion_hook_option, skip_secret_access_binding_option, skip_secrets_setup_option, #step, #step_finish, terminal_size_option, trace_option, upstream_token_option, use_local_token_option, validations_option, verbose_option, version_option, wait_option, #with_retry, workload_option

Methods included from Helpers

normalize_command_name, normalize_option_name, random_four_digits, strip_str_and_validate

Constructor Details

This class inherits a constructor from Command::Base

Instance Method Details

#callObject

rubocop:disable Metrics/MethodLength



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/command/deploy_image.rb', line 20

def call # rubocop:disable Metrics/MethodLength
  run_release_script if config.options[:run_release_phase]

  deployed_endpoints = {}

  image = cp.latest_image
  if cp.fetch_image_details(image).nil?
    raise "Image '#{image}' does not exist in the Docker repository on Control Plane " \
          "(see https://console.cpln.io/console/org/#{config.org}/repository/#{config.app}). " \
          "Use `cpflow build-image` first."
  end

  config[:app_workloads].each do |workload|
    workload_data = cp.fetch_workload!(workload)
    workload_data.dig("spec", "containers").each do |container|
      next unless container["image"].match?(%r{^/org/#{config.org}/image/#{config.app}:})

      container_name = container["name"]
      step("Deploying image '#{image}' for workload '#{container_name}'") do
        cp.workload_set_image_ref(workload, container: container_name, image: image)
        deployed_endpoints[container_name] = endpoint_for_workload(workload_data)
      end
    end
  end

  progress.puts("\nDeployed endpoints:")
  deployed_endpoints.each do |workload, endpoint|
    progress.puts("  - #{workload}: #{endpoint}")
  end
end