Class: Fog::Compute::Cloudstack::Mock
- Inherits:
-
Object
- Object
- Fog::Compute::Cloudstack::Mock
- Defined in:
- lib/fog/cloudstack/compute.rb,
lib/fog/cloudstack/requests/compute/list_zones.rb,
lib/fog/cloudstack/requests/compute/list_volumes.rb,
lib/fog/cloudstack/requests/compute/attach_volume.rb,
lib/fog/cloudstack/requests/compute/create_volume.rb,
lib/fog/cloudstack/requests/compute/delete_volume.rb,
lib/fog/cloudstack/requests/compute/detach_volume.rb,
lib/fog/cloudstack/requests/compute/list_os_types.rb,
lib/fog/cloudstack/requests/compute/list_snapshots.rb,
lib/fog/cloudstack/requests/compute/list_templates.rb,
lib/fog/cloudstack/requests/compute/create_snapshot.rb,
lib/fog/cloudstack/requests/compute/delete_snapshot.rb,
lib/fog/cloudstack/requests/compute/list_async_jobs.rb,
lib/fog/cloudstack/requests/compute/extract_template.rb,
lib/fog/cloudstack/requests/compute/register_template.rb,
lib/fog/cloudstack/requests/compute/list_disk_offerings.rb,
lib/fog/cloudstack/requests/compute/create_disk_offering.rb,
lib/fog/cloudstack/requests/compute/delete_disk_offering.rb,
lib/fog/cloudstack/requests/compute/list_security_groups.rb,
lib/fog/cloudstack/requests/compute/create_security_group.rb,
lib/fog/cloudstack/requests/compute/delete_security_group.rb,
lib/fog/cloudstack/requests/compute/list_virtual_machines.rb,
lib/fog/cloudstack/requests/compute/deploy_virtual_machine.rb,
lib/fog/cloudstack/requests/compute/list_service_offerings.rb,
lib/fog/cloudstack/requests/compute/query_async_job_result.rb,
lib/fog/cloudstack/requests/compute/reboot_virtual_machine.rb,
lib/fog/cloudstack/requests/compute/destroy_virtual_machine.rb,
lib/fog/cloudstack/requests/compute/revoke_security_group_egress.rb,
lib/fog/cloudstack/requests/compute/revoke_security_group_ingress.rb,
lib/fog/cloudstack/requests/compute/authorize_security_group_egress.rb,
lib/fog/cloudstack/requests/compute/authorize_security_group_ingress.rb
Overview
Real
Class Method Summary collapse
Instance Method Summary collapse
- #add_delete_snapshot_job(snapshot_id) ⇒ Object
- #attach_volume(options = {}) ⇒ Object
- #authorize_security_group_egress(options = {}) ⇒ Object
- #authorize_security_group_ingress(options = {}) ⇒ Object
- #create_disk_offering(options = {}) ⇒ Object
- #create_security_group(options = {}) ⇒ Object
- #create_snapshot(options = {}) ⇒ Object
- #create_volume(options = {}) ⇒ Object
- #data ⇒ Object
- #delete_disk_offering(options = {}) ⇒ Object
- #delete_security_group(options = {}) ⇒ Object
- #delete_snapshot(options = {}) ⇒ Object
- #delete_volume(options = {}) ⇒ Object
- #deploy_virtual_machine(options = {}) ⇒ Object
- #destroy_virtual_machine(options = {}) ⇒ Object
- #detach_volume(options = {}) ⇒ Object
- #extract_template(options = {}) ⇒ Object
-
#initialize(options = {}) ⇒ Mock
constructor
A new instance of Mock.
- #list_async_jobs(options = {}) ⇒ Object
-
#list_disk_offerings(options = {}) ⇒ Object
TODO: add id, name filters and paging params.
-
#list_os_types(options = {}) ⇒ Object
TODO: add id, category_id filters and paging params.
- #list_security_groups(options = {}) ⇒ Object
- #list_service_offerings(options = {}) ⇒ Object
- #list_snapshots(options = {}) ⇒ Object
- #list_templates(options = {}) ⇒ Object
- #list_virtual_machines(options = {}) ⇒ Object
- #list_volumes(options = {}) ⇒ Object
- #list_zones(options = {}) ⇒ Object
- #query_async_job_result(options = {}) ⇒ Object
- #reboot_virtual_machine(options = {}) ⇒ Object
- #register_template(options = {}) ⇒ Object
- #reset_data ⇒ Object
- #revoke_security_group_egress(options = {}) ⇒ Object
- #revoke_security_group_ingress(options = {}) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Mock
Returns a new instance of Mock.
646 647 648 |
# File 'lib/fog/cloudstack/compute.rb', line 646 def initialize(={}) @cloudstack_api_key = [:cloudstack_api_key] end |
Class Method Details
.data ⇒ Object
650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 |
# File 'lib/fog/cloudstack/compute.rb', line 650 def self.data @data ||= begin zone_id = Fog.credentials[:cloudstack_zone_id] || Fog::Cloudstack.uuid image_id = Fog.credentials[:cloudstack_template_id] || Fog::Cloudstack.uuid flavor_id = Fog.credentials[:cloudstack_service_offering_id] || Fog::Cloudstack.uuid network_id = (Array(Fog.credentials[:cloudstack_network_ids]) || [Fog::Cloudstack.uuid]).first domain_name = "exampleorg" account_id, user_id, domain_id = Fog::Cloudstack.uuid, Fog::Cloudstack.uuid, Fog::Cloudstack.uuid domain = { "id" => domain_id, "name" => domain_name, "level" => 1, "parentdomainid" => Fog::Cloudstack.uuid, "parentdomainname" => "ROOT", "haschild" => false, "path" => "ROOT/accountname" } user = { "id" => user_id, "username" => "username", "firstname" => "Bob", "lastname" => "Lastname", "email" => "[email protected]", "created" => "2012-05-14T16:25:17-0500", "state" => "enabled", "account" => "accountname", "accounttype" => 2, "domainid" => domain_id, "domain" => domain_name, "apikey" => Fog::Cloudstack.uuid, "secretkey" => Fog::Cloudstack.uuid } { :users => { user_id => user }, :networks => { network_id => { "id" => network_id, "name" => "10.56.23.0/26", "displaytext" => "10.56.23.0/26", "broadcastdomaintype" => "Vlan", "traffictype" => "Guest", "gateway" => "10.56.23.1", "netmask" => "255.255.255.192", "cidr" => "10.56.23.0/26", "zoneid" => zone_id, "zonename" => "zone-00", "networkofferingid" => "af0c9bd5-a1b2-4ad0-bf4b-d6fa9b1b9d5b", "networkofferingname" => "DefaultSharedNetworkOffering", "networkofferingdisplaytext" => "Offering for Shared networks", "networkofferingavailability" => "Optional", "issystem" => false, "state" => "Setup", "related" => "86bbc9fc-d92e-49db-9fdc-296189090017", "broadcasturi" => "vlan://800", "dns1" => "10.0.80.11", "type" => "Shared", "vlan" => "800", "acltype" => "Domain", "subdomainaccess" => true, "domainid" => domain_id, "domain" => "ROOT", "service" => [ {"name" => "UserData"}, {"name" => "Dhcp"}, { "name" => "Dns", "capability" => [ { "name" => "AllowDnsSuffixModification", "value" => "true", "canchooseservicecapability" => false } ] }], "networkdomain" => "cs1cloud.internal", "physicalnetworkid" => "8f4627c5-1fdd-4504-8a92-f61b4e9cb3e3", "restartrequired" => false, "specifyipranges" => true} }, :zones => { zone_id => { "id" => zone_id, "name" => "zone-00", "domainid" => 1, "domainname" => "ROOT", "networktype" => "Advanced", "securitygroupsenabled" => false, "allocationstate" => "Enabled", "zonetoken" => Fog::Cloudstack.uuid, "dhcpprovider" => "VirtualRouter"}}, :images => { image_id => { "id" => image_id, "name" => "CentOS 5.6(64-bit) no GUI (XenServer)", "displaytext" => "CentOS 5.6(64-bit) no GUI (XenServer)", "ispublic" => true, "created" => "2012-05-09T15:29:33-0500", "isready" => true, "passwordenabled" => false, "format" => "VHD", "isfeatured" => true, "crossZones" => true, "ostypeid" => "a6a6694a-18f5-4765-8418-2b7a5f37cd0f", "ostypename" => "CentOS 5.3 (64-bit)", "account" => "system", "zoneid" => zone_id, "zonename" => "zone-00", "status" => "Download Complete", "size" => 21474836480, "templatetype" => "BUILTIN", "domain" => "ROOT", "domainid" => "6023b6fe-5bef-4358-bc76-9f4e75afa52f", "isextractable" => true, "checksum" => "905cec879afd9c9d22ecc8036131a180", "hypervisor" => "Xen" }}, :flavors => { flavor_id => { "id" => flavor_id, "name" => "Medium Instance", "displaytext" => "Medium Instance", "cpunumber" => 1, "cpuspeed" => 1000, "memory" => 1024, "created" => "2012-05-09T14:48:36-0500", "storagetype" => "shared", "offerha" => false, "limitcpuuse" => false, "issystem" => false, "defaultuse" => false}}, :accounts => { account_id => { "id" => account_id, "name" => "accountname", "accounttype" => 2, "domainid" => domain_id, "domain" => domain_name, "receivedbytes" => 0, "sentbytes" => 0, "vmlimit" => "Unlimited", "vmtotal" => 0, "vmavailable" => "Unlimited", "iplimit" => "Unlimited", "iptotal" => 0, "ipavailable" => "Unlimited", "volumelimit" => "Unlimited", "volumetotal" => 0, "volumeavailable" => "Unlimited", "snapshotlimit" => "Unlimited", "snapshottotal" => 0, "snapshotavailable" => "Unlimited", "templatelimit" => "Unlimited", "templatetotal" => 0, "templateavailable" => "Unlimited", "vmstopped" => 0, "vmrunning" => 0, "projectlimit" => "Unlimited", "projecttotal" => 1, "projectavailable" => "Unlimited", "networklimit" => "Unlimited", "networktotal" => 0, "networkavailable" => "Unlimited", "state" => "enabled", "user" => [user]} }, :domains => {domain_id => domain}, :servers => {}, :jobs => {}, :volumes => { "89198f7c-0245-aa1d-136a-c5f479ef9db7" => { "id"=> "89198f7c-0245-aa1d-136a-c5f479ef9db7", "name"=>"test volume", "zoneid"=> zone_id, "zonename"=>"zone-00", "type"=>"DATADISK", "deviceid"=>1, "virtualmachineid"=> "51dcffee-5f9f-29a4-acee-2717e1a3656b", "vmname"=>"i-2824-11621-VM", "vmdisplayname"=>"test vm", "vmstate"=>"Running", "size"=>17179869184, "created"=>"2013-04-16T12:33:41+0000", "state"=>"Ready", "account"=> 'accountname', "domainid"=> domain_id, "domain"=> domain_name, "storagetype"=>"shared", "hypervisor"=>"KVM", "diskofferingid"=> "cc4de87d-672d-4353-abb5-6a8a4c0abf59", "diskofferingname"=>"Small Disk", "diskofferingdisplaytext"=>"Small Disk [16GB Disk]", "storage"=>"ps1", "attached"=>"2013-04-16T12:34:07+0000", "destroyed"=>false, "isextractable"=>false }, }, :security_groups => {}, :snapshots => {}, :disk_offerings => { "cc4de87d-672d-4353-abb5-6a8a4c0abf59" => { "id" => "cc4de87d-672d-4353-abb5-6a8a4c0abf59", "domainid" => domain_id, "domain" => domain_name, "name" => "Small Disk", "displaytext" => "Small Disk [16GB Disk]", "disksize" => 16, "created" => "2013-02-21T03:12:520300", "iscustomized" => false, "storagetype" => "shared" }, "d5deeb0c-de03-4ebf-820a-dc74221bcaeb" => { "id" => "d5deeb0c-de03-4ebf-820a-dc74221bcaeb", "domainid" => domain_id, "domain" => domain_name, "name" => "Medium Disk", "displaytext" => "Medium Disk [32GB Disk]", "disksize" => 32, "created" => "2013-02-21T03:12:520300", "iscustomized" => false, "storagetype" => "shared" } }, :os_types => { "51ef854d-279e-4e68-9059-74980fd7b29b" => { "id" => "51ef854d-279e-4e68-9059-74980fd7b29b", "oscategoryid" => "56f67279-e082-45c3-a01c-d290d6cd4ce2", "description" => "Asianux 3(32-bit)" }, "daf124c8-95d8-4756-8e1c-1871b073babb" => { "id" => "daf124c8-95d8-4756-8e1c-1871b073babb", "oscategoryid" => "56f67279-e082-45c3-a01c-d290d6cd4ce2", "description" => "Asianux 3(64-bit)" } } } end end |
.reset ⇒ Object
884 885 886 |
# File 'lib/fog/cloudstack/compute.rb', line 884 def self.reset @data = nil end |
Instance Method Details
#add_delete_snapshot_job(snapshot_id) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/fog/cloudstack/requests/compute/delete_snapshot.rb', line 37 def add_delete_snapshot_job(snapshot_id) job_id = Fog::Cloudstack.uuid job = { 'id' => job_id, 'user_id' => self.data[:users].first, # TODO use current user 'account_id' => self.data[:accounts].first, # TODO use current user 'cmd' => 'com.cloud.api.commands.DeleteSnapshotCmd', 'job_status'=> 1, 'job_result_type' => nil, 'job_result_code' => 0, 'job_proc_status' => 0, 'created_at' => Time.now.iso8601, 'job_result' => { "success" => true } } self.data[:jobs][job_id] = job job_id end |
#attach_volume(options = {}) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 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 |
# File 'lib/fog/cloudstack/requests/compute/attach_volume.rb', line 25 def attach_volume(={}) volume_id = ['id'] server_id = ['virtualmachineid'] volume = self.data[:volumes][volume_id] unless volume raise Fog::Compute::Cloudstack::BadRequest.new("Unable to execute API command attachvolume due to invalid value. Object volumes(uuid: #{volume_id}) does not exist.") end server = self.data[:servers][server_id] unless server raise Fog::Compute::Cloudstack::BadRequest.new("Unable to execute API command attachvolume due to invalid value. Object vm_instance(uuid: #{server_id}) does not exist.") end volume['virtualmachineid']= server['id'] volume['vmname']= server['name'] volume['vmdisplayname']= server['displayname'] job_id = Fog::Cloudstack.uuid # FIXME: need to determine current user account_id = self.data[:accounts].first user_id = self.data[:users].first job = { "accountid" => account_id, "userid" => user_id, "cmd" => "com.cloud.api.commands.AttachVolumeCmd", "created" => Time.now.iso8601, "jobid" => job_id, "jobstatus" => 1, "jobprocstatus" => 0, "jobresultcode" => 0, "jobresulttype" => "object", "jobresult" => {"volume" => volume} } self.data[:jobs][job_id]= job { "attachvolumeresponse" => { "jobid" => job_id } } end |
#authorize_security_group_egress(options = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 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 |
# File 'lib/fog/cloudstack/requests/compute/authorize_security_group_egress.rb', line 22 def (={}) security_group_id = ['securitygroupid'] security_group_rule_id = Fog::Cloudstack.uuid unless cidr = ['cidrlist'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command missing parameter cidr') end unless start_port = ['startport'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command missing parameter start_port') end unless end_port = ['endport'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command missing parameter end_port') end unless protocol = ['protocol'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command missing parameter protocol') end rule = { "ruleid" => security_group_rule_id, "cidr" => cidr, "startport" => start_port, "endport" => end_port, "protocol" => protocol } unless security_group = self.data[:security_groups][security_group_id] raise Fog::Compute::Cloudstack::BadRequest.new("Security group id #{security_group_id} does not exist") end security_group["egressrule"] ||= [] security_group["egressrule"] << rule job_id = Fog::Cloudstack.uuid job = { "cmd" => "com.cloud.api.commands.authorizeSecurityGroupEgress", "created" => Time.now.iso8601, "jobid" => job_id, "jobstatus" => 1, "jobprocstatus" => 0, "jobresultcode" => 0, "jobresulttype" => "object", "jobresult" => { "securitygroup" => security_group } } self.data[:jobs][job_id]= job { "authorizesecuritygroupegressresponse" => { "jobid" => job_id } } end |
#authorize_security_group_ingress(options = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 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 |
# File 'lib/fog/cloudstack/requests/compute/authorize_security_group_ingress.rb', line 22 def (={}) security_group_id = ['securitygroupid'] security_group_rule_id = Fog::Cloudstack.uuid unless cidr = ['cidrlist'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command missing parameter cidr') end unless start_port = ['startport'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command missing parameter start_port') end unless end_port = ['endport'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command missing parameter end_port') end unless protocol = ['protocol'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command missing parameter protocol') end rule = { "ruleid" => security_group_rule_id, "cidr" => cidr, "startport" => start_port, "endport" => end_port, "protocol" => protocol } unless security_group = self.data[:security_groups][security_group_id] raise Fog::Compute::Cloudstack::BadRequest.new("Security group id #{security_group_id} does not exist") end security_group["ingressrule"] ||= [] security_group["ingressrule"] << rule job_id = Fog::Cloudstack.uuid job = { "cmd" => "com.cloud.api.commands.authorizeSecurityGroupIngress", "created" => Time.now.iso8601, "jobid" => job_id, "jobstatus" => 1, "jobprocstatus" => 0, "jobresultcode" => 0, "jobresulttype" => "object", "jobresult" => { "securitygroup" => security_group } } self.data[:jobs][job_id]= job { "authorizesecuritygroupingressresponse" => { "jobid" => job_id } } end |
#create_disk_offering(options = {}) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/fog/cloudstack/requests/compute/create_disk_offering.rb', line 25 def create_disk_offering(={}) disk_offering_id = Fog::Cloudstack.uuid first_domain_data = data[:domains].first.last domain_id = ['domainid'] || first_domain_data['id'] domain_name = data[:domains][domain_id]['name'] storage_type = ['storagetype'] || 'shared' customized = ['customized'] || false disk_size = ['disk_size'] || 1 disk_offering = { "id" => disk_offering_id, "domainid" => domain_id, "domain" => domain_name, "name" => ['name'], "displaytext" => ['display_text'], "disksize" => disk_size, "created" => Time.now.iso8601, "iscustomized" => customized, "storagetype" => storage_type } self.data[:disk_offerings][disk_offering_id] = disk_offering {'creatediskofferingresponse' => disk_offering} end |
#create_security_group(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 |
# File 'lib/fog/cloudstack/requests/compute/create_security_group.rb', line 23 def create_security_group(={}) security_group_id = Fog::Cloudstack.uuid security_group = { "id" => security_group_id, }.merge() self.data[:security_groups][security_group_id]= security_group {"createsecuritygroupresponse" => { "securitygroup" => security_group}} end |
#create_snapshot(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/fog/cloudstack/requests/compute/create_snapshot.rb', line 23 def create_snapshot(={}) snapshot_id = Fog::Cloudstack.uuid unless volume_id = ['volumeid'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command createsnapshot due to missing parameter volumeid') end snapshot = { "id" => snapshot_id, "name" => "ROOT-6", "created" => "2013-05-22T14:52:55-0500", "state" => "BackedUp", "account" => "accountname", "domainid" => "6023b6fe-5bef-4358-bc76-9f4e75afa52f", "domain" => "ROOT", "intervaltype" => "weekly" } self.data[:snapshots][snapshot_id]= snapshot {'createsnapshotresponse' => snapshot} end |
#create_volume(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/fog/cloudstack/requests/compute/create_volume.rb', line 23 def create_volume(={}) volume_id = Fog::Cloudstack.uuid unless volume_name = ['name'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command createvolume due to missing parameter name') end unless zone_id = ['zoneid'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command createvolume due to missing parameter zoneid') end unless disk_offering_id = ['diskofferingid'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command createvolume due to missing parameter diskofferingid') end volume = { "id" => volume_id, "name" => volume_name, "zoneid" => zone_id, "zonename" => "ey-wdc-00", "type" => "DATADISK", "size" => 5368709120, "created" => "2012-05-22T14:52:55-0500", "state" => "Allocated", "account" => "accountname", "domainid" => "6023b6fe-5bef-4358-bc76-9f4e75afa52f", "domain" => "ROOT", "storagetype" => "shared", "hypervisor" => "None", "diskofferingid" => disk_offering_id, "diskofferingname" => "Small", "diskofferingdisplaytext" => "Small Disk, 5 GB", "storage" => "none", "destroyed" => false, "isextractable" => false } self.data[:volumes][volume_id]= volume {'createvolumeresponse' => volume} end |
#data ⇒ Object
888 889 890 |
# File 'lib/fog/cloudstack/compute.rb', line 888 def data self.class.data end |
#delete_disk_offering(options = {}) ⇒ Object
23 24 25 26 27 28 |
# File 'lib/fog/cloudstack/requests/compute/delete_disk_offering.rb', line 23 def delete_disk_offering(={}) disk_offering_id = ['id'] data[:disk_offerings].delete(disk_offering_id) if data[:disk_offerings][disk_offering_id] { 'deletediskofferingresponse' => { 'success' => 'true' } } end |
#delete_security_group(options = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/fog/cloudstack/requests/compute/delete_security_group.rb', line 22 def delete_security_group(={}) security_group_id = ['id'] if self.data[:security_groups][security_group_id] self.data[:security_groups].delete(security_group_id) { "deletesecuritygroupresponse" => { "success" => "true" } } else raise Fog::Compute::Cloudstack::BadRequest.new('No security_group found') end end |
#delete_snapshot(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/fog/cloudstack/requests/compute/delete_snapshot.rb', line 23 def delete_snapshot(={}) snapshot_id = ['id'] snapshots = self.data[:snapshots] if snapshots[snapshot_id] snapshots.delete(snapshot_id) job_id = add_delete_snapshot_job(snapshot_id) {'deletesnapshotresponse' => {'jobid' => job_id}} end # TODO add cases for empty or wrong id end |
#delete_volume(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/fog/cloudstack/requests/compute/delete_volume.rb', line 23 def delete_volume(={}) volume_id = ['id'] if self.data[:volumes][volume_id] self.data[:volumes].delete(volume_id) { "deletevolumeresponse" => { "success" => "true" } } else # FIXME: mayhaps self.data[:volumes].delete(volume_id) { "deletevolumeresponse" => { "success" => "false" } } end end |
#deploy_virtual_machine(options = {}) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/fog/cloudstack/requests/compute/deploy_virtual_machine.rb', line 25 def deploy_virtual_machine(={}) zone_id = ['zoneid'] unless zone_id raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command deployvirtualmachine due to missing parameter zoneid') end unless zone = self.data[:zones][zone_id] raise Fog::Compute::Cloudstack::BadRequest.new("Unable to execute API command deployvirtualmachine due to invalid value. Object zone(uuid: #{zone_id}) does not exist.") end zone_name = zone[:name] template_id = ['templateid'] unless template = self.data[:images][template_id] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command deployvirtualmachine due to missing parameter templateid') end template_name = template[:name] template_display_text = template[:display_text] service_offering_id = ['serviceofferingid'] unless service_offering = self.data[:flavors][service_offering_id] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command deployvirtualmachine due to missing parameter serviceofferingid') end service_offering_name = service_offering[:name] service_offering_cpu_number = service_offering[:cpunumber] service_offering_cpu_speed = service_offering[:cpuspeed] service_offering_memory = service_offering[:cpumemory] identity = Fog::Cloudstack.uuid name = ['name'] || Fog::Cloudstack.uuid display_name = ['displayname'] || name account_name = ['account'] || self.data[:accounts].first[1]["name"] domain = ['domainid'] ? self.data[:domains][['domainid']] : self.data[:domains].first[1] domain_id = domain[:id] domain_name = domain[:name] # how is this setup password = nil password_enabled = false guest_os_id = Fog::Cloudstack.uuid security_group_ids = ['securitygroupids'] || [] # TODO: for now network_ids = Array(['networkids']) || [self.data[:networks].first[1]["id"]] networks = network_ids.map{|nid| self.data[:networks][nid]} nic = networks.map do |network| { "id" => Fog::Cloudstack.uuid, "networkid" => network["id"], "netmask" => Fog::Cloudstack.ip_address, "gateway" => network["gateway"], "ipaddress" => Fog::Cloudstack.ip_address, "traffictype" => "Guest", # TODO: ? "type" => network["type"], "isdefault" => true, # TODO: ? "macaddress" => Fog::Cloudstack.mac_address } end virtual_machine = { "id" => identity, "name" => name, "displayname" => display_name, "account" => account_name, "domainid" => domain_id, "domain" => domain_name, "created" => Time.now.to_s, "state" => "Running", "haenable" => false, "zoneid" => zone_id, "zonename" => zone_name, "templateid" => template_id, "templatename" => template_name, "templatedisplaytext" => template_display_text, "passwordenabled" => false, "serviceofferingid" => service_offering_id, "serviceofferingname" => service_offering_name, "cpunumber" => service_offering_cpu_number, "cpuspeed" => service_offering_cpu_speed, "memory" => service_offering_memory, "cpuused" => "0%", "networkkbsread" => 0, "networkkbswrite" => 0, "guestosid" => guest_os_id, "rootdeviceid" => 0, "rootdevicetype" => "NetworkFilesystem", "securitygroup" => security_group_ids, # TODO: mayhaps? "nic" => nic } self.data[:servers][identity]= virtual_machine {'deployvirtualmachineresponse' => virtual_machine} end |
#destroy_virtual_machine(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/fog/cloudstack/requests/compute/destroy_virtual_machine.rb', line 23 def destroy_virtual_machine(={}) identity = ["id"] server = self.data[:servers][identity] unless server raise Fog::Compute::Cloudstack::BadRequest.new("Unable to execute API command attachserver due to invalid value. Object servers(uuid: #{identity}) does not exist.") end job_id = Fog::Cloudstack.uuid job = { "cmd" => "com.cloud.api.commands.DestroyVirtualMachineCmd", "created" => Time.now.iso8601, "jobid" => job_id, "jobstatus" => 1, "jobprocstatus" => 0, "jobresultcode" => 0, "jobresulttype" => "object", "jobresult" => {"virtualmachine" => server} } self.data[:jobs][job_id]= job self.data[:servers].delete(identity) {"destroyvirtualmachineresponse" => {"jobid" => job_id}} end |
#detach_volume(options = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/fog/cloudstack/requests/compute/detach_volume.rb', line 22 def detach_volume(={}) volume_id = ['id'] volume = self.data[:volumes][volume_id] unless volume raise Fog::Compute::Cloudstack::BadRequest.new("Unable to execute API command attachvolume due to invalid value. Object volumes(uuid: #{volume_id}) does not exist.") end volume['virtualmachineid']= volume['vmname']= volume['vmdisplayname']= nil job_id = Fog::Cloudstack.uuid # FIXME: need to determine current user account_id = self.data[:accounts].first user_id = self.data[:users].first job = { "accountid" => account_id, "userid" => user_id, "cmd" => "com.cloud.api.commands.DetachVolumeCmd", "created" => Time.now.iso8601, "jobid" => job_id, "jobstatus" => 1, "jobprocstatus" => 0, "jobresultcode" => 0, "jobresulttype" => "object", "jobresult" => {"volume" => volume} } self.data[:jobs][job_id]= job { "detachvolumeresponse" => { "jobid" => job_id } } end |
#extract_template(options = {}) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/fog/cloudstack/requests/compute/extract_template.rb', line 24 def extract_template(={}) Fog.credentials[:cloudstack_zone_id] = 1105 template_id = ['id'] template_mode = ['mode'] zoneid = self.data[:zones].keys[0] zone = self.data[:zones][zoneid] template = {} template['id'] = template_id template['name'] = "test template" template['extractId'] = 1 template['accountid'] = 1 template['state'] = "DOWNLOAD_URL_CREATED" template['zoneid'] = zoneid template['zonename'] = self.data[:zones][zoneid]["name"] template['extractMode'] = template_mode template['url'] = "http:%2F%2Fexample.com" job_id = 1 job = { "jobid" => job_id, "jobstatus" => 1, "jobprocstatus" => 0, "jobresultcode" => 0, "jobresulttype" => "object", "jobresult" => { "template" => template } } self.data[:jobs][job_id] = job { "extracttemplateresponse" => { "jobid" => job_id } } end |
#list_async_jobs(options = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 |
# File 'lib/fog/cloudstack/requests/compute/list_async_jobs.rb', line 22 def list_async_jobs(={}) # FIXME: support paging jobs = self.data[:jobs] { 'listasyncjobsresponse' => { 'count' => jobs.size, 'asyncjobs' => jobs } } end |
#list_disk_offerings(options = {}) ⇒ Object
TODO: add id, name filters and paging params
23 24 25 26 |
# File 'lib/fog/cloudstack/requests/compute/list_disk_offerings.rb', line 23 def list_disk_offerings(={}) disk_offerings = self.data[:disk_offerings] { "listdiskofferingsresponse" => { "count"=> disk_offerings.count, "diskoffering"=> disk_offerings.values } } end |
#list_os_types(options = {}) ⇒ Object
TODO: add id, category_id filters and paging params
23 24 25 26 |
# File 'lib/fog/cloudstack/requests/compute/list_os_types.rb', line 23 def list_os_types(={}) os_types = self.data[:os_types] { "listostypesresponse" => { "count"=> os_types.count, "ostype"=> os_types.values } } end |
#list_security_groups(options = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/fog/cloudstack/requests/compute/list_security_groups.rb', line 22 def list_security_groups(={}) security_groups = [] if security_group_id = ['id'] security_group = self.data[:security_groups][security_group_id] raise Fog::Compute::Cloudstack::BadRequest unless security_group security_groups = [security_group] else security_groups = self.data[:security_groups].values end { "listsecuritygroupsresponse" => { "count" => security_groups.size, "securitygroup" => security_groups } } end |
#list_service_offerings(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/fog/cloudstack/requests/compute/list_service_offerings.rb', line 23 def list_service_offerings(={}) flavors = [] if service_offering_id = ['id'] flavor = self.data[:flavors][service_offering_id] raise Fog::Compute::Cloudstack::BadRequest unless flavor flavors = [flavor] else flavors = self.data[:flavors].values end { "listserviceofferingsresponse" => { "count" => flavors.size, "serviceoffering"=> flavors } } end |
#list_snapshots(options = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/fog/cloudstack/requests/compute/list_snapshots.rb', line 22 def list_snapshots(={}) snapshot_id = .delete('id') if snapshot_id snapshots = [self.data[:snapshots][snapshot_id]] else snapshots = self.data[:snapshots].values end { 'listsnapshotsresponse' => { 'count' => snapshots.size, 'snapshot' => snapshots } } end |
#list_templates(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/fog/cloudstack/requests/compute/list_templates.rb', line 23 def list_templates(={}) templates = self.data[:images].values { "listtemplatesresponse" => { "count" => templates.size, "template"=> templates } } end |
#list_virtual_machines(options = {}) ⇒ Object
22 23 24 25 |
# File 'lib/fog/cloudstack/requests/compute/list_virtual_machines.rb', line 22 def list_virtual_machines(={}) {"listvirtualmachinesresponse" => {"count" => self.data[:servers].values.size, "virtualmachine" => self.data[:servers].values}} end |
#list_volumes(options = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/fog/cloudstack/requests/compute/list_volumes.rb', line 22 def list_volumes(={}) volume_id = .delete('id') if volume_id volumes = [self.data[:volumes][volume_id]] else volumes = self.data[:volumes].values end { 'listvolumesresponse' => { 'count' => volumes.size, 'volume' => volumes } } end |
#list_zones(options = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/fog/cloudstack/requests/compute/list_zones.rb', line 22 def list_zones(={}) zones = self.data[:zones].values { "listzonesresponse"=> { "count" => zones.size, "zone" => zones } } end |
#query_async_job_result(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/fog/cloudstack/requests/compute/query_async_job_result.rb', line 23 def query_async_job_result(={}) unless job_id = ['jobid'] raise Fog::Compute::Cloudstack::BadRequest.new("Missing required parameter jobid") end unless job = self.data[:jobs][job_id] raise Fog::Compute::Cloudstack::BadRequest.new("Unknown job id #{job_id}") end {'queryasyncjobresultresponse' => job } end |
#reboot_virtual_machine(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 |
# File 'lib/fog/cloudstack/requests/compute/reboot_virtual_machine.rb', line 23 def reboot_virtual_machine(={}) job_id = Fog::Cloudstack.uuid { "rebootvirtualmachineresponse" => { "jobid" => job_id } } end |
#register_template(options = {}) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/fog/cloudstack/requests/compute/register_template.rb', line 29 def register_template(={}) mock_template_id = self.data[:images].keys.first registered_template = self.data[:images][mock_template_id] { 'registertemplateresponse' => { 'count' => 1, 'template' => [registered_template] } } end |
#reset_data ⇒ Object
892 893 894 |
# File 'lib/fog/cloudstack/compute.rb', line 892 def reset_data self.class.data.delete(@cloudstack_api_key) end |
#revoke_security_group_egress(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/fog/cloudstack/requests/compute/revoke_security_group_egress.rb', line 23 def revoke_security_group_egress(={}) unless security_group_rule_id = ['id'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command missing parameter id') end security_group = self.data[:security_groups].values.find do |group| (rule = (group['egressrule'] || []).find{|r| r['ruleid'] == security_group_rule_id}) && group['egressrule'].delete(rule) end job_id = Fog::Cloudstack.uuid job = { "cmd" => "com.cloud.api.commands.revokeSecurityGroupEgress", "created" => Time.now.iso8601, "jobid" => job_id, "jobstatus" => 1, "jobprocstatus" => 0, "jobresultcode" => 0, "jobresulttype" => "object", "jobresult" => { "securitygroup" => security_group } } self.data[:jobs][job_id]= job {"revokesecuritygroupegress" => { "jobid" => job_id }} end |
#revoke_security_group_ingress(options = {}) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/fog/cloudstack/requests/compute/revoke_security_group_ingress.rb', line 23 def revoke_security_group_ingress(={}) unless security_group_rule_id = ['id'] raise Fog::Compute::Cloudstack::BadRequest.new('Unable to execute API command missing parameter id') end security_group = self.data[:security_groups].values.find do |group| (rule = (group['ingressrule'] || []).find{|r| r['ruleid'] == security_group_rule_id}) && group['ingressrule'].delete(rule) end job_id = Fog::Cloudstack.uuid job = { "cmd" => "com.cloud.api.commands.revokeSecurityGroupIngress", "created" => Time.now.iso8601, "jobid" => job_id, "jobstatus" => 1, "jobprocstatus" => 0, "jobresultcode" => 0, "jobresulttype" => "object", "jobresult" => { "securitygroup" => security_group } } self.data[:jobs][job_id]= job {"revokesecuritygroupingress" => { "jobid" => job_id }} end |