Class: Environments::StopService
- Inherits:
-
BaseService
- Object
- BaseService
- Environments::StopService
- Defined in:
- app/services/environments/stop_service.rb
Instance Attribute Summary collapse
-
#ref ⇒ Object
readonly
Returns the value of attribute ref.
Attributes inherited from BaseService
#current_user, #params, #project
Instance Method Summary collapse
- #execute(environment) ⇒ Object
- #execute_for_branch(branch_name) ⇒ Object
- #execute_for_merge_request_pipeline(merge_request) ⇒ Object
-
#unsafe_execute!(environment) ⇒ Object
Stops the environment without checking user permissions.
Methods inherited from BaseService
Methods included from BaseServiceUtility
#deny_visibility_level, #event_service, #log_error, #log_info, #notification_service, #system_hook_service, #todo_service, #visibility_level
Methods included from Gitlab::Allowable
Constructor Details
This class inherits a constructor from BaseService
Instance Attribute Details
#ref ⇒ Object (readonly)
Returns the value of attribute ref.
5 6 7 |
# File 'app/services/environments/stop_service.rb', line 5 def ref @ref end |
Instance Method Details
#execute(environment) ⇒ Object
7 8 9 10 11 12 13 14 15 16 |
# File 'app/services/environments/stop_service.rb', line 7 def execute(environment) unless can?(current_user, :stop_environment, environment) return ServiceResponse.error( message: 'Unauthorized to stop the environment', payload: { environment: environment } ) end unsafe_execute!(environment) end |
#execute_for_branch(branch_name) ⇒ Object
43 44 45 46 47 48 49 |
# File 'app/services/environments/stop_service.rb', line 43 def execute_for_branch(branch_name) @ref = branch_name return unless @ref.present? environments.each { |environment| execute(environment) } end |
#execute_for_merge_request_pipeline(merge_request) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'app/services/environments/stop_service.rb', line 51 def execute_for_merge_request_pipeline(merge_request) return unless merge_request.diff_head_pipeline&.merge_request? created_environments = merge_request.created_environments if created_environments.any? created_environments.each do |env| # This log message can be removed with https://gitlab.com/gitlab-org/gitlab/-/issues/372965 Gitlab::AppJsonLogger.info( message: 'Running new dynamic environment stop logic', project_id: project.id, environment_id: env.id, merge_request_id: merge_request.id, pipeline_id: merge_request.diff_head_pipeline.id ) execute(env) end else environments_in_head_pipeline = merge_request.environments_in_head_pipeline(deployment_status: :success) environments_in_head_pipeline.each do |env| # This log message can be removed with https://gitlab.com/gitlab-org/gitlab/-/issues/372965 Gitlab::AppJsonLogger.info( message: 'Running legacy dynamic environment stop logic', project_id: project.id, environment_id: env.id, merge_request_id: merge_request.id, pipeline_id: merge_request.diff_head_pipeline.id ) execute(env) end end end |
#unsafe_execute!(environment) ⇒ Object
Stops the environment without checking user permissions. This should only be used if initiated by a system action and a user cannot be specified.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'app/services/environments/stop_service.rb', line 22 def unsafe_execute!(environment) if params[:force] actions = [] environment.stop_complete! else actions = environment.stop_with_actions! end if environment.stopped? || environment.stopping? delete_managed_resources(environment) ServiceResponse.success(payload: { environment: environment, actions: actions }) else ServiceResponse.error( message: 'Attempted to stop the environment but failed to change the status', payload: { environment: environment } ) end end |