Class: Command::MaintenanceOn
- Defined in:
- lib/command/maintenance_on.rb
Constant Summary collapse
- NAME =
"maintenance:on"
- OPTIONS =
[ app_option(required: true), domain_option ].freeze
- DESCRIPTION =
"Enables maintenance mode for an app"
- LONG_DESCRIPTION =
<<~DESC - Enables maintenance mode for an app - Specify the one-off workload through `one_off_workload` in the `.controlplane/controlplane.yml` file - Optionally specify the maintenance workload through `maintenance_workload` in the `.controlplane/controlplane.yml` file (defaults to 'maintenance') - Maintenance mode is only supported for domains that use path based routing mode and have a route configured for the prefix '/' on either port 80 or 443 DESC
Constants inherited from Base
Base::ACCEPTS_EXTRA_OPTIONS, Base::DEFAULT_ARGS, Base::EXAMPLES, Base::HIDE, Base::NO_IMAGE_AVAILABLE, Base::REQUIRES_ARGS, Base::USAGE, 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
all_commands, all_options, all_options_by_key_name, #app_identity, #app_identity_link, #app_image_link, #app_location_link, app_option, #app_secrets, #app_secrets_policy, #args_join, clean_on_failure_option, commit_option, common_options, #cp, domain_option, #ensure_workload_deleted, #extract_image_commit, image_option, #initialize, #latest_image, #latest_image_from, #latest_image_next, location_option, org_option, #perform!, #progress, run_release_phase_option, skip_confirm_option, skip_secret_access_binding_option, #step, #step_error, #step_finish, terminal_size_option, trace_option, upstream_token_option, use_local_token_option, verbose_option, version_option, #wait_for_replica, #wait_for_workload, wait_option, workload_option
Methods included from Helpers
#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
18 19 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 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/command/maintenance_on.rb', line 18 def call # rubocop:disable Metrics/MethodLength one_off_workload = config[:one_off_workload] maintenance_workload = config.current[:maintenance_workload] || "maintenance" domain_data = if config.domain cp.fetch_domain(config.domain) else cp.find_domain_for([one_off_workload, maintenance_workload]) end unless domain_data raise "Can't find domain. " \ "Maintenance mode is only supported for domains that use path based routing mode " \ "and have a route configured for the prefix '/' on either port 80 or 443." end domain = domain_data["name"] if cp.domain_workload_matches?(domain_data, maintenance_workload) progress.puts("Maintenance mode is already enabled for app '#{config.app}'.") return end cp.fetch_workload!(maintenance_workload) # Start maintenance workload Cpl::Cli.start(["ps:start", "-a", config.app, "-w", maintenance_workload, "--wait"]) progress.puts # Switch domain workload step("Switching workload for domain '#{domain}' to '#{maintenance_workload}'") do cp.set_domain_workload(domain_data, maintenance_workload) # Give it a bit of time for the domain to update sleep 30 end progress.puts # Stop all other workloads Cpl::Cli.start(["ps:stop", "-a", config.app, "--wait"]) progress.puts("\nMaintenance mode enabled for app '#{config.app}'.") end |