knife-ionoscloud 5.1.0 → 6.0.0.alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/knife-ionoscloud.gemspec +1 -1
  3. data/lib/chef/knife/ionoscloud_backupunit_create.rb +1 -1
  4. data/lib/chef/knife/ionoscloud_backupunit_delete.rb +1 -1
  5. data/lib/chef/knife/ionoscloud_backupunit_list.rb +1 -1
  6. data/lib/chef/knife/ionoscloud_backupunit_ssourl.rb +1 -1
  7. data/lib/chef/knife/ionoscloud_base.rb +1 -1
  8. data/lib/chef/knife/ionoscloud_composite_server_create.rb +25 -23
  9. data/lib/chef/knife/ionoscloud_contract_list.rb +32 -23
  10. data/lib/chef/knife/ionoscloud_cube_server_create.rb +215 -0
  11. data/lib/chef/knife/ionoscloud_datacenter_create.rb +1 -1
  12. data/lib/chef/knife/ionoscloud_datacenter_delete.rb +1 -1
  13. data/lib/chef/knife/ionoscloud_datacenter_list.rb +4 -2
  14. data/lib/chef/knife/ionoscloud_firewall_create.rb +11 -4
  15. data/lib/chef/knife/ionoscloud_firewall_delete.rb +4 -3
  16. data/lib/chef/knife/ionoscloud_firewall_list.rb +5 -3
  17. data/lib/chef/knife/ionoscloud_flowlog_create.rb +121 -0
  18. data/lib/chef/knife/ionoscloud_flowlog_delete.rb +106 -0
  19. data/lib/chef/knife/ionoscloud_flowlog_list.rb +100 -0
  20. data/lib/chef/knife/ionoscloud_group_create.rb +35 -14
  21. data/lib/chef/knife/ionoscloud_group_delete.rb +7 -0
  22. data/lib/chef/knife/ionoscloud_group_get.rb +6 -0
  23. data/lib/chef/knife/ionoscloud_group_list.rb +19 -7
  24. data/lib/chef/knife/ionoscloud_image_list.rb +1 -1
  25. data/lib/chef/knife/ionoscloud_ipfailover_add.rb +1 -1
  26. data/lib/chef/knife/ionoscloud_ipfailover_remove.rb +1 -1
  27. data/lib/chef/knife/ionoscloud_k8s_delete.rb +5 -2
  28. data/lib/chef/knife/ionoscloud_label_add.rb +1 -1
  29. data/lib/chef/knife/ionoscloud_label_list.rb +1 -1
  30. data/lib/chef/knife/ionoscloud_label_remove.rb +1 -1
  31. data/lib/chef/knife/ionoscloud_lan_create.rb +1 -1
  32. data/lib/chef/knife/ionoscloud_lan_delete.rb +1 -1
  33. data/lib/chef/knife/ionoscloud_lan_list.rb +1 -1
  34. data/lib/chef/knife/ionoscloud_loadbalancer_create.rb +1 -1
  35. data/lib/chef/knife/ionoscloud_loadbalancer_delete.rb +1 -1
  36. data/lib/chef/knife/ionoscloud_loadbalancer_get.rb +1 -1
  37. data/lib/chef/knife/ionoscloud_loadbalancer_list.rb +1 -1
  38. data/lib/chef/knife/ionoscloud_loadbalancer_nic_add.rb +1 -1
  39. data/lib/chef/knife/ionoscloud_loadbalancer_nic_remove.rb +1 -1
  40. data/lib/chef/knife/ionoscloud_location_list.rb +5 -3
  41. data/lib/chef/knife/ionoscloud_natgateway_create.rb +71 -0
  42. data/lib/chef/knife/ionoscloud_natgateway_delete.rb +69 -0
  43. data/lib/chef/knife/ionoscloud_natgateway_lan_add.rb +82 -0
  44. data/lib/chef/knife/ionoscloud_natgateway_lan_remove.rb +58 -0
  45. data/lib/chef/knife/ionoscloud_natgateway_list.rb +49 -0
  46. data/lib/chef/knife/ionoscloud_natgateway_rule_add.rb +124 -0
  47. data/lib/chef/knife/ionoscloud_natgateway_rule_list.rb +63 -0
  48. data/lib/chef/knife/ionoscloud_natgateway_rule_remove.rb +72 -0
  49. data/lib/chef/knife/ionoscloud_networkloadbalancer_create.rb +95 -0
  50. data/lib/chef/knife/ionoscloud_networkloadbalancer_delete.rb +81 -0
  51. data/lib/chef/knife/ionoscloud_networkloadbalancer_list.rb +56 -0
  52. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_add.rb +150 -0
  53. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_list.rb +63 -0
  54. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_remove.rb +78 -0
  55. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_target_add.rb +141 -0
  56. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_target_list.rb +68 -0
  57. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_target_remove.rb +105 -0
  58. data/lib/chef/knife/ionoscloud_nic_create.rb +14 -9
  59. data/lib/chef/knife/ionoscloud_nic_delete.rb +4 -2
  60. data/lib/chef/knife/ionoscloud_nic_list.rb +9 -5
  61. data/lib/chef/knife/ionoscloud_node_list.rb +0 -1
  62. data/lib/chef/knife/ionoscloud_nodepool_create.rb +42 -16
  63. data/lib/chef/knife/ionoscloud_nodepool_delete.rb +25 -0
  64. data/lib/chef/knife/ionoscloud_nodepool_lan_add.rb +130 -0
  65. data/lib/chef/knife/ionoscloud_nodepool_lan_remove.rb +96 -0
  66. data/lib/chef/knife/ionoscloud_nodepool_list.rb +3 -1
  67. data/lib/chef/knife/ionoscloud_pcc_create.rb +2 -2
  68. data/lib/chef/knife/ionoscloud_pcc_delete.rb +1 -1
  69. data/lib/chef/knife/ionoscloud_pcc_list.rb +1 -1
  70. data/lib/chef/knife/ionoscloud_request_list.rb +1 -1
  71. data/lib/chef/knife/ionoscloud_request_status.rb +1 -1
  72. data/lib/chef/knife/ionoscloud_s3key_create.rb +2 -2
  73. data/lib/chef/knife/ionoscloud_s3key_delete.rb +3 -3
  74. data/lib/chef/knife/ionoscloud_s3key_list.rb +2 -2
  75. data/lib/chef/knife/ionoscloud_server_console.rb +42 -0
  76. data/lib/chef/knife/ionoscloud_server_create.rb +8 -8
  77. data/lib/chef/knife/ionoscloud_server_delete.rb +1 -1
  78. data/lib/chef/knife/ionoscloud_server_list.rb +16 -5
  79. data/lib/chef/knife/ionoscloud_server_reboot.rb +1 -1
  80. data/lib/chef/knife/ionoscloud_server_resume.rb +43 -0
  81. data/lib/chef/knife/ionoscloud_server_start.rb +1 -1
  82. data/lib/chef/knife/ionoscloud_server_stop.rb +1 -1
  83. data/lib/chef/knife/ionoscloud_server_suspend.rb +44 -0
  84. data/lib/chef/knife/ionoscloud_server_token.rb +42 -0
  85. data/lib/chef/knife/ionoscloud_server_upgrade.rb +44 -0
  86. data/lib/chef/knife/ionoscloud_snapshot_create.rb +2 -2
  87. data/lib/chef/knife/ionoscloud_snapshot_delete.rb +1 -1
  88. data/lib/chef/knife/ionoscloud_snapshot_list.rb +1 -1
  89. data/lib/chef/knife/ionoscloud_snapshot_restore.rb +2 -2
  90. data/lib/chef/knife/ionoscloud_template_list.rb +46 -0
  91. data/lib/chef/knife/ionoscloud_user_ssourl.rb +1 -1
  92. data/lib/chef/knife/ionoscloud_volume_attach.rb +1 -1
  93. data/lib/chef/knife/ionoscloud_volume_create.rb +33 -35
  94. data/lib/chef/knife/ionoscloud_volume_delete.rb +1 -1
  95. data/lib/chef/knife/ionoscloud_volume_detach.rb +1 -1
  96. data/lib/chef/knife/ionoscloud_volume_list.rb +2 -2
  97. data/lib/knife-ionoscloud/version.rb +1 -1
  98. data/spec/chef/knife/ionoscloud_backupunit_create_spec.rb +2 -2
  99. data/spec/chef/knife/ionoscloud_backupunit_delete_spec.rb +5 -5
  100. data/spec/chef/knife/ionoscloud_backupunit_list_spec.rb +1 -1
  101. data/spec/chef/knife/ionoscloud_backupunit_ssourl_spec.rb +3 -3
  102. data/spec/chef/knife/ionoscloud_base_spec.rb +4 -4
  103. data/spec/chef/knife/ionoscloud_composite_server_create_spec.rb +11 -8
  104. data/spec/chef/knife/ionoscloud_contract_list_spec.rb +32 -27
  105. data/spec/chef/knife/ionoscloud_cube_server_create_spec.rb +249 -0
  106. data/spec/chef/knife/ionoscloud_datacenter_create_spec.rb +3 -2
  107. data/spec/chef/knife/ionoscloud_datacenter_delete_spec.rb +5 -5
  108. data/spec/chef/knife/ionoscloud_datacenter_list_spec.rb +5 -3
  109. data/spec/chef/knife/ionoscloud_firewall_create_spec.rb +5 -3
  110. data/spec/chef/knife/ionoscloud_firewall_delete_spec.rb +6 -5
  111. data/spec/chef/knife/ionoscloud_firewall_list_spec.rb +5 -3
  112. data/spec/chef/knife/ionoscloud_flowlog_create_spec.rb +254 -0
  113. data/spec/chef/knife/ionoscloud_flowlog_delete_spec.rb +360 -0
  114. data/spec/chef/knife/ionoscloud_flowlog_list_spec.rb +264 -0
  115. data/spec/chef/knife/ionoscloud_group_create_spec.rb +6 -0
  116. data/spec/chef/knife/ionoscloud_group_delete_spec.rb +6 -0
  117. data/spec/chef/knife/ionoscloud_group_get_spec.rb +6 -0
  118. data/spec/chef/knife/ionoscloud_group_list_spec.rb +26 -8
  119. data/spec/chef/knife/ionoscloud_image_list_spec.rb +2 -2
  120. data/spec/chef/knife/ionoscloud_ipfailover_add_spec.rb +3 -3
  121. data/spec/chef/knife/ionoscloud_ipfailover_remove_spec.rb +4 -4
  122. data/spec/chef/knife/ionoscloud_k8s_delete_spec.rb +5 -2
  123. data/spec/chef/knife/ionoscloud_kubeconfig_get_spec.rb +2 -2
  124. data/spec/chef/knife/ionoscloud_label_add_spec.rb +10 -10
  125. data/spec/chef/knife/ionoscloud_label_list_spec.rb +14 -14
  126. data/spec/chef/knife/ionoscloud_label_remove_spec.rb +20 -20
  127. data/spec/chef/knife/ionoscloud_lan_create_spec.rb +3 -3
  128. data/spec/chef/knife/ionoscloud_lan_delete_spec.rb +5 -5
  129. data/spec/chef/knife/ionoscloud_lan_list_spec.rb +2 -2
  130. data/spec/chef/knife/ionoscloud_loadbalancer_create_spec.rb +3 -3
  131. data/spec/chef/knife/ionoscloud_loadbalancer_delete_spec.rb +5 -5
  132. data/spec/chef/knife/ionoscloud_loadbalancer_get_spec.rb +2 -2
  133. data/spec/chef/knife/ionoscloud_loadbalancer_list_spec.rb +2 -2
  134. data/spec/chef/knife/ionoscloud_loadbalancer_nic_add_spec.rb +6 -6
  135. data/spec/chef/knife/ionoscloud_loadbalancer_nic_remove_spec.rb +6 -6
  136. data/spec/chef/knife/ionoscloud_location_list_spec.rb +5 -3
  137. data/spec/chef/knife/ionoscloud_natgateway_create_spec.rb +77 -0
  138. data/spec/chef/knife/ionoscloud_natgateway_delete_spec.rb +118 -0
  139. data/spec/chef/knife/ionoscloud_natgateway_lan_add_spec.rb +143 -0
  140. data/spec/chef/knife/ionoscloud_natgateway_lan_remove_spec.rb +194 -0
  141. data/spec/chef/knife/ionoscloud_natgateway_list_spec.rb +79 -0
  142. data/spec/chef/knife/ionoscloud_natgateway_rule_add_spec.rb +98 -0
  143. data/spec/chef/knife/ionoscloud_natgateway_rule_list_spec.rb +92 -0
  144. data/spec/chef/knife/ionoscloud_natgateway_rule_remove_spec.rb +77 -0
  145. data/spec/chef/knife/ionoscloud_networkloadbalancer_create_spec.rb +80 -0
  146. data/spec/chef/knife/ionoscloud_networkloadbalancer_delete_spec.rb +119 -0
  147. data/spec/chef/knife/ionoscloud_networkloadbalancer_list_spec.rb +88 -0
  148. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_add_spec.rb +104 -0
  149. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_list_spec.rb +89 -0
  150. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_remove_spec.rb +124 -0
  151. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_target_add_spec.rb +109 -0
  152. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_target_list_spec.rb +85 -0
  153. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_target_remove_spec.rb +263 -0
  154. data/spec/chef/knife/ionoscloud_nic_create_spec.rb +9 -5
  155. data/spec/chef/knife/ionoscloud_nic_delete_spec.rb +8 -6
  156. data/spec/chef/knife/ionoscloud_nic_list_spec.rb +12 -6
  157. data/spec/chef/knife/ionoscloud_nodepool_create_spec.rb +15 -1
  158. data/spec/chef/knife/ionoscloud_nodepool_lan_add_spec.rb +226 -0
  159. data/spec/chef/knife/ionoscloud_nodepool_lan_remove.rb +199 -0
  160. data/spec/chef/knife/ionoscloud_nodepool_list_spec.rb +3 -1
  161. data/spec/chef/knife/ionoscloud_pcc_create_spec.rb +6 -6
  162. data/spec/chef/knife/ionoscloud_pcc_delete_spec.rb +5 -5
  163. data/spec/chef/knife/ionoscloud_pcc_list_spec.rb +2 -2
  164. data/spec/chef/knife/ionoscloud_request_list_spec.rb +16 -16
  165. data/spec/chef/knife/ionoscloud_request_status_spec.rb +3 -3
  166. data/spec/chef/knife/ionoscloud_s3key_create_spec.rb +2 -2
  167. data/spec/chef/knife/ionoscloud_s3key_delete_spec.rb +5 -5
  168. data/spec/chef/knife/ionoscloud_s3key_list_spec.rb +2 -2
  169. data/spec/chef/knife/ionoscloud_server_console_spec.rb +97 -0
  170. data/spec/chef/knife/ionoscloud_server_create_spec.rb +3 -3
  171. data/spec/chef/knife/ionoscloud_server_delete_spec.rb +5 -5
  172. data/spec/chef/knife/ionoscloud_server_list_spec.rb +63 -5
  173. data/spec/chef/knife/ionoscloud_server_reboot_spec.rb +3 -5
  174. data/spec/chef/knife/ionoscloud_server_resume_spec.rb +93 -0
  175. data/spec/chef/knife/ionoscloud_server_start_spec.rb +3 -5
  176. data/spec/chef/knife/ionoscloud_server_stop_spec.rb +3 -5
  177. data/spec/chef/knife/ionoscloud_server_suspend_spec.rb +93 -0
  178. data/spec/chef/knife/ionoscloud_server_token_spec.rb +97 -0
  179. data/spec/chef/knife/ionoscloud_server_upgrade_spec.rb +96 -0
  180. data/spec/chef/knife/ionoscloud_snapshot_create_spec.rb +3 -3
  181. data/spec/chef/knife/ionoscloud_snapshot_delete_spec.rb +5 -5
  182. data/spec/chef/knife/ionoscloud_snapshot_list_spec.rb +2 -2
  183. data/spec/chef/knife/ionoscloud_snapshot_restore_spec.rb +3 -3
  184. data/spec/chef/knife/ionoscloud_template_list_spec.rb +78 -0
  185. data/spec/chef/knife/ionoscloud_user_ssourl_spec.rb +3 -3
  186. data/spec/chef/knife/ionoscloud_volume_attach_spec.rb +4 -4
  187. data/spec/chef/knife/ionoscloud_volume_create_spec.rb +6 -58
  188. data/spec/chef/knife/ionoscloud_volume_delete_spec.rb +5 -5
  189. data/spec/chef/knife/ionoscloud_volume_detach_spec.rb +5 -5
  190. data/spec/chef/knife/ionoscloud_volume_list_spec.rb +4 -4
  191. data/spec/spec_helper.rb +223 -29
  192. metadata +93 -6
