Class: Volume
Constant Summary
CloudstackCli::Helper::ASYNC_STATES
Instance Attribute Summary
#config
Instance Method Summary
collapse
exit_on_failure?, start
#resolve_account, #resolve_compute_offering, #resolve_disk_offering, #resolve_domain, #resolve_iso, #resolve_networks, #resolve_project, #resolve_snapshot, #resolve_template, #resolve_virtual_machine, #resolve_zone, #vm_options_to_params
#ask_number, #bootstrap_server, #bootstrap_server_interactive, #create_port_rules, #create_server, #get_server_default_nic, #get_server_fqdn, #get_server_public_ip, #get_ssh_port_forwarding_rule, #print_job_status, #print_options, #run_background_jobs, #update_job_status, #update_jobs, #watch_jobs
Instance Method Details
#attach(name) ⇒ Object
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/cloudstack-cli/commands/volume.rb', line 94
def attach(name)
resolve_project
resolve_virtual_machine
volume = client.list_volumes(
name: name,
listall: true,
project_id: options[:project_id]
).first
if !volume
say "Error: Volume #{name} not found.", :red
exit 1
elsif volume.has_key?("virtualmachineid")
say "Error: Volume #{name} already attached to VM #{volume["vmname"]}.", :red
exit 1
end
say "Attach volume #{name} to VM #{options[:virtual_machine]} "
client.attach_volume(
id: volume['id'],
virtualmachine_id: options[:virtual_machine_id]
)
say " OK.", :green
end
|
#create(name) ⇒ Object
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/cloudstack-cli/commands/volume.rb', line 68
def create(name)
options[:name] = name
resolve_project
resolve_zone
resolve_disk_offering
resolve_snapshot
resolve_virtual_machine
if !options[:disk_offering_id] && !options[:snapshot_id]
say "Either disk_offering or snapshot must be passed in.", :yellow
exit 1
elsif options[:disk_offering_id] && !options[:zone_id]
say "Zone is required when deploying with disk-offering.", :yellow
exit 1
end
say "Creating volume #{name} "
client.create_volume(options)
say " OK.", :green
sleep 2
invoke "volume:show", [name], options
end
|
#delete(name) ⇒ Object
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
# File 'lib/cloudstack-cli/commands/volume.rb', line 146
def delete(name)
resolve_project
volume = client.list_volumes(
name: name,
listall: true,
project_id: options[:project_id]
).first
if !volume
say "Error: Volume #{name} not found.", :red
exit 1
elsif volume.has_key?("virtualmachineid")
say "Error: Volume #{name} must be detached before deletion.", :red
exit 1
end
say "Delete volume #{name} "
client.delete_volume id: volume['id']
say " OK.", :green
end
|
#detach(name) ⇒ Object
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
# File 'lib/cloudstack-cli/commands/volume.rb', line 122
def detach(name)
resolve_project
volume = client.list_volumes(
name: name,
listall: true,
project_id: options[:project_id]
).first
if !volume
say "Error: Volume #{name} not found.", :red
exit 1
elsif !volume.has_key?("virtualmachineid")
say "Error: Volume #{name} currently not attached to any VM.", :red
exit 1
end
say "Detach volume #{name} from VM #{volume["vmname"]} "
client.detach_volume id: volume['id']
say " OK.", :green
end
|
#list ⇒ Object
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
|
# File 'lib/cloudstack-cli/commands/volume.rb', line 10
def list
resolve_project
resolve_account
resolve_zone
volumes = client.list_volumes(options)
if volumes.size < 1
say "No volumes found."
else
table = [%w(Name Type Size VM Storage Offeringname Zone Status)]
table.first << 'Project' if options[:project]
volumes.each do |volume|
table << [
volume['name'], volume['type'],
(volume['size'] / 1024**3).to_s + 'GB',
volume['vmname'],
volume['storage'],
volume['diskofferingname'],
volume['zonename'],
volume['state']
]
table.last << volume['project'] if options[:project]
end
print_table(table)
say "Total number of volumes: #{volumes.size}"
end
end
|
#show(name) ⇒ Object
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/cloudstack-cli/commands/volume.rb', line 39
def show(name)
resolve_project
options[:listall] = true
options[:name] = name
volumes = client.list_volumes(options)
if volumes.size < 1
say "No volume with name \"#{name}\" found."
else
volume = volumes.first
table = volume.map do |key, value|
[ set_color("#{key}:", :yellow), "#{value}" ]
end
print_table table
end
end
|