Method: IBMSmartCloud#create_instance

Defined in:
lib/smartcloud.rb

#create_instance(instance_params) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/smartcloud.rb', line 105

def create_instance(instance_params)
  param_remap = { "name" => "name",
    "image-id" => "imageID",
    "instance-type" => "instanceType",
    "data-center" => "location",
    "key-name" => "publicKey",
    "ip-address-id" => "ip",
    "volume-id" => "volumeID",
    "configuration" => "ConfigurationData",
    "vlan-id" => "vlanID",
    "antiCollocationInstance" => "antiCollocationInstance",
    "isMiniEphemeral" => "isMiniEphemeral"
  }

  # api does not take description
  instance_params.delete("description")

  # configuration data has to be changed from a string like
  # <configuration>{contextmanager:test-c3-master.cohesiveft.com,clustername:TEST_poc_pk0515,role:[nfs-client-setup|newyork_master_refdata_member|install-luci|rhel-openlikewise-client-setup|join-domain],hostname:r550n107}</configuration>
  # to a standard list of POST params like
  # contextmanager=test-c3-mager&clustername=TEST...
  configuration_data = instance_params.delete("configuration") || instance_params.delete("ConfigurationData")
  if configuration_data
    if configuration_data =~ /\s+/
      logger.warn "<configuration> tag should not contain spaces! Correct format looks like: <configuration>{foo:bar,baz:quux}</configuration>. Spaces will be removed."
    end
    configuration_data.delete!("{}") # get rid of curly braces
    config_data_params = configuration_data.split(",").map{|param| param.split(":")} # split each foo:bar into key and value
    config_data_params.each {|k,v| instance_params[k]=v} # add it into the standard instance params array
  end

  result = post "/instances", instance_params, param_remap
  result.Instance
end