@@ -12,8 +12,8 @@ describe Chef::Knife::IonoscloudContractList do
12
12
  end
13
13
 
14
14
  describe '#run' do
15
- it 'should call ContractApi.contracts_get' do
16
- contract = contract_mock
15
+ it 'should call ContractResourcesApi.contracts_get' do
16
+ contracts = contracts_mock
17
17
  subject_config = {
18
18
  ionoscloud_username: 'email',
19
19
  ionoscloud_password: 'password',
@@ -21,28 +21,33 @@ describe Chef::Knife::IonoscloudContractList do
21
21
 
22
22
  subject_config.each { |key, value| subject.config[key] = value }
23
23
 
24
- expect(subject).to receive(:puts).with("Contract Type: #{contract.type}")
25
- expect(subject).to receive(:puts).with("Contract Owner: #{contract.properties.owner}")
26
- expect(subject).to receive(:puts).with("Contract Number: #{contract.properties.contract_number}")
27
- expect(subject).to receive(:puts).with("Registration Domain: #{contract.properties.reg_domain}")
28
- expect(subject).to receive(:puts).with("Status: #{contract.properties.status}")
29
- expect(subject).to receive(:puts).with("Cores per contract: #{contract.properties.resource_limits.cores_per_contract}")
30
- expect(subject).to receive(:puts).with("Cores per server: #{contract.properties.resource_limits.cores_per_server}")
31
- expect(subject).to receive(:puts).with("Cores provisioned: #{contract.properties.resource_limits.cores_provisioned}")
32
- expect(subject).to receive(:puts).with("HDD limit per contract: #{contract.properties.resource_limits.hdd_limit_per_contract}")
33
- expect(subject).to receive(:puts).with("HDD limit per volume: #{contract.properties.resource_limits.hdd_limit_per_volume}")
34
- expect(subject).to receive(:puts).with("HDD volume provisioned: #{contract.properties.resource_limits.hdd_volume_provisioned}")
35
- expect(subject).to receive(:puts).with("RAM per contract: #{contract.properties.resource_limits.ram_per_contract}")
36
- expect(subject).to receive(:puts).with("RAM per server: #{contract.properties.resource_limits.ram_per_server}")
37
- expect(subject).to receive(:puts).with("RAM provisioned: #{contract.properties.resource_limits.ram_provisioned}")
38
- expect(subject).to receive(:puts).with("Reservable IPs: #{contract.properties.resource_limits.reservable_ips}")
39
- expect(subject).to receive(:puts).with("Reservable IPs in use: #{contract.properties.resource_limits.reserved_ips_in_use}")
40
- expect(subject).to receive(:puts).with("Reservable IPs on contract: #{contract.properties.resource_limits.reserved_ips_on_contract}")
41
- expect(subject).to receive(:puts).with("SSD limit per contract: #{contract.properties.resource_limits.ssd_limit_per_contract}")
42
- expect(subject).to receive(:puts).with("SSD limit per volume: #{contract.properties.resource_limits.ssd_limit_per_volume}")
43
- expect(subject).to receive(:puts).with("SSD volume provisioned: #{contract.properties.resource_limits.ssd_volume_provisioned}")
44
- expect(subject).to receive(:puts).with("K8s Cluster Limit Total: #{contract.properties.resource_limits.k8s_cluster_limit_total}")
45
- expect(subject).to receive(:puts).with("K8s Clusters provisioned: #{contract.properties.resource_limits.k8s_clusters_provisioned}")
24
+ expect(subject).to receive(:puts).with("Contract Type: #{contracts.items.first.type}")
25
+ expect(subject).to receive(:puts).with("Contract Owner: #{contracts.items.first.properties.owner}")
26
+ expect(subject).to receive(:puts).with("Contract Number: #{contracts.items.first.properties.contract_number}")
27
+ expect(subject).to receive(:puts).with("Registration Domain: #{contracts.items.first.properties.reg_domain}")
28
+ expect(subject).to receive(:puts).with("Status: #{contracts.items.first.properties.status}")
29
+ expect(subject).to receive(:puts).with("Cores per contract: #{contracts.items.first.properties.resource_limits.cores_per_contract}")
30
+ expect(subject).to receive(:puts).with("Cores per server: #{contracts.items.first.properties.resource_limits.cores_per_server}")
31
+ expect(subject).to receive(:puts).with("Cores provisioned: #{contracts.items.first.properties.resource_limits.cores_provisioned}")
32
+ expect(subject).to receive(:puts).with("HDD limit per contract: #{contracts.items.first.properties.resource_limits.hdd_limit_per_contract}")
33
+ expect(subject).to receive(:puts).with("HDD limit per volume: #{contracts.items.first.properties.resource_limits.hdd_limit_per_volume}")
34
+ expect(subject).to receive(:puts).with("HDD volume provisioned: #{contracts.items.first.properties.resource_limits.hdd_volume_provisioned}")
35
+ expect(subject).to receive(:puts).with("RAM per contract: #{contracts.items.first.properties.resource_limits.ram_per_contract}")
36
+ expect(subject).to receive(:puts).with("RAM per server: #{contracts.items.first.properties.resource_limits.ram_per_server}")
37
+ expect(subject).to receive(:puts).with("RAM provisioned: #{contracts.items.first.properties.resource_limits.ram_provisioned}")
38
+ expect(subject).to receive(:puts).with("Reservable IPs: #{contracts.items.first.properties.resource_limits.reservable_ips}")
39
+ expect(subject).to receive(:puts).with("Reservable IPs in use: #{contracts.items.first.properties.resource_limits.reserved_ips_in_use}")
40
+ expect(subject).to receive(:puts).with("Reservable IPs on contract: #{contracts.items.first.properties.resource_limits.reserved_ips_on_contract}")
41
+ expect(subject).to receive(:puts).with("SSD limit per contract: #{contracts.items.first.properties.resource_limits.ssd_limit_per_contract}")
42
+ expect(subject).to receive(:puts).with("SSD limit per volume: #{contracts.items.first.properties.resource_limits.ssd_limit_per_volume}")
43
+ expect(subject).to receive(:puts).with("SSD volume provisioned: #{contracts.items.first.properties.resource_limits.ssd_volume_provisioned}")
44
+ expect(subject).to receive(:puts).with("DAS volume provisioned: #{contracts.items.first.properties.resource_limits.das_volume_provisioned}")
45
+ expect(subject).to receive(:puts).with("K8s Cluster Limit Total: #{contracts.items.first.properties.resource_limits.k8s_cluster_limit_total}")
46
+ expect(subject).to receive(:puts).with("K8s Clusters provisioned: #{contracts.items.first.properties.resource_limits.k8s_clusters_provisioned}")
47
+ expect(subject).to receive(:puts).with("NLB total limit: #{contracts.items.first.properties.resource_limits.nlb_limit_total}")
48
+ expect(subject).to receive(:puts).with("NLBs provisioned: #{contracts.items.first.properties.resource_limits.nlb_provisioned}")
49
+ expect(subject).to receive(:puts).with("NAT gateway total limit: #{contracts.items.first.properties.resource_limits.nat_gateway_limit_total}")
50
+ expect(subject).to receive(:puts).with("NAT gateways provisioned: #{contracts.items.first.properties.resource_limits.nat_gateway_provisioned}")
46
51
 
47
52
  mock_call_api(
48
53
  subject,
@@ -50,9 +55,9 @@ describe Chef::Knife::IonoscloudContractList do
50
55
  {
51
56
  method: 'GET',
52
57
  path: '/contracts',
53
- operation: :'ContractApi.contracts_get',
54
- return_type: 'Contract',
55
- result: contract,
58
+ operation: :'ContractResourcesApi.contracts_get',
59
+ return_type: 'Contracts',
60
+ result: contracts,
56
61
  },
57
62
  ],
58
63
  )
