Class: ForemanCPPCloudstack::Cloudstack
- Inherits:
-
ComputeResource
- Object
- ComputeResource
- ForemanCPPCloudstack::Cloudstack
- Defined in:
- app/models/foreman_cpp_cloudstack/cloudstack.rb
Instance Attribute Summary collapse
-
#hypervisor ⇒ Object
Returns the value of attribute hypervisor.
-
#zone ⇒ Object
Returns the value of attribute zone.
Class Method Summary collapse
Instance Method Summary collapse
- #associated_host(vm) ⇒ Object
- #available_images ⇒ Object
- #capabilities ⇒ Object
- #console(uuid) ⇒ Object
- #create_vm(args = {}) ⇒ Object
- #destroy_vm(uuid) ⇒ Object
- #domain ⇒ Object
- #domains ⇒ Object
- #flavor_name(flavor_ref) ⇒ Object
- #get_hypervisor ⇒ Object
- #get_zone ⇒ Object
- #hypervisors ⇒ Object
- #image_param_name ⇒ Object
-
#initialize(params) ⇒ Cloudstack
constructor
add additional params to the ‘new’ method.
- #ip_address(uuid) ⇒ Object
- #networks ⇒ Object
- #provided_attributes ⇒ Object
- #provider_friendly_name ⇒ Object
- #set_hypervisor=(hypervisor) ⇒ Object
-
#set_zone=(zone_id) ⇒ Object
save the zone.
- #test_connection(options = {}) ⇒ Object
- #zone_id ⇒ Object
- #zones ⇒ Object
Constructor Details
#initialize(params) ⇒ Cloudstack
add additional params to the ‘new’ method
16 17 18 19 20 21 22 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 16 def initialize(params) super if params attrs[:zone_id] = params[:zone] attrs[:hypervisor] = params[:hypervisor] end end |
Instance Attribute Details
#hypervisor ⇒ Object
Returns the value of attribute hypervisor.
10 11 12 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 10 def hypervisor @hypervisor end |
#zone ⇒ Object
Returns the value of attribute zone.
10 11 12 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 10 def zone @zone end |
Class Method Details
.model_name ⇒ Object
98 99 100 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 98 def self.model_name ComputeResource.model_name end |
Instance Method Details
#associated_host(vm) ⇒ Object
172 173 174 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 172 def associated_host(vm) Host.(:view_hosts, Host).where(:ip => [vm.nics[0]["ipaddress"], vm.floating_ip_address, vm.private_ip_address]).first end |
#available_images ⇒ Object
129 130 131 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 129 def available_images client.images end |
#capabilities ⇒ Object
106 107 108 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 106 def capabilities [:image] end |
#console(uuid) ⇒ Object
167 168 169 170 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 167 def console(uuid) vm = find_vm_by_uuid(uuid) vm.console.body.merge({'timestamp' => Time.now.utc}) end |
#create_vm(args = {}) ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 133 def create_vm(args = {}) args[:security_group_ids] = nil args[:network_ids] = [args[:network_ids]] if args[:network_ids] args[:network_ids] = [args[:subnet_id]] if args[:subnet_id] args[:network_ids] = nil args[:zone_id] = get_zone args[:display_name] = args[:name] # name has to be hostname without domain: no dots allowed name = args[:name].split(/\.(?=[\w])/).first || args[:name] args[:name] = name = vm_instance_defaults.merge(args.to_hash.symbolize_keys) vm = client.servers.create vm.wait_for { nics.present? } logger.warn "captured ipaddress" logger.warn vm.nics[0]["ipaddress"] logger.warn vm.inspect vm rescue => e = JSON.parse(e.response.body)['badRequest']['message'] rescue (e.to_s) logger.warn "failed to create vm: #{}" destroy_vm vm.id if vm raise end |
#destroy_vm(uuid) ⇒ Object
160 161 162 163 164 165 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 160 def destroy_vm uuid find_vm_by_uuid(uuid).destroy rescue ActiveRecord::RecordNotFound # if the VM does not exists, we don't really care. true end |
#domain ⇒ Object
70 71 72 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 70 def domain attrs[:domain] end |
#domains ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 24 def domains return [] if url.blank? or user.blank? or password.blank? domainsobj = client.list_domains domains_array = [] zonesobj["listdomainsresponse"]["domain"].each do |domain| z = domain["name"] domains_array.push(z) end logger.info(domainsobj) logger.info(domains_array) return domains_array end |
#flavor_name(flavor_ref) ⇒ Object
181 182 183 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 181 def flavor_name(flavor_ref) client.flavors.get(flavor_ref).try(:name) end |
#get_hypervisor ⇒ Object
90 91 92 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 90 def get_hypervisor self.attrs[:hypervisor] end |
#get_zone ⇒ Object
55 56 57 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 55 def get_zone self.attrs[:zone_id] end |
#hypervisors ⇒ Object
59 60 61 62 63 64 65 66 67 68 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 59 def hypervisors return [] if url.blank? or user.blank? or password.blank? hypervisorsobj = client.list_hypervisors hypervisors_array = [] hypervisorsobj["listhypervisorsresponse"]["hypervisor"].each do |hypervisor| hypervisors_array.push(hypervisor["name"]) end return hypervisors_array end |
#image_param_name ⇒ Object
102 103 104 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 102 def image_param_name :image_ref end |
#ip_address(uuid) ⇒ Object
176 177 178 179 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 176 def ip_address uuid vm = find_vm_by_uuid(uuid) vm.nics[0]["ipaddress"] end |
#networks ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 110 def networks fog_ntwrks = [] networks_array = client.list_networks["listnetworksresponse"]["network"] networks_array.each do |network| ntwrk = Fog::Compute::Cloudstack::Address.new ntwrk.id = network["id"] ntwrk.network_id = network["name"] fog_ntwrks.push(ntwrk) end return fog_ntwrks end |
#provided_attributes ⇒ Object
94 95 96 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 94 def provided_attributes super.merge({ :ip => :test_method }) end |
#provider_friendly_name ⇒ Object
185 186 187 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 185 def provider_friendly_name "Cloudstack" end |
#set_hypervisor=(hypervisor) ⇒ Object
86 87 88 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 86 def set_hypervisor=(hypervisor) self.attrs[:hypervisor] = hypervisor end |
#set_zone=(zone_id) ⇒ Object
save the zone
51 52 53 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 51 def set_zone=(zone_id) self.attrs[:zone_id] = zone_id end |
#test_connection(options = {}) ⇒ Object
122 123 124 125 126 127 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 122 def test_connection = {} client errors[:url].empty? and errors[:user].empty? and errors[:password].empty? and zones rescue Fog::Compute::Cloudstack::Error => e errors[:base] << e. end |
#zone_id ⇒ Object
78 79 80 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 78 def zone_id return client.list_zones["listzonesresponse"]["zone"][0]["id"] end |
#zones ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 |
# File 'app/models/foreman_cpp_cloudstack/cloudstack.rb', line 38 def zones return [] if url.blank? or user.blank? or password.blank? zonesobj = client.list_zones zones_array = [] zonesobj["listzonesresponse"]["zone"].each do |zone| z = {:name => zone["name"], :id => zone["id"]} zones_array.push(z) end return zones_array end |