Class: Command::DeployImage
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
Instance Method Summary collapse
-
#call ⇒ Object
rubocop:disable Metrics/MethodLength.
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
#call ⇒ Object
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.[: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 |