Module: VMC::App::Create

Included in:
Push
Defined in:
lib/vmc/cli/app/push/create.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#inputObject

Returns the value of attribute input.



5
6
7
# File 'lib/vmc/cli/app/push/create.rb', line 5

def input
  @input
end

#path=(value) ⇒ Object (writeonly)

Sets the attribute path

Parameters:

  • value

    the value to set the attribute path to.



6
7
8
# File 'lib/vmc/cli/app/push/create.rb', line 6

def path=(value)
  @path = value
end

Instance Method Details

#bind_services(app) ⇒ Object



127
128
129
130
131
132
133
134
135
# File 'lib/vmc/cli/app/push/create.rb', line 127

def bind_services(app)
  return unless input[:bind_services]

  while true
    invoke :bind_service, :app => app
    break if (all_instances - app.services).empty?
    break unless ask("Bind another service?", :default => false)
  end
end

#create_app(inputs) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/vmc/cli/app/push/create.rb', line 68

def create_app(inputs)
  app = client.app

  inputs.each { |key, value| app.send(:"#{key}=", value) }

  app = filter(:create_app, app)

  with_progress("Creating #{c(app.name, :name)}") do
    wrap_message_format_errors do
      begin
        app.create!
      rescue CFoundry::NotAuthorized
        fail "You need the Project Developer role in #{b(client.current_space.name)} to push."
      end
    end
  end

  app
end

#create_services(app) ⇒ Object



118
119
120
121
122
123
124
125
# File 'lib/vmc/cli/app/push/create.rb', line 118

def create_services(app)
  return unless input[:create_services]

  while true
    invoke :create_service, { :app => app }, :plan => :interact
    break unless ask("Create another service?", :default => false)
  end
end

#determine_frameworkObject



39
40
41
42
43
44
45
46
47
# File 'lib/vmc/cli/app/push/create.rb', line 39

def determine_framework
  return input[:framework] if input.has?(:framework)

  if (detected_framework = detector.detect_framework)
    input[:framework, [detected_framework], detected_framework, :other]
  else
    input[:framework, detector.all_frameworks, nil, nil]
  end
end

#determine_runtime(framework) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/vmc/cli/app/push/create.rb', line 49

def determine_runtime(framework)
  return input[:runtime] if input.has?(:runtime)

  detected_runtimes =
    if framework.name == "standalone"
      detector.detect_runtimes
    else
      detector.runtimes(framework)
    end

  default_runtime = detected_runtimes.size == 1 ? detected_runtimes.first : nil

  if detected_runtimes.empty?
    input[:runtime, detector.all_runtimes, nil, nil]
  else
    input[:runtime, detected_runtimes, default_runtime, :other]
  end
end

#get_inputsObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/vmc/cli/app/push/create.rb', line 8

def get_inputs
  inputs = {}
  inputs[:name] = input[:name]
  inputs[:total_instances] = input[:instances]
  inputs[:space] = client.current_space if client.current_space

  if v2?
    inputs[:production] = !!(input[:plan] =~ /^p/i)
    inputs[:command] = input[:command] if input.has?(:command) || !has_procfile?
  else
    framework = inputs[:framework] = determine_framework
    inputs[:runtime] = determine_runtime(framework)
    inputs[:command] = input[:command] if can_have_custom_start_command?(framework)
  end

  inputs[:buildpack] = input[:buildpack] if v2?

  if v2?
    detected = detector.detected
    human_mb = human_mb((detected && detected.memory_suggestion) || 64)
  else
    human_mb = human_mb(detector.suggested_memory(framework) || 64)
  end

  inputs[:memory] = megabytes(input[:memory, human_mb])

  inputs[:stack] = input[:stack] if v2?

  inputs
end

#map_route(app) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/vmc/cli/app/push/create.rb', line 88

def map_route(app)
  line unless quiet?

  host = input[:host, app.name] if v2?
  domain = input[:domain, app]

  mapped_url = false
  until domain == "none" || !domain || mapped_url
    begin
      host = "" if host == "none"
      invoke :map, :app => app, :host => host, :domain => domain
      mapped_url = true
    rescue CFoundry::RouteHostTaken, CFoundry::UriAlreadyTaken => e
      raise if force?

      line c(e.description, :bad)
      line

      input.forget(:host) if v2?
      input.forget(:domain)

      host = input[:host, app.name] if v2?
      domain = input[:domain, app]

      # version bumps on v1 even though mapping fails
      app.invalidate! unless v2?
    end
  end
end

#start_app(app) ⇒ Object



137
138
139
# File 'lib/vmc/cli/app/push/create.rb', line 137

def start_app(app)
  invoke :start, :app => app if input[:start]
end