class Services::EnvironmentClusterCloner

Public Class Methods

call(environment:, environment_clone_name:, destination_cluster:, profile:) click to toggle source
# File lib/busbar_cli/services/environment_cluster_cloner.rb, line 3
def self.call(environment:, environment_clone_name:, destination_cluster:, profile:)
  new(environment, environment_clone_name, destination_cluster, profile).call
end
new(environment, environment_clone_name, destination_cluster, profile) click to toggle source
# File lib/busbar_cli/services/environment_cluster_cloner.rb, line 7
def initialize(environment, environment_clone_name, destination_cluster, profile)
  @environment = environment
  @environment_clone_name = environment_clone_name
  @destination_cluster = destination_cluster
  @profile = profile
end

Public Instance Methods

call() click to toggle source
# File lib/busbar_cli/services/environment_cluster_cloner.rb, line 14
def call
  raise_environment_clone_issue if environment_exist_on_destination?

  if app_exist_on_destination?
    clone_environment
  else
    clone_app_and_environment
  end

  puts 'Remember to scale the app components'
end

Private Instance Methods

app_exist_on_destination?() click to toggle source
# File lib/busbar_cli/services/environment_cluster_cloner.rb, line 91
def app_exist_on_destination?
  Services::Kube.configure_temporary_profile(@destination_cluster)

  app = AppsRepository.find(app_id: @environment.app_id)

  Services::Kube.configure_temporary_profile(@profile)

  return true if app
end
clone_app_and_environment() click to toggle source
# File lib/busbar_cli/services/environment_cluster_cloner.rb, line 49
def clone_app_and_environment
  app = AppsRepository.find(app_id: @environment.app_id)
  env = EnvironmentsRepository.find(environment_name: @environment.name, app_id: app.id)

  Services::Kube.configure_temporary_profile(@destination_cluster)

  environment_attributes = {
    name: @environment_clone_name || env.name,
    buildpack_id: env.buildpack_id,
    public: env.public,
    default_branch: env.default_branch,
    default_node_id: env.default_node_id,
    settings: env.settings
  }

  puts "Cloning #{@environment.app_id} #{@environment.name} from #{@profile} to " \
       "#{@environment.app_id} #{@environment_clone_name || env.name} to #{@destination_cluster}, " \
       'stand by...'

  Services::AppCreator.call(
    id: app.id,
    buildpack_id: app.buildpack_id,
    repository: app.repository,
    default_branch: app.default_branch,
    default_env: nil,
    environment: environment_attributes
  )
end
clone_environment() click to toggle source
# File lib/busbar_cli/services/environment_cluster_cloner.rb, line 28
def clone_environment
  env = EnvironmentsRepository.find(
    environment_name: @environment.name,
    app_id: @environment.app_id
  )

  Services::Kube.configure_temporary_profile(@destination_cluster)

  puts "Cloning #{@environment.name} from #{@environment.app_id} #{@profile} to " \
       "#{@environment.app_id} on #{@destination_cluster}, stand by..."

  Services::EnvironmentCreator.call(
    app_id: @environment.app_id,
    name: @environment_clone_name || env.name,
    buildpack_id: env.buildpack_id,
    public: env.public,
    default_branch: env.default_branch,
    settings: env.settings
  )
end
environment_exist_on_destination?() click to toggle source
# File lib/busbar_cli/services/environment_cluster_cloner.rb, line 78
def environment_exist_on_destination?
  Services::Kube.configure_temporary_profile(@destination_cluster)

  env = EnvironmentsRepository.find(
    environment_name: (@environment_clone_name || @environment.name),
    app_id: @environment.app_id
  )

  Services::Kube.configure_temporary_profile(@profile)

  return true if env
end
raise_environment_clone_issue() click to toggle source
# File lib/busbar_cli/services/environment_cluster_cloner.rb, line 101
def raise_environment_clone_issue
  puts "the #{@environment_clone_name || @environment.name} already exist in the #{@destination_cluster} cluster " \
    'please, try a different name'

  exit 0
end