2022-08-13 15:12:31 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module GoogleCloud
|
|
|
|
class BaseService < ::BaseService
|
|
|
|
protected
|
|
|
|
|
|
|
|
def google_oauth2_token
|
|
|
|
@params[:google_oauth2_token]
|
|
|
|
end
|
|
|
|
|
|
|
|
def gcp_project_id
|
|
|
|
@params[:gcp_project_id]
|
|
|
|
end
|
|
|
|
|
|
|
|
def environment_name
|
|
|
|
@params[:environment_name]
|
|
|
|
end
|
|
|
|
|
|
|
|
def google_api_client
|
|
|
|
@google_api_client_instance ||= GoogleApi::CloudPlatform::Client.new(google_oauth2_token, nil)
|
|
|
|
end
|
|
|
|
|
|
|
|
def unique_gcp_project_ids
|
|
|
|
filter_params = { key: 'GCP_PROJECT_ID' }
|
2022-08-27 11:52:29 +05:30
|
|
|
@unique_gcp_project_ids ||= ::Ci::VariablesFinder.new(project, filter_params).execute.map(&:value).uniq
|
2022-08-13 15:12:31 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
def group_vars_by_environment(keys)
|
|
|
|
filtered_vars = project.variables.filter { |variable| keys.include? variable.key }
|
|
|
|
filtered_vars.each_with_object({}) do |variable, grouped|
|
|
|
|
grouped[variable.environment_scope] ||= {}
|
|
|
|
grouped[variable.environment_scope][variable.key] = variable.value
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def create_or_replace_project_vars(environment_scope, key, value, is_protected, is_masked = false)
|
|
|
|
change_params = {
|
|
|
|
variable_params: {
|
|
|
|
key: key,
|
|
|
|
value: value,
|
|
|
|
environment_scope: environment_scope,
|
|
|
|
protected: is_protected,
|
|
|
|
masked: is_masked
|
|
|
|
}
|
|
|
|
}
|
|
|
|
existing_variable = find_existing_variable(environment_scope, key)
|
|
|
|
|
|
|
|
if existing_variable
|
|
|
|
change_params[:action] = :update
|
|
|
|
change_params[:variable] = existing_variable
|
|
|
|
else
|
|
|
|
change_params[:action] = :create
|
|
|
|
end
|
|
|
|
|
|
|
|
::Ci::ChangeVariableService.new(container: project, current_user: current_user, params: change_params).execute
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def find_existing_variable(environment_scope, key)
|
|
|
|
filter_params = { key: key, filter: { environment_scope: environment_scope } }
|
|
|
|
::Ci::VariablesFinder.new(project, filter_params).execute.first
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|