@@ -0,0 +1,249 @@
1
+ require 'spec_helper'
2
+ require 'ionoscloud_cube_server_create'
3
+
4
+ Chef::Knife::IonoscloudCubeServerCreate.load_deps
5
+
6
+ describe Chef::Knife::IonoscloudCubeServerCreate do
7
+ before :each do
8
+ subject { Chef::Knife::IonoscloudCubeServerCreate.new }
9
+
10
+ allow(subject).to receive(:puts)
11
+ allow(subject).to receive(:print)
12
+ end
13
+
14
+ describe '#run' do
15
+ it 'should call ServersApi.datacenters_servers_post with the expected arguments and also make another call to set the boot_volume when set_boot is sent' do
16
+ template = template_mock
17
+ server = server_mock(
18
+ volumes: Ionoscloud::Volumes.new(items: [volume_mock(size: template.properties.storage_size, type: 'DAS')]),
19
+ nics: Ionoscloud::Nics.new(items: [nic_mock]),
20
+ ram: template.properties.ram,
21
+ cores: template.properties.cores,
22
+ boot_volume: nil,
23
+ boot_cdrom: Ionoscloud::ResourceReference.new({ id: nil }),
24
+ )
25
+
26
+ subject_config = {
27
+ ionoscloud_username: 'email',
28
+ ionoscloud_password: 'password',
29
+ datacenter_id: 'datacenter_id',
30
+
31
+ template: template.id,
32
+ name: server.properties.name,
33
+ cpu_family: server.properties.cpu_family,
34
+ availability_zone: server.properties.availability_zone,
35
+
36
+ volume_name: server.entities.volumes.items.first.properties.name,
37
+ type: server.entities.volumes.items.first.properties.type,
38
+ bus: server.entities.volumes.items.first.properties.bus,
39
+ image: SecureRandom.uuid,
40
+ image_password: 'K3tTj8G14a3EgKyNeeiY',
41
+ backupunit_id: server.entities.volumes.items.first.properties.backupunit_id,
42
+ user_data: server.entities.volumes.items.first.properties.user_data,
43
+
44
+ set_boot: true,
45
+
46
+ lan: server.entities.nics.items.first.properties.lan,
47
+ nic_name: server.entities.nics.items.first.properties.name,
48
+ dhcp: server.entities.nics.items.first.properties.dhcp,
49
+ ips: server.entities.nics.items.first.properties.ips.join(','),
50
+ firewall_type: server.entities.nics.items.first.properties.firewall_type,
51
+ }
52
+
53
+ subject_config.each { |key, value| subject.config[key] = value }
54
+
55
+ expect(subject).to receive(:puts).with("ID: #{server.id}")
56
+ expect(subject).to receive(:puts).with("Name: #{server.properties.name}")
57
+ expect(subject).to receive(:puts).with("Type: #{server.properties.type}")
58
+ expect(subject).to receive(:puts).with("Cores: #{server.properties.cores}")
59
+ expect(subject).to receive(:puts).with("CPU Family: #{server.properties.cpu_family}")
60
+ expect(subject).to receive(:puts).with("Ram: #{server.properties.ram}")
61
+ expect(subject).to receive(:puts).with("Availability Zone: #{server.properties.availability_zone}")
62
+ expect(subject).to receive(:puts).with("Boot Volume: #{server.entities.volumes.items.first.id}")
63
+ expect(subject).to receive(:puts).with("Boot CDROM: ")
64
+
65
+ expected_properties = server.properties.to_hash
66
+ expected_properties.delete(:bootCdrom)
67
+ expected_properties.delete(:bootVolume)
68
+ expected_properties.delete(:cores)
69
+ expected_properties.delete(:ram)
70
+ expected_properties[:type] = 'CUBE'
71
+ expected_properties[:templateUuid] = template.id
72
+
73
+ expected_entities = server.entities.to_hash
74
+ expected_entities[:volumes][:items][0].delete(:id)
75
+ expected_entities[:volumes][:items][0][:properties].delete(:size)
76
+ expected_entities[:volumes][:items][0][:properties].delete(:availabilityZone)
77
+ expected_entities[:nics][:items][0].delete(:id)
78
+ expected_entities[:nics][:items][0].delete(:entities)
79
+ expected_entities[:nics][:items][0][:properties].delete(:mac)
80
+ expected_entities[:nics][:items][0][:properties].delete(:firewallActive)
81
+ expected_entities[:nics][:items][0][:properties].delete(:deviceNumber)
82
+ expected_entities[:nics][:items][0][:properties].delete(:pciSlot)
83
+
84
+ expected_entities[:volumes][:items][0][:properties].delete(:licenceType)
85
+ expected_entities[:volumes][:items][0][:properties][:image] = subject_config[:image]
86
+ expected_entities[:volumes][:items][0][:properties][:imagePassword] = subject_config[:image_password]
87
+
88
+ server.properties.boot_volume = Ionoscloud::ResourceReference.new({ id: server.entities.volumes.items.first.id })
89
+
90
+ mock_wait_for(subject)
91
+ mock_wait_for(subject)
92
+ mock_call_api(
93
+ subject,
94
+ [
95
+ {
96
+ method: 'POST',
97
+ path: "/datacenters/#{subject_config[:datacenter_id]}/servers",
98
+ operation: :'ServersApi.datacenters_servers_post',
99
+ return_type: 'Server',
100
+ body: { properties: expected_properties, entities: expected_entities },
101
+ result: server,
102
+ },
103
+ {
104
+ method: 'GET',
105
+ path: "/datacenters/#{subject_config[:datacenter_id]}/servers/#{server.id}",
106
+ operation: :'ServersApi.datacenters_servers_find_by_id',
107
+ return_type: 'Server',
108
+ result: server,
109
+ },
110
+ {
111
+ method: 'PATCH',
112
+ path: "/datacenters/#{subject_config[:datacenter_id]}/servers/#{server.id}",
113
+ operation: :'ServersApi.datacenters_servers_patch',
114
+ return_type: 'Server',
115
+ body: { bootVolume: { id: server.entities.volumes.items[0].id } },
116
+ result: server,
117
+ },
118
+ {
119
+ method: 'GET',
120
+ path: "/datacenters/#{subject_config[:datacenter_id]}/servers/#{server.id}",
121
+ operation: :'ServersApi.datacenters_servers_find_by_id',
122
+ return_type: 'Server',
123
+ result: server,
124
+ },
125
+ ],
126
+ )
127
+
128
+ expect { subject.run }.not_to raise_error(Exception)
129
+ end
130
+
131
+ it 'should call ServersApi.datacenters_servers_post with the expected arguments and should not make another call to set the boot_volume when set_boot is not sent' do
132
+ template = template_mock
133
+ server = server_mock(
134
+ volumes: Ionoscloud::Volumes.new(items: [volume_mock(size: template.properties.storage_size, type: 'DAS')]),
135
+ nics: Ionoscloud::Nics.new(items: [nic_mock]),
136
+ ram: template.properties.ram,
137
+ cores: template.properties.cores,
138
+ boot_volume: nil,
139
+ boot_cdrom: Ionoscloud::ResourceReference.new({ id: nil }),
140
+ )
141
+
142
+ subject_config = {
143
+ ionoscloud_username: 'email',
144
+ ionoscloud_password: 'password',
145
+ datacenter_id: 'datacenter_id',
146
+
147
+ template: template.id,
148
+ name: server.properties.name,
149
+ cpu_family: server.properties.cpu_family,
150
+ availability_zone: server.properties.availability_zone,
151
+
152
+ volume_name: server.entities.volumes.items.first.properties.name,
153
+ type: server.entities.volumes.items.first.properties.type,
154
+ bus: server.entities.volumes.items.first.properties.bus,
155
+ image: SecureRandom.uuid,
156
+ image_password: 'K3tTj8G14a3EgKyNeeiY',
157
+ backupunit_id: server.entities.volumes.items.first.properties.backupunit_id,
158
+ user_data: server.entities.volumes.items.first.properties.user_data,
159
+
160
+ set_boot: false,
161
+
162
+ lan: server.entities.nics.items.first.properties.lan,
163
+ nic_name: server.entities.nics.items.first.properties.name,
164
+ dhcp: server.entities.nics.items.first.properties.dhcp,
165
+ ips: server.entities.nics.items.first.properties.ips.join(','),
166
+ firewall_type: server.entities.nics.items.first.properties.firewall_type,
167
+ }
168
+
169
+ subject_config.each { |key, value| subject.config[key] = value }
170
+
171
+ expect(subject).to receive(:puts).with("ID: #{server.id}")
172
+ expect(subject).to receive(:puts).with("Name: #{server.properties.name}")
173
+ expect(subject).to receive(:puts).with("Type: #{server.properties.type}")
174
+ expect(subject).to receive(:puts).with("Cores: #{server.properties.cores}")
175
+ expect(subject).to receive(:puts).with("CPU Family: #{server.properties.cpu_family}")
176
+ expect(subject).to receive(:puts).with("Ram: #{server.properties.ram}")
177
+ expect(subject).to receive(:puts).with("Availability Zone: #{server.properties.availability_zone}")
178
+ expect(subject).to receive(:puts).with("Boot Volume: #{server.entities.volumes.items.first.id}")
179
+ expect(subject).to receive(:puts).with("Boot CDROM: ")
180
+
181
+ expected_properties = server.properties.to_hash
182
+ expected_properties.delete(:bootCdrom)
183
+ expected_properties.delete(:bootVolume)
184
+ expected_properties.delete(:cores)
185
+ expected_properties.delete(:ram)
186
+ expected_properties[:type] = 'CUBE'
187
+ expected_properties[:templateUuid] = template.id
188
+
189
+ expected_entities = server.entities.to_hash
190
+ expected_entities[:volumes][:items][0].delete(:id)
191
+ expected_entities[:volumes][:items][0][:properties].delete(:size)
192
+ expected_entities[:volumes][:items][0][:properties].delete(:availabilityZone)
193
+ expected_entities[:nics][:items][0].delete(:id)
194
+ expected_entities[:nics][:items][0].delete(:entities)
195
+ expected_entities[:nics][:items][0][:properties].delete(:mac)
196
+ expected_entities[:nics][:items][0][:properties].delete(:firewallActive)
197
+ expected_entities[:nics][:items][0][:properties].delete(:deviceNumber)
198
+ expected_entities[:nics][:items][0][:properties].delete(:pciSlot)
199
+
200
+ expected_entities[:volumes][:items][0][:properties].delete(:licenceType)
201
+ expected_entities[:volumes][:items][0][:properties][:image] = subject_config[:image]
202
+ expected_entities[:volumes][:items][0][:properties][:imagePassword] = subject_config[:image_password]
203
+
204
+ server.properties.boot_volume = Ionoscloud::ResourceReference.new({ id: server.entities.volumes.items.first.id })
205
+
206
+ mock_wait_for(subject)
207
+ mock_call_api(
208
+ subject,
209
+ [
210
+ {
211
+ method: 'POST',
212
+ path: "/datacenters/#{subject_config[:datacenter_id]}/servers",
213
+ operation: :'ServersApi.datacenters_servers_post',
214
+ return_type: 'Server',
215
+ body: { properties: expected_properties, entities: expected_entities },
216
+ result: server,
217
+ },
218
+ {
219
+ method: 'GET',
220
+ path: "/datacenters/#{subject_config[:datacenter_id]}/servers/#{server.id}",
221
+ operation: :'ServersApi.datacenters_servers_find_by_id',
222
+ return_type: 'Server',
223
+ result: server,
224
+ },
225
+ ],
226
+ )
227
+
228
+ expect { subject.run }.not_to raise_error(Exception)
229
+ end
230
+
231
+ it 'should not make any call if any required option is missing' do
232
+ required_options = subject.instance_variable_get(:@required_options)
233
+
234
+ arrays_without_one_element(required_options).each do |test_case|
235
+
236
+ test_case[:array].each { |value| subject.config[value] = 'test' }
237
+
238
+ expect(subject).to receive(:puts).with("Missing required parameters #{test_case[:removed]}")
239
+ expect(subject.api_client).not_to receive(:call_api)
240
+
241
+ expect { subject.run }.to raise_error(SystemExit) do |error|
242
+ expect(error.status).to eq(1)
243
+ end
244
+
245
+ required_options.each { |value| subject.config[value] = nil }
246
+ end
247
+ end
248
+ end
249
+ end
@@ -12,7 +12,7 @@ describe Chef::Knife::IonoscloudDatacenterCreate do
12
12
  end
13
13
 
14
14
  describe '#run' do
15
- it 'should call DataCenterApi.datacenters_post with the expected arguments and output based on what it receives' do
15
+ it 'should call DataCentersApi.datacenters_post with the expected arguments and output based on what it receives' do
16
16
  datacenter = datacenter_mock
17
17
  subject_config = {
18
18
  ionoscloud_username: 'email',
@@ -32,6 +32,7 @@ describe Chef::Knife::IonoscloudDatacenterCreate do
32
32
 
33
33
  expected_body = datacenter.properties.to_hash
34
34
  expected_body.delete(:version)
35
+ expected_body.delete(:cpuArchitecture)
35
36
 
36
37
  mock_wait_for(subject)
37
38
  mock_call_api(
@@ -40,7 +41,7 @@ describe Chef::Knife::IonoscloudDatacenterCreate do
40
41
  {
41
42
  method: 'POST',
42
43
  path: '/datacenters',
43
- operation: :'DataCenterApi.datacenters_post',
44
+ operation: :'DataCentersApi.datacenters_post',
44
45
  return_type: 'Datacenter',
45
46
  body: { properties: expected_body },
46
47
  result: datacenter,
@@ -12,7 +12,7 @@ describe Chef::Knife::IonoscloudDatacenterDelete do
12
12
  end
13
13
 
14
14
  describe '#run' do
15
- it 'should call DataCenterApi.datacenters_delete when the ID is valid' do
15
+ it 'should call DataCentersApi.datacenters_delete when the ID is valid' do
16
16
  datacenter = datacenter_mock
17
17
  subject_config = {
18
18
  ionoscloud_username: 'email',
@@ -37,14 +37,14 @@ describe Chef::Knife::IonoscloudDatacenterDelete do
37
37
  {
38
38
  method: 'GET',
39
39
  path: "/datacenters/#{datacenter.id}",
40
- operation: :'DataCenterApi.datacenters_find_by_id',
40
+ operation: :'DataCentersApi.datacenters_find_by_id',
41
41
  return_type: 'Datacenter',
42
42
  result: datacenter,
43
43
  },
44
44
  {
45
45
  method: 'DELETE',
46
46
  path: "/datacenters/#{datacenter.id}",
47
- operation: :'DataCenterApi.datacenters_delete',
47
+ operation: :'DataCentersApi.datacenters_delete',
48
48
  },
49
49
  ],
50
50
  )
@@ -52,7 +52,7 @@ describe Chef::Knife::IonoscloudDatacenterDelete do
52
52
  expect { subject.run }.not_to raise_error(Exception)
53
53
  end
54
54
 
55
- it 'should not call DataCenterApi.datacenters_delete when the user ID is not valid' do
55
+ it 'should not call DataCentersApi.datacenters_delete when the user ID is not valid' do
56
56
  datacenter_id = 'invalid_id'
57
57
  subject_config = {
58
58
  ionoscloud_username: 'email',
@@ -71,7 +71,7 @@ describe Chef::Knife::IonoscloudDatacenterDelete do
71
71
  {
72
72
  method: 'GET',
73
73
  path: "/datacenters/#{datacenter_id}",
74
- operation: :'DataCenterApi.datacenters_find_by_id',
74
+ operation: :'DataCentersApi.datacenters_find_by_id',
75
75
  return_type: 'Datacenter',
76
76
  exception: Ionoscloud::ApiError.new(code: 404),
77
77
  },
@@ -12,7 +12,7 @@ describe Chef::Knife::IonoscloudDatacenterList do
12
12
  end
13
13
 
14
14
  describe '#run' do
15
- it 'should call DataCenterApi.datacenters_get' do
15
+ it 'should call DataCentersApi.datacenters_get' do
16
16
  datacenters = datacenters_mock
17
17
  subject_config = {
18
18
  ionoscloud_username: 'email',
@@ -26,6 +26,7 @@ describe Chef::Knife::IonoscloudDatacenterList do
26
26
  subject.ui.color('Name', :bold),
27
27
  subject.ui.color('Description', :bold),
28
28
  subject.ui.color('Location', :bold),
29
+ subject.ui.color('CPU Architectures', :bold),
29
30
  subject.ui.color('Version', :bold),
30
31
  ]
31
32
 
@@ -34,10 +35,11 @@ describe Chef::Knife::IonoscloudDatacenterList do
34
35
  datacenter_list << datacenter.properties.name
35
36
  datacenter_list << datacenter.properties.description
36
37
  datacenter_list << datacenter.properties.location
38
+ datacenter_list << datacenter.properties.cpu_architecture.map { |arch| arch.cpu_family }
37
39
  datacenter_list << datacenter.properties.version.to_s
38
40
  end
39
41
 
40
- expect(subject.ui).to receive(:list).with(datacenter_list, :uneven_columns_across, 5)
42
+ expect(subject.ui).to receive(:list).with(datacenter_list, :uneven_columns_across, 6)
41
43
 
42
44
  mock_call_api(
43
45
  subject,
@@ -45,7 +47,7 @@ describe Chef::Knife::IonoscloudDatacenterList do
45
47
  {
46
48
  method: 'GET',
47
49
  path: '/datacenters',
48
- operation: :'DataCenterApi.datacenters_get',
50
+ operation: :'DataCentersApi.datacenters_get',
49
51
  return_type: 'Datacenters',
50
52
  result: datacenters,
51
53
  },
@@ -12,7 +12,7 @@ describe Chef::Knife::IonoscloudFirewallCreate do
12
12
  end
13
13
 
14
14
  describe '#run' do
15
- it 'should call NicApi.datacenters_servers_nics_firewallrules_post with the expected arguments and output based on what it receives' do
15
+ it 'should call FirewallRulesApi.datacenters_servers_nics_firewallrules_post with the expected arguments and output based on what it receives' do
16
16
  firewall = firewall_mock
17
17
  subject_config = {
18
18
  ionoscloud_username: 'email',
@@ -29,6 +29,7 @@ describe Chef::Knife::IonoscloudFirewallCreate do
29
29
  port_range_end: firewall.properties.port_range_end,
30
30
  icmp_type: firewall.properties.icmp_type,
31
31
  icmp_code: firewall.properties.icmp_code,
32
+ type: firewall.properties.type,
32
33
  }
33
34
 
34
35
  subject_config.each { |key, value| subject.config[key] = value }
@@ -43,6 +44,7 @@ describe Chef::Knife::IonoscloudFirewallCreate do
43
44
  expect(subject).to receive(:puts).with("Port Range End: #{firewall.properties.port_range_end}")
44
45
  expect(subject).to receive(:puts).with("ICMP Type: #{firewall.properties.icmp_type}")
45
46
  expect(subject).to receive(:puts).with("ICMP Code: #{firewall.properties.icmp_code}")
47
+ expect(subject).to receive(:puts).with("Type: #{firewall.properties.type}")
46
48
 
47
49
  mock_wait_for(subject)
48
50
  mock_call_api(
@@ -51,7 +53,7 @@ describe Chef::Knife::IonoscloudFirewallCreate do
51
53
  {
52
54
  method: 'POST',
53
55
  path: "/datacenters/#{subject_config[:datacenter_id]}/servers/#{subject_config[:server_id]}/nics/#{subject_config[:nic_id]}/firewallrules",
54
- operation: :'NicApi.datacenters_servers_nics_firewallrules_post',
56
+ operation: :'FirewallRulesApi.datacenters_servers_nics_firewallrules_post',
55
57
  return_type: 'FirewallRule',
56
58
  body: { properties: firewall.properties.to_hash },
57
59
  result: firewall,
@@ -59,7 +61,7 @@ describe Chef::Knife::IonoscloudFirewallCreate do
59
61
  {
60
62
  method: 'GET',
61
63
  path: "/datacenters/#{subject_config[:datacenter_id]}/servers/#{subject_config[:server_id]}/nics/#{subject_config[:nic_id]}/firewallrules/#{firewall.id}",
62
- operation: :'NicApi.datacenters_servers_nics_firewallrules_find_by_id',
64
+ operation: :'FirewallRulesApi.datacenters_servers_nics_firewallrules_find_by_id',
63
65
  return_type: 'FirewallRule',
64
66
  result: firewall,
65
67
  },