module CloudstackCli::OptionResolver

Public Instance Methods

resolve_account() click to toggle source
   # File lib/cloudstack-cli/option_resolver.rb
64 def resolve_account
65   if options[:account]
66     if account = client.list_accounts(name: options[:account], listall: true).first
67       options[:account_id] = account['id']
68       options[:domain_id] = account['domainid']
69     else
70       say "Error: Account #{options[:account]} not found.", :red
71       exit 1
72     end
73   end
74   options
75 end
resolve_cluster() click to toggle source
    # File lib/cloudstack-cli/option_resolver.rb
244 def resolve_cluster
245   if options[:cluster]
246     unless cluster = client.list_clusters(name: options[:cluster]).first
247       say "Error: Cluster '#{options[:cluster]}' not found.", :red
248       exit 1
249     end
250     options[:cluster_id] = cluster['id']
251   end
252   options
253 end
resolve_compute_offering() click to toggle source
    # File lib/cloudstack-cli/option_resolver.rb
178 def resolve_compute_offering
179   if offering = client.list_service_offerings(name: options[:offering]).first
180     options[:service_offering_id] = offering['id']
181   else
182     say "Error: Offering #{options[:offering]} not found.", :red
183     exit 1
184   end
185   options
186 end
resolve_disk_offering() click to toggle source
    # File lib/cloudstack-cli/option_resolver.rb
188 def resolve_disk_offering
189   if options[:disk_offering]
190     unless disk_offering = client.list_disk_offerings(name: options[:disk_offering]).first
191       say "Error: Disk offering '#{options[:disk_offering]}' not found.", :red
192       exit 1
193     end
194     options[:disk_offering_id] = disk_offering['id']
195   end
196   options
197 end
resolve_domain() click to toggle source
   # File lib/cloudstack-cli/option_resolver.rb
38 def resolve_domain
39   if options[:domain]
40     if domain = client.list_domains(name: options[:domain]).first
41       options[:domain_id] = domain['id']
42     else
43       say "Error: Domain #{options[:domain]} not found.", :red
44       exit 1
45     end
46   end
47   options
48 end
resolve_host(type = "routing") click to toggle source
    # File lib/cloudstack-cli/option_resolver.rb
232 def resolve_host(type = "routing")
233   if options[:host]
234     args = { name: options[:host], type: type, listall: true }
235     unless host = client.list_hosts(args).first
236       say "Error: Host '#{options[:host]}' not found.", :red
237       exit 1
238     end
239     options[:host_id] = host['id']
240   end
241   options
242 end
resolve_ip_network_list() click to toggle source
    # File lib/cloudstack-cli/option_resolver.rb
104 def resolve_ip_network_list
105   network_list = []
106   available_networks = network = client.list_networks(
107     zone_id: options[:zone_id],
108     project_id: options[:project_id]
109   )
110   if options[:ip_network_list]
111     options[:ip_network_list].each do |item|
112       unless network = available_networks.find { |n| n['name'] == item["name"] }
113         say "Error: Network '#{item["name"]}' not found.", :red
114         exit 1
115       end
116       item.delete("name")
117       network_list << {networkid: network["id"]}.merge(item)
118     end
119   end
120   network_list.compact!
121   if network_list.empty?
122     say "Error: IP network list can't be empty.", :red
123     exit 1
124   end
125   options[:ip_to_network_list] = network_list
126   [:network_ids, :ip_address].each { |k| options.delete(k) }
127   options
128 end
resolve_iso() click to toggle source
    # File lib/cloudstack-cli/option_resolver.rb
130 def resolve_iso
131   if options[:iso]
132     iso = false
133     %w(self featured community).each do |iso_filter|
134       iso = client.list_isos(
135           name: options[:iso],
136           project_id: options[:project_id],
137           isofilter: iso_filter
138       ).first
139       break if iso
140     end
141     if iso
142       options[:iso_id] = iso["id"]
143     else
144       say "Error: Iso '#{options[:iso]}' is invalid.", :red
145       exit 1
146     end
147   end
148   options
149 end
resolve_iso_for_vm_deployment() click to toggle source
    # File lib/cloudstack-cli/option_resolver.rb
151 def resolve_iso_for_vm_deployment
152   unless options[:disk_offering_id]
153     say "Error: a disk offering is required when using iso.", :red
154     exit 1
155   end
156   resolve_iso
157   options[:template_id] = options[:iso_id]
158   options['hypervisor'] = (options[:hypervisor] || 'vmware')
159   options
160 end
resolve_networks() click to toggle source
    # File lib/cloudstack-cli/option_resolver.rb
 77 def resolve_networks
 78   networks = []
 79   available_networks = network = client.list_networks(
 80     zone_id: options[:zone_id],
 81     project_id: options[:project_id]
 82   )
 83   if options[:networks]
 84     options[:networks].each do |name|
 85       unless network = available_networks.find { |n| n['name'] == name }
 86         say "Error: Network '#{name}' not found.", :red
 87         exit 1
 88       end
 89       networks << network['id'] rescue nil
 90     end
 91   end
 92   networks.compact!
 93   if networks.empty?
 94     unless default_network = client.list_networks(project_id: options[:project_id]).first
 95       say "Error: No default network found.", :red
 96       exit 1
 97     end
 98     networks << available_networks.first['id'] rescue nil
 99   end
100   options[:network_ids] = networks.join(',')
101   options
102 end
resolve_project() click to toggle source
   # File lib/cloudstack-cli/option_resolver.rb
50 def resolve_project
51   if options[:project]
52     if %w(ALL -1).include? options[:project]
53       options[:project_id] = "-1"
54     elsif project = client.list_projects(name: options[:project], listall: true).first
55       options[:project_id] = project['id']
56     else
57       say "Error: Project #{options[:project]} not found.", :red
58       exit 1
59     end
60   end
61   options
62 end
resolve_snapshot() click to toggle source
    # File lib/cloudstack-cli/option_resolver.rb
219 def resolve_snapshot
220   if options[:snapshot]
221     args = { name: options[:snapshot], listall: true }
222     args[:project_id] = options[:project_id]
223     unless snapshot = client.list_snapshots(args).first
224       say "Error: Snapshot '#{options[:snapshot]}' not found.", :red
225       exit 1
226     end
227     options[:snapshot_id] = snapshot['id']
228   end
229   options
230 end
resolve_template() click to toggle source
    # File lib/cloudstack-cli/option_resolver.rb
162 def resolve_template
163   if options[:template]
164     if template = client.list_templates(
165         name: options[:template],
166         template_filter: "executable",
167         project_id: options[:project_id]
168       ).first
169       options[:template_id] = template['id']
170     else
171       say "Error: Template #{options[:template]} not found.", :red
172       exit 1
173     end
174   end
175   options
176 end
resolve_virtual_machine(return_vm = false) click to toggle source
    # File lib/cloudstack-cli/option_resolver.rb
199 def resolve_virtual_machine(return_vm = false)
200   if options[:virtual_machine]
201     unless vm = client.list_virtual_machines(
202       name: options[:virtual_machine],
203       listall: true,
204       project_id: options[:project_id]
205     ).find {|vm| vm["name"] == options[:virtual_machine] }
206       say "Error: VM '#{options[:virtual_machine]}' not found.", :red
207       exit 1
208     end
209 
210     if return_vm
211       return vm
212     else
213       options[:virtual_machine_id] = vm["id"]
214     end
215   end
216   options
217 end
resolve_zone() click to toggle source
   # File lib/cloudstack-cli/option_resolver.rb
24 def resolve_zone
25   if options[:zone]
26     zones = client.list_zones
27     zone = zones.find {|z| z['name'] == options[:zone] }
28     if !zone
29       msg = options[:zone] ? "Zone '#{options[:zone]}' is invalid." : "No zone found."
30       say "Error: #{msg}", :red
31       exit 1
32     end
33     options[:zone_id] = zone['id']
34   end
35   options
36 end
vm_options_to_params() click to toggle source
   # File lib/cloudstack-cli/option_resolver.rb
 4 def vm_options_to_params
 5   resolve_zone
 6   resolve_project
 7   resolve_compute_offering
 8   resolve_template
 9   resolve_disk_offering
10   resolve_iso_for_vm_deployment if options[:iso]
11   options[:size] = options[:disk_size] if options[:disk_size]
12   unless options[:template_id]
13     say "Error: Template or ISO is required.", :red
14     exit 1
15   end
16   if options[:ip_network_list]
17     resolve_ip_network_list
18   else
19     resolve_networks
20   end
21   options
22 end