Class: VMC::Service::Create

Inherits:
Base
  • Object
show all
Defined in:
lib/vmc/cli/service/create.rb

Instance Method Summary collapse

Methods inherited from CLI

#check_logged_in, #check_target, #client, client, client=, #client_target, #color_enabled?, #default_action, #ensure_config_dir, #err, #execute, #fail, #force?, #invalidate_client, #log_error, #name_list, #no_v2, #one_of, #precondition, #quiet?, #remove_target_info, #sane_target_url, #save_target_info, #save_targets, #set_target, #table, #target_file, #target_info, #targets_info, #tokens_file, #user_colors, #v2?, #verbose?

Methods included from VMC::Spacing

#indented, #justify, #line, #lines, #quiet?, #spaced, #start_line, #tabular, #text_width, #trim_escapes

Methods included from Interactive

#ask, #handler, #input_state, #list_choices, #prompt, #show_default

Instance Method Details

#create_serviceObject



45
46
47
48
49
50
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/vmc/cli/service/create.rb', line 45

def create_service
  services = client.services

  if input[:provider]
    services.reject! { |s| s.provider != input[:provider] }
  end

  if input[:version]
    services.reject! { |s| s.version != input[:version] }
  elsif !v2?
    services.reject!(&:deprecated?)
  end

  if v2? && plan = input.given(:plan)
    services.reject! do |s|
      if plan.is_a?(String)
        s.service_plans.none? { |p| p.name == plan.upcase }
      else
        s.service_plans.include? plan
      end
    end
  end

  until services.size < 2
    # cast to Array since it might be given as a Service with #invoke
    services = Array(input[:service, services.sort_by(&:label)])
    input.forget(:service)
  end

  if services.empty?
    fail "Cannot find services matching the given criteria."
  end

  service = services.first

  instance = client.service_instance
  instance.name = input[:name, service]

  if v2?
    instance.service_plan = input[:plan, service.service_plans]
    instance.space = client.current_space
  else
    instance.type = service.type
    instance.vendor = service.label
    instance.version = service.version
    instance.tier = "free"
  end

  with_progress("Creating service #{c(instance.name, :name)}") do
    instance.create!
  end

  if app = input[:app]
    invoke :bind_service, :instance => instance, :app => app
  end

  instance
end