class DTK::Client::Operation::Service::AddComponent

Public Class Methods

execute(args = Args.new) click to toggle source
# File lib/client/operation/service/add_component.rb, line 21
def self.execute(args = Args.new)
  wrap_operation(args) do |args|
    service_instance     = args.required(:service_instance)
    component_ref        = args.required(:component_ref)
    version              = args[:version]
    namespace            = args[:namespace]
    parent_node          = args[:parent_node]
    service_instance_dir = args[:service_instance_dir]

    query_string_hash = QueryStringHash.new(service_instance: service_instance, component_ref: component_ref, version: version, namespace: namespace, parent_node: parent_node)
    response = rest_post "#{BaseRoute}/add_component", query_string_hash

    nested_modules = response.required(:nested_modules)
    if nested_modules && !nested_modules.empty?
      clone_args = {
        :base_module      => response.required(:base_module),
        :nested_modules   => nested_modules,
        :service_instance => service_instance,
        :remove_existing  => true,
        :repo_dir         => service_instance_dir
      }
      ClientModuleDir::ServiceInstance.clone_nested_modules(clone_args)
    end

    repo_info_args = Args.new(
      :service_instance     => service_instance,
      :commit_message       => "Updating changes to service instance '#{service_instance}'",
      :branch               => response.required(:base_module, :branch, :name),
      :repo_url             => response.required(:base_module, :repo, :url),
      :service_instance_dir => service_instance_dir
    )
    ClientModuleDir::GitRepo.pull_from_service_repo(repo_info_args)

    OsUtil.print_info("Component '#{component_ref}' has been successfully added to service instance '#{service_instance}'")
  end
end