knife-cloudstack 0.0.15 → 0.0.16
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.rdoc +15 -0
- data/README.rdoc +18 -0
- data/lib/chef/knife/cs_aag_list.rb +58 -0
- data/lib/chef/knife/cs_account_list.rb +32 -75
- data/lib/chef/knife/cs_base.rb +2 -5
- data/lib/chef/knife/cs_baselist.rb +37 -7
- data/lib/chef/knife/cs_cluster_list.rb +18 -51
- data/lib/chef/knife/cs_config_list.rb +14 -43
- data/lib/chef/knife/cs_disk_list.rb +16 -47
- data/lib/chef/knife/cs_domain_list.rb +15 -45
- data/lib/chef/knife/cs_firewallrule_list.rb +19 -52
- data/lib/chef/knife/cs_host_list.rb +19 -53
- data/lib/chef/knife/cs_iso_list.rb +30 -44
- data/lib/chef/knife/cs_keypair_list.rb +12 -51
- data/lib/chef/knife/cs_network_list.rb +20 -51
- data/lib/chef/knife/cs_oscategory_list.rb +12 -40
- data/lib/chef/knife/cs_ostype_list.rb +15 -43
- data/lib/chef/knife/cs_pod_list.rb +18 -51
- data/lib/chef/knife/cs_project_list.rb +16 -45
- data/lib/chef/knife/cs_publicip_list.rb +16 -49
- data/lib/chef/knife/cs_router_list.rb +16 -46
- data/lib/chef/knife/cs_securitygroup_list.rb +14 -89
- data/lib/chef/knife/cs_server_add_nic.rb +109 -0
- data/lib/chef/knife/cs_server_create.rb +25 -5
- data/lib/chef/knife/cs_server_list.rb +35 -62
- data/lib/chef/knife/cs_server_remove_nic.rb +101 -0
- data/lib/chef/knife/cs_service_list.rb +19 -59
- data/lib/chef/knife/cs_stack_create.rb +2 -0
- data/lib/chef/knife/cs_template_list.rb +26 -55
- data/lib/chef/knife/cs_template_register.rb +4 -4
- data/lib/chef/knife/cs_user_list.rb +19 -50
- data/lib/chef/knife/cs_volume_list.rb +17 -46
- data/lib/chef/knife/cs_zone_list.rb +13 -57
- data/lib/knife-cloudstack/connection.rb +60 -9
- metadata +5 -3
@@ -16,20 +16,14 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'chef/knife
|
19
|
+
require 'chef/knife'
|
20
20
|
require 'chef/knife/cs_baselist'
|
21
21
|
|
22
22
|
module KnifeCloudstack
|
23
23
|
class CsOstypeList < Chef::Knife
|
24
24
|
|
25
|
-
include Chef::Knife::KnifeCloudstackBase
|
26
25
|
include Chef::Knife::KnifeCloudstackBaseList
|
27
|
-
|
28
|
-
deps do
|
29
|
-
require 'knife-cloudstack/connection'
|
30
|
-
Chef::Knife.load_deps
|
31
|
-
end
|
32
|
-
|
26
|
+
|
33
27
|
banner "knife cs ostype list (options)"
|
34
28
|
|
35
29
|
option :keyword,
|
@@ -39,41 +33,19 @@ module KnifeCloudstack
|
|
39
33
|
def run
|
40
34
|
validate_base_options
|
41
35
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
connection_result = connection.list_object(
|
57
|
-
"listOsTypes",
|
58
|
-
"ostype",
|
59
|
-
locate_config_value(:filter),
|
60
|
-
false,
|
61
|
-
locate_config_value(:keyword)
|
62
|
-
)
|
63
|
-
|
64
|
-
output_format(connection_result)
|
65
|
-
|
66
|
-
connection_result.each do |r|
|
67
|
-
if locate_config_value(:fields)
|
68
|
-
locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
|
69
|
-
else
|
70
|
-
object_list << r['id'].to_s
|
71
|
-
object_list << r['description'].to_s
|
72
|
-
object_list << r['oscategoryid'].to_s
|
73
|
-
end
|
74
|
-
end
|
75
|
-
puts ui.list(object_list, :uneven_columns_across, columns)
|
76
|
-
list_object_fields(connection_result) if locate_config_value(:fieldlist)
|
36
|
+
columns = [
|
37
|
+
'Description :description',
|
38
|
+
'ID :id',
|
39
|
+
'OS Categorie ID :oscategoryid'
|
40
|
+
]
|
41
|
+
|
42
|
+
params = { 'command' => "listOsTypes" }
|
43
|
+
params['filter'] = locate_config_value(:filter) if locate_config_value(:filter)
|
44
|
+
params['listall'] = locate_config_value(:listall) if locate_config_value(:listall)
|
45
|
+
params['keyword'] = locate_config_value(:keyword) if locate_config_value(:keyword)
|
46
|
+
|
47
|
+
result = connection.list_object(params, "ostype")
|
48
|
+
list_object(columns, result)
|
77
49
|
end
|
78
50
|
|
79
51
|
end
|
@@ -16,20 +16,14 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'chef/knife
|
19
|
+
require 'chef/knife'
|
20
20
|
require 'chef/knife/cs_baselist'
|
21
21
|
|
22
22
|
module KnifeCloudstack
|
23
23
|
class CsPodList < Chef::Knife
|
24
24
|
|
25
|
-
include Chef::Knife::KnifeCloudstackBase
|
26
25
|
include Chef::Knife::KnifeCloudstackBaseList
|
27
26
|
|
28
|
-
deps do
|
29
|
-
require 'knife-cloudstack/connection'
|
30
|
-
Chef::Knife.load_deps
|
31
|
-
end
|
32
|
-
|
33
27
|
banner "knife cs pod list (options)"
|
34
28
|
|
35
29
|
option :name,
|
@@ -43,50 +37,23 @@ module KnifeCloudstack
|
|
43
37
|
def run
|
44
38
|
validate_base_options
|
45
39
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
connection_result = connection.list_object(
|
65
|
-
"listPods",
|
66
|
-
"pod",
|
67
|
-
locate_config_value(:filter),
|
68
|
-
false,
|
69
|
-
locate_config_value(:keyword),
|
70
|
-
locate_config_value(:name)
|
71
|
-
)
|
72
|
-
|
73
|
-
output_format(connection_result)
|
74
|
-
|
75
|
-
connection_result.each do |r|
|
76
|
-
if locate_config_value(:fields)
|
77
|
-
locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
|
78
|
-
else
|
79
|
-
object_list << r['name'].to_s
|
80
|
-
object_list << r['zonename'].to_s
|
81
|
-
object_list << r['gateway'].to_s
|
82
|
-
object_list << r['netmask'].to_s
|
83
|
-
object_list << r['startip'].to_s
|
84
|
-
object_list << r['endip'].to_s
|
85
|
-
object_list << r['allocationstate'].to_s
|
86
|
-
end
|
87
|
-
end
|
88
|
-
puts ui.list(object_list, :uneven_columns_across, columns)
|
89
|
-
list_object_fields(connection_result) if locate_config_value(:fieldlist)
|
40
|
+
columns = [
|
41
|
+
'Name :name',
|
42
|
+
'Zone :zonename',
|
43
|
+
'Gateway :gateway',
|
44
|
+
'Netmask :netmask',
|
45
|
+
'Start IP :startip',
|
46
|
+
'End IP :endip',
|
47
|
+
'AllocationState :allocationstate'
|
48
|
+
]
|
49
|
+
|
50
|
+
params = { 'command' => "listPods" }
|
51
|
+
params['filter'] = locate_config_value(:filter) if locate_config_value(:filter)
|
52
|
+
params['keyword'] = locate_config_value(:keyword) if locate_config_value(:keyword)
|
53
|
+
params['name'] = locate_config_value(:name) if locate_config_value(:name)
|
54
|
+
|
55
|
+
result = connection.list_object(params, "pod")
|
56
|
+
list_object(columns, result)
|
90
57
|
end
|
91
58
|
|
92
59
|
end
|
@@ -16,20 +16,14 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'chef/knife
|
19
|
+
require 'chef/knife'
|
20
20
|
require 'chef/knife/cs_baselist'
|
21
21
|
|
22
22
|
module KnifeCloudstack
|
23
23
|
class CsProjectList < Chef::Knife
|
24
24
|
|
25
|
-
include Chef::Knife::KnifeCloudstackBase
|
26
25
|
include Chef::Knife::KnifeCloudstackBaseList
|
27
26
|
|
28
|
-
deps do
|
29
|
-
require 'knife-cloudstack/connection'
|
30
|
-
Chef::Knife.load_deps
|
31
|
-
end
|
32
|
-
|
33
27
|
banner "knife cs project list (options)"
|
34
28
|
|
35
29
|
option :listall,
|
@@ -48,44 +42,21 @@ module KnifeCloudstack
|
|
48
42
|
def run
|
49
43
|
validate_base_options
|
50
44
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
connection_result = connection.list_object(
|
67
|
-
"listProjects",
|
68
|
-
"project",
|
69
|
-
locate_config_value(:filter),
|
70
|
-
locate_config_value(:listall),
|
71
|
-
locate_config_value(:keyword),
|
72
|
-
locate_config_value(:name)
|
73
|
-
)
|
74
|
-
|
75
|
-
output_format(connection_result)
|
76
|
-
|
77
|
-
connection_result.each do |r|
|
78
|
-
if locate_config_value(:fields)
|
79
|
-
locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
|
80
|
-
else
|
81
|
-
object_list << r['name'].to_s
|
82
|
-
object_list << r['account'].to_s
|
83
|
-
object_list << r['domain'].to_s
|
84
|
-
object_list << r['state'].to_s
|
85
|
-
end
|
86
|
-
end
|
87
|
-
puts ui.list(object_list, :uneven_columns_across, columns)
|
88
|
-
list_object_fields(connection_result) if locate_config_value(:fieldlist)
|
45
|
+
columns = [
|
46
|
+
'Name :name',
|
47
|
+
'Account :account',
|
48
|
+
'Domain :domain',
|
49
|
+
'State :state'
|
50
|
+
]
|
51
|
+
|
52
|
+
params = { 'command' => "listProjects" }
|
53
|
+
params['filter'] = locate_config_value(:filter) if locate_config_value(:filter)
|
54
|
+
params['listall'] = locate_config_value(:listall) if locate_config_value(:listall)
|
55
|
+
params['keyword'] = locate_config_value(:keyword) if locate_config_value(:keyword)
|
56
|
+
params['name'] = locate_config_value(:name) if locate_config_value(:name)
|
57
|
+
|
58
|
+
result = connection.list_object(params, "project")
|
59
|
+
list_object(columns, result)
|
89
60
|
end
|
90
61
|
|
91
62
|
end
|
@@ -16,20 +16,14 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'chef/knife
|
19
|
+
require 'chef/knife'
|
20
20
|
require 'chef/knife/cs_baselist'
|
21
21
|
|
22
22
|
module KnifeCloudstack
|
23
23
|
class CsPublicipList < Chef::Knife
|
24
24
|
|
25
|
-
include Chef::Knife::KnifeCloudstackBase
|
26
25
|
include Chef::Knife::KnifeCloudstackBaseList
|
27
26
|
|
28
|
-
deps do
|
29
|
-
require 'knife-cloudstack/connection'
|
30
|
-
Chef::Knife.load_deps
|
31
|
-
end
|
32
|
-
|
33
27
|
banner "knife cs publicip list (options)"
|
34
28
|
|
35
29
|
option :listall,
|
@@ -40,48 +34,21 @@ module KnifeCloudstack
|
|
40
34
|
def run
|
41
35
|
validate_base_options
|
42
36
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
columns
|
58
|
-
object_list = [] if locate_config_value(:noheader)
|
59
|
-
|
60
|
-
connection_result = connection.list_object(
|
61
|
-
"listPublicIpAddresses",
|
62
|
-
"publicipaddress",
|
63
|
-
locate_config_value(:filter),
|
64
|
-
locate_config_value(:listall),
|
65
|
-
locate_config_value(:keyword),
|
66
|
-
locate_config_value(:name)
|
67
|
-
)
|
68
|
-
|
69
|
-
output_format(connection_result)
|
70
|
-
|
71
|
-
connection_result.each do |r|
|
72
|
-
if locate_config_value(:fields)
|
73
|
-
locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
|
74
|
-
else
|
75
|
-
object_list << r['ipaddress'].to_s
|
76
|
-
object_list << r['account'].to_s
|
77
|
-
object_list << r['domain'].to_s
|
78
|
-
object_list << r['zonename'].to_s
|
79
|
-
object_list << r['state'].to_s
|
80
|
-
object_list << r['allocated'].to_s
|
81
|
-
end
|
82
|
-
end
|
83
|
-
puts ui.list(object_list, :uneven_columns_across, columns)
|
84
|
-
list_object_fields(connection_result) if locate_config_value(:fieldlist)
|
37
|
+
columns = [
|
38
|
+
'IP :ipaddress',
|
39
|
+
'Account :account',
|
40
|
+
'Domain :domain',
|
41
|
+
'Zone :zonename',
|
42
|
+
'State :state',
|
43
|
+
'Allocated :allocated'
|
44
|
+
]
|
45
|
+
|
46
|
+
params = { 'command' => "listPublicIpAddresses" }
|
47
|
+
params['filter'] = locate_config_value(:filter) if locate_config_value(:filter)
|
48
|
+
params['listall'] = locate_config_value(:listall) if locate_config_value(:listall)
|
49
|
+
|
50
|
+
result = connection.list_object(params, "publicipaddress")
|
51
|
+
list_object(columns, result)
|
85
52
|
end
|
86
53
|
|
87
54
|
end
|
@@ -16,20 +16,14 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'chef/knife
|
19
|
+
require 'chef/knife'
|
20
20
|
require 'chef/knife/cs_baselist'
|
21
21
|
|
22
22
|
module KnifeCloudstack
|
23
23
|
class CsRouterList < Chef::Knife
|
24
24
|
|
25
|
-
include Chef::Knife::KnifeCloudstackBase
|
26
25
|
include Chef::Knife::KnifeCloudstackBaseList
|
27
26
|
|
28
|
-
deps do
|
29
|
-
require 'knife-cloudstack/connection'
|
30
|
-
Chef::Knife.load_deps
|
31
|
-
end
|
32
|
-
|
33
27
|
banner "knife cs router list (options)"
|
34
28
|
|
35
29
|
option :listall,
|
@@ -48,46 +42,22 @@ module KnifeCloudstack
|
|
48
42
|
def run
|
49
43
|
validate_base_options
|
50
44
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
ui.color('Domain', :bold),
|
59
|
-
ui.color('State', :bold),
|
60
|
-
ui.color('Address', :bold)
|
61
|
-
]
|
62
|
-
end
|
63
|
-
|
64
|
-
columns = object_list.count
|
65
|
-
object_list = [] if locate_config_value(:noheader)
|
66
|
-
|
67
|
-
connection_result = connection.list_object(
|
68
|
-
"listRouters",
|
69
|
-
"router",
|
70
|
-
locate_config_value(:filter),
|
71
|
-
locate_config_value(:listall),
|
72
|
-
locate_config_value(:keyword),
|
73
|
-
locate_config_value(:name)
|
74
|
-
)
|
75
|
-
|
76
|
-
output_format(connection_result)
|
45
|
+
columns = [
|
46
|
+
'Name :name',
|
47
|
+
'Account :account',
|
48
|
+
'Domain :domain',
|
49
|
+
'State :state',
|
50
|
+
'Address :publicip'
|
51
|
+
]
|
77
52
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
object_list << r['publicip'].to_s
|
87
|
-
end
|
88
|
-
end
|
89
|
-
puts ui.list(object_list, :uneven_columns_across, columns)
|
90
|
-
list_object_fields(connection_result) if locate_config_value(:fieldlist)
|
53
|
+
params = { 'command' => "listRouters" }
|
54
|
+
params['filter'] = locate_config_value(:filter) if locate_config_value(:filter)
|
55
|
+
params['listall'] = locate_config_value(:listall) if locate_config_value(:listall)
|
56
|
+
params['keyword'] = locate_config_value(:keyword) if locate_config_value(:keyword)
|
57
|
+
params['name'] = locate_config_value(:name) if locate_config_value(:name)
|
58
|
+
|
59
|
+
result = connection.list_object(params, "router")
|
60
|
+
list_object(columns, result)
|
91
61
|
end
|
92
62
|
|
93
63
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
#
|
2
2
|
# Author:: Ryan Holmes (<rholmes@edmunds.com>)
|
3
3
|
# Author:: Sander Botman (<sbotman@schubergphilis.com>)
|
4
4
|
# Author:: Sebastien Goasguen (<runseb@gmail.com>)
|
@@ -19,21 +19,14 @@
|
|
19
19
|
# limitations under the License.
|
20
20
|
#
|
21
21
|
|
22
|
-
require 'chef/knife
|
22
|
+
require 'chef/knife'
|
23
23
|
require 'chef/knife/cs_baselist'
|
24
24
|
|
25
25
|
module KnifeCloudstack
|
26
26
|
class CsSecuritygroupList < Chef::Knife
|
27
27
|
|
28
|
-
include Chef::Knife::KnifeCloudstackBase
|
29
28
|
include Chef::Knife::KnifeCloudstackBaseList
|
30
|
-
|
31
|
-
deps do
|
32
|
-
require 'chef/knife'
|
33
|
-
require 'knife-cloudstack/connection'
|
34
|
-
Chef::Knife.load_deps
|
35
|
-
end
|
36
|
-
|
29
|
+
|
37
30
|
banner "knife cs securitygroup list (options)"
|
38
31
|
|
39
32
|
option :name,
|
@@ -44,90 +37,22 @@ module KnifeCloudstack
|
|
44
37
|
:long => "--keyword NAME",
|
45
38
|
:description => "Specify part of servicename to list"
|
46
39
|
|
47
|
-
option :index,
|
48
|
-
:long => "--index",
|
49
|
-
:description => "Add index numbers to the output",
|
50
|
-
:boolean => true
|
51
|
-
|
52
40
|
def run
|
53
41
|
validate_base_options
|
54
|
-
|
55
|
-
object_list = []
|
56
|
-
object_list << ui.color('Index', :bold) if locate_config_value(:index)
|
57
|
-
|
58
|
-
if locate_config_value(:fields)
|
59
|
-
locate_config_value(:fields).split(',').each { |n| object_list << ui.color(("#{n}").strip, :bold) }
|
60
|
-
elsif locate_config_value(:keyword)
|
61
|
-
[
|
62
|
-
ui.color('Name', :bold),
|
63
|
-
ui.color('Description', :bold),
|
64
|
-
ui.color('Account', :bold),
|
65
|
-
ui.color('IngressRules', :bold)
|
66
|
-
].each { |field| object_list << field }
|
67
|
-
else
|
68
|
-
[
|
69
|
-
ui.color('Name', :bold),
|
70
|
-
ui.color('Description', :bold),
|
71
|
-
ui.color('Account', :bold)
|
72
|
-
].each { |field| object_list << field }
|
73
|
-
end
|
74
42
|
|
75
|
-
columns =
|
76
|
-
|
43
|
+
columns = [
|
44
|
+
'Name :name',
|
45
|
+
'Description :description',
|
46
|
+
'Account :account'
|
47
|
+
]
|
77
48
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
false,
|
83
|
-
locate_config_value(:keyword),
|
84
|
-
locate_config_value(:name)
|
85
|
-
)
|
86
|
-
|
87
|
-
output_format(connection_result)
|
88
|
-
|
89
|
-
if locate_config_value(:keyword)
|
90
|
-
index_num = 0
|
91
|
-
connection_result['ingressrule'].each do |r|
|
92
|
-
if r.nil?
|
93
|
-
else
|
94
|
-
if locate_config_value(:index)
|
95
|
-
index_num += 1
|
96
|
-
object_list << index_num.to_s
|
97
|
-
end
|
98
|
-
|
99
|
-
if locate_config_value(:fields)
|
100
|
-
locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
|
101
|
-
else
|
102
|
-
object_list << connection_result['name'].to_s
|
103
|
-
object_list << connection_result['description'].to_s
|
104
|
-
object_list << connection_result['account'].to_s
|
105
|
-
object_list << r.to_s
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
else
|
111
|
-
index_num = 0
|
112
|
-
connection_result.each do |r|
|
113
|
-
if locate_config_value(:index)
|
114
|
-
index_num += 1
|
115
|
-
object_list << index_num.to_s
|
116
|
-
end
|
117
|
-
|
118
|
-
if locate_config_value(:fields)
|
119
|
-
locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
|
120
|
-
else
|
121
|
-
object_list << r['name'].to_s
|
122
|
-
object_list << r['description'].to_s
|
123
|
-
object_list << r['account'].to_s
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
end
|
49
|
+
params = { 'command' => "listSecurityGroups" }
|
50
|
+
params['filter'] = locate_config_value(:filter) if locate_config_value(:filter)
|
51
|
+
params['keyword'] = locate_config_value(:keyword) if locate_config_value(:keyword)
|
52
|
+
params['name'] = locate_config_value(:name) if locate_config_value(:name)
|
128
53
|
|
129
|
-
|
130
|
-
|
54
|
+
result = connection.list_object(params, "securitygroup")
|
55
|
+
list_object(columns, result)
|
131
56
|
end
|
132
57
|
|
133
58
|
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
#
|
2
|
+
# Author:: John E. Vincent (<lusis.org+github.com@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2013 John E. Vincent
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'chef/knife/cs_base'
|
20
|
+
require 'chef/knife/cs_baselist'
|
21
|
+
|
22
|
+
module KnifeCloudstack
|
23
|
+
class CsServerAddNic < Chef::Knife
|
24
|
+
|
25
|
+
include Chef::Knife::KnifeCloudstackBase
|
26
|
+
include Chef::Knife::KnifeCloudstackBaseList
|
27
|
+
|
28
|
+
deps do
|
29
|
+
require 'knife-cloudstack/connection'
|
30
|
+
require 'chef/knife'
|
31
|
+
Chef::Knife.load_deps
|
32
|
+
end
|
33
|
+
|
34
|
+
banner "knife cs server add nic SERVERID NETWORKID (--ipaddress X.X.X.X)"
|
35
|
+
|
36
|
+
option :ipaddress,
|
37
|
+
:long => "--ipaddress IPADDRESS",
|
38
|
+
:description => "Attach with the specified IP",
|
39
|
+
:default => nil
|
40
|
+
|
41
|
+
|
42
|
+
def run
|
43
|
+
validate_base_options
|
44
|
+
|
45
|
+
@server_id, @network_id = name_args
|
46
|
+
|
47
|
+
if @network_id.nil? || @server_id.nil?
|
48
|
+
show_usage
|
49
|
+
ui.fatal("You must provide both a network id and a server id")
|
50
|
+
exit(1)
|
51
|
+
end
|
52
|
+
|
53
|
+
@ipaddr = locate_config_value(:ipaddress)
|
54
|
+
|
55
|
+
object_list = []
|
56
|
+
if locate_config_value(:fields)
|
57
|
+
locate_config_value(:fields).split(',').each { |n| object_list << ui.color(("#{n}").strip, :bold) }
|
58
|
+
else
|
59
|
+
object_list << ui.color('Server', :bold)
|
60
|
+
object_list << ui.color('Network', :bold)
|
61
|
+
object_list << ui.color('Type', :bold)
|
62
|
+
object_list << ui.color('Default', :bold)
|
63
|
+
object_list << ui.color('Address', :bold)
|
64
|
+
object_list << ui.color('Gateway', :bold)
|
65
|
+
object_list << ui.color('Netmask', :bold)
|
66
|
+
object_list << ui.color('ID', :bold)
|
67
|
+
end
|
68
|
+
|
69
|
+
columns = object_list.count
|
70
|
+
|
71
|
+
connection_result = connection.add_nic_to_vm(
|
72
|
+
@network_id,
|
73
|
+
@server_id,
|
74
|
+
@ipaddr
|
75
|
+
)
|
76
|
+
|
77
|
+
output_format(connection_result)
|
78
|
+
|
79
|
+
object_list << connection_result['name']
|
80
|
+
object_list << ''
|
81
|
+
object_list << ''
|
82
|
+
object_list << ''
|
83
|
+
object_list << ''
|
84
|
+
object_list << ''
|
85
|
+
object_list << ''
|
86
|
+
object_list << ''
|
87
|
+
if connection_result['nic']
|
88
|
+
connection_result['nic'].each do |r|
|
89
|
+
if locate_config_value(:fields)
|
90
|
+
locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
|
91
|
+
else
|
92
|
+
object_list << ''
|
93
|
+
object_list << r['networkname'].to_s
|
94
|
+
object_list << r['type'].to_s
|
95
|
+
object_list << (r['isdefault'] ? r['isdefault'].to_s : 'false')
|
96
|
+
object_list << (r['ipaddress'] || '')
|
97
|
+
object_list << (r['gateway'] || '')
|
98
|
+
object_list << (r['netmask'] || '')
|
99
|
+
object_list << (r['networkid'] || '')
|
100
|
+
end
|
101
|
+
end
|
102
|
+
puts ui.list(object_list, :uneven_columns_across, columns)
|
103
|
+
list_object_fields(connection_result) if locate_config_value(:fieldlist)
|
104
|
+
else
|
105
|
+
ui.error("No nics returned in response")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|