fog-vcloud-director 0.1.10 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (331) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +4 -240
  4. data/.rubocop_local.yml +1 -0
  5. data/.travis.yml +6 -10
  6. data/README.md +54 -51
  7. data/docs/examples-vapp-instantiate.md +2 -2
  8. data/docs/examples-vm-reconfigure.md +122 -0
  9. data/docs/vm-to-reconfigure.xml +373 -0
  10. data/fog-vcloud-director.gemspec +6 -3
  11. data/lib/fog/vcloud_director.rb +14 -1
  12. data/lib/fog/vcloud_director/compute.rb +45 -19
  13. data/lib/fog/vcloud_director/core.rb +3 -3
  14. data/lib/fog/vcloud_director/generators/compute/compose_common.rb +16 -3
  15. data/lib/fog/vcloud_director/generators/compute/compose_vapp.rb +3 -3
  16. data/lib/fog/vcloud_director/generators/compute/create_snapshot.rb +3 -3
  17. data/lib/fog/vcloud_director/generators/compute/customization.rb +3 -3
  18. data/lib/fog/vcloud_director/generators/compute/disks.rb +3 -3
  19. data/lib/fog/vcloud_director/generators/compute/edge_gateway_service_configuration.rb +3 -3
  20. data/lib/fog/vcloud_director/generators/compute/instantiate_vapp_template_params.rb +3 -3
  21. data/lib/fog/vcloud_director/generators/compute/metadata.rb +3 -3
  22. data/lib/fog/vcloud_director/generators/compute/org_vdc_network.rb +4 -4
  23. data/lib/fog/vcloud_director/generators/compute/recompose_vapp.rb +3 -3
  24. data/lib/fog/vcloud_director/generators/compute/reconfigure_vm.rb +189 -0
  25. data/lib/fog/vcloud_director/generators/compute/vapp.rb +3 -4
  26. data/lib/fog/vcloud_director/generators/compute/vm.rb +3 -3
  27. data/lib/fog/vcloud_director/generators/compute/vm_network.rb +3 -3
  28. data/lib/fog/vcloud_director/models/compute/catalog.rb +2 -4
  29. data/lib/fog/vcloud_director/models/compute/catalog_item.rb +2 -4
  30. data/lib/fog/vcloud_director/models/compute/catalog_items.rb +3 -4
  31. data/lib/fog/vcloud_director/models/compute/catalogs.rb +4 -5
  32. data/lib/fog/vcloud_director/models/compute/custom_field.rb +2 -4
  33. data/lib/fog/vcloud_director/models/compute/custom_fields.rb +3 -3
  34. data/lib/fog/vcloud_director/models/compute/disk.rb +5 -6
  35. data/lib/fog/vcloud_director/models/compute/disks.rb +4 -5
  36. data/lib/fog/vcloud_director/models/compute/media.rb +2 -4
  37. data/lib/fog/vcloud_director/models/compute/medias.rb +3 -4
  38. data/lib/fog/vcloud_director/models/compute/network.rb +2 -4
  39. data/lib/fog/vcloud_director/models/compute/networks.rb +3 -4
  40. data/lib/fog/vcloud_director/models/compute/organization.rb +2 -4
  41. data/lib/fog/vcloud_director/models/compute/organizations.rb +3 -4
  42. data/lib/fog/vcloud_director/models/compute/tag.rb +3 -4
  43. data/lib/fog/vcloud_director/models/compute/tags.rb +3 -4
  44. data/lib/fog/vcloud_director/models/compute/task.rb +2 -4
  45. data/lib/fog/vcloud_director/models/compute/tasks.rb +3 -4
  46. data/lib/fog/vcloud_director/models/compute/template_vm.rb +2 -3
  47. data/lib/fog/vcloud_director/models/compute/template_vms.rb +5 -6
  48. data/lib/fog/vcloud_director/models/compute/vapp.rb +36 -18
  49. data/lib/fog/vcloud_director/models/compute/vapp_template.rb +2 -4
  50. data/lib/fog/vcloud_director/models/compute/vapp_templates.rb +4 -5
  51. data/lib/fog/vcloud_director/models/compute/vapps.rb +3 -4
  52. data/lib/fog/vcloud_director/models/compute/vdc.rb +2 -4
  53. data/lib/fog/vcloud_director/models/compute/vdcs.rb +3 -4
  54. data/lib/fog/vcloud_director/models/compute/vm.rb +19 -39
  55. data/lib/fog/vcloud_director/models/compute/vm_customization.rb +2 -4
  56. data/lib/fog/vcloud_director/models/compute/vm_customizations.rb +3 -4
  57. data/lib/fog/vcloud_director/models/compute/vm_network.rb +2 -4
  58. data/lib/fog/vcloud_director/models/compute/vm_networks.rb +3 -4
  59. data/lib/fog/vcloud_director/models/compute/vms.rb +4 -5
  60. data/lib/fog/vcloud_director/parsers/compute/disks.rb +3 -3
  61. data/lib/fog/vcloud_director/parsers/compute/metadata.rb +3 -3
  62. data/lib/fog/vcloud_director/parsers/compute/network.rb +3 -3
  63. data/lib/fog/vcloud_director/parsers/compute/vapp.rb +93 -0
  64. data/lib/fog/vcloud_director/parsers/compute/vm.rb +6 -65
  65. data/lib/fog/vcloud_director/parsers/compute/vm_customization.rb +3 -3
  66. data/lib/fog/vcloud_director/parsers/compute/vm_network.rb +3 -3
  67. data/lib/fog/vcloud_director/parsers/compute/vm_parser_helper.rb +55 -3
  68. data/lib/fog/vcloud_director/parsers/compute/vms.rb +5 -26
  69. data/lib/fog/vcloud_director/parsers/compute/vms_by_metadata.rb +3 -3
  70. data/lib/fog/vcloud_director/query.rb +0 -1
  71. data/lib/fog/vcloud_director/requests/compute/delete_catalog_item.rb +2 -2
  72. data/lib/fog/vcloud_director/requests/compute/delete_catalog_item_metadata_item_metadata.rb +3 -3
  73. data/lib/fog/vcloud_director/requests/compute/delete_disk.rb +3 -3
  74. data/lib/fog/vcloud_director/requests/compute/delete_disk_metadata_item_metadata.rb +3 -3
  75. data/lib/fog/vcloud_director/requests/compute/delete_logout.rb +2 -2
  76. data/lib/fog/vcloud_director/requests/compute/delete_media.rb +4 -4
  77. data/lib/fog/vcloud_director/requests/compute/delete_media_metadata_item_metadata.rb +3 -3
  78. data/lib/fog/vcloud_director/requests/compute/delete_network.rb +4 -4
  79. data/lib/fog/vcloud_director/requests/compute/delete_shadow_vm.rb +2 -2
  80. data/lib/fog/vcloud_director/requests/compute/delete_vapp.rb +5 -5
  81. data/lib/fog/vcloud_director/requests/compute/delete_vapp_metadata_item_metadata.rb +3 -3
  82. data/lib/fog/vcloud_director/requests/compute/delete_vapp_template.rb +2 -2
  83. data/lib/fog/vcloud_director/requests/compute/delete_vapp_template_metadata_item_metadata.rb +3 -3
  84. data/lib/fog/vcloud_director/requests/compute/get_allocated_ip_addresses.rb +2 -2
  85. data/lib/fog/vcloud_director/requests/compute/get_catalog.rb +4 -4
  86. data/lib/fog/vcloud_director/requests/compute/get_catalog_item.rb +3 -3
  87. data/lib/fog/vcloud_director/requests/compute/get_catalog_item_metadata.rb +2 -2
  88. data/lib/fog/vcloud_director/requests/compute/get_catalog_item_metadata_item_metadata.rb +3 -3
  89. data/lib/fog/vcloud_director/requests/compute/get_catalog_metadata.rb +2 -2
  90. data/lib/fog/vcloud_director/requests/compute/get_catalog_metadata_item_metadata.rb +3 -3
  91. data/lib/fog/vcloud_director/requests/compute/get_catalogs_from_query.rb +3 -3
  92. data/lib/fog/vcloud_director/requests/compute/get_control_access_params_catalog.rb +2 -2
  93. data/lib/fog/vcloud_director/requests/compute/get_control_access_params_vapp.rb +2 -2
  94. data/lib/fog/vcloud_director/requests/compute/get_cpu_rasd_item.rb +3 -3
  95. data/lib/fog/vcloud_director/requests/compute/get_current_session.rb +2 -2
  96. data/lib/fog/vcloud_director/requests/compute/get_disk.rb +4 -4
  97. data/lib/fog/vcloud_director/requests/compute/get_disk_metadata.rb +2 -2
  98. data/lib/fog/vcloud_director/requests/compute/get_disk_metadata_item_metadata.rb +3 -3
  99. data/lib/fog/vcloud_director/requests/compute/get_disk_owner.rb +4 -4
  100. data/lib/fog/vcloud_director/requests/compute/get_disks_from_query.rb +3 -3
  101. data/lib/fog/vcloud_director/requests/compute/get_disks_rasd_items_list.rb +3 -3
  102. data/lib/fog/vcloud_director/requests/compute/get_edge_gateway.rb +4 -4
  103. data/lib/fog/vcloud_director/requests/compute/get_entity.rb +2 -2
  104. data/lib/fog/vcloud_director/requests/compute/get_execute_query.rb +2 -2
  105. data/lib/fog/vcloud_director/requests/compute/get_groups_from_query.rb +3 -3
  106. data/lib/fog/vcloud_director/requests/compute/get_guest_customization_system_section_vapp.rb +3 -3
  107. data/lib/fog/vcloud_director/requests/compute/get_guest_customization_system_section_vapp_template.rb +2 -2
  108. data/lib/fog/vcloud_director/requests/compute/get_href.rb +2 -2
  109. data/lib/fog/vcloud_director/requests/compute/get_lease_settings_section_vapp.rb +4 -4
  110. data/lib/fog/vcloud_director/requests/compute/get_lease_settings_section_vapp_template.rb +2 -2
  111. data/lib/fog/vcloud_director/requests/compute/get_media.rb +4 -4
  112. data/lib/fog/vcloud_director/requests/compute/get_media_drives_rasd_items_list.rb +3 -3
  113. data/lib/fog/vcloud_director/requests/compute/get_media_metadata.rb +2 -2
  114. data/lib/fog/vcloud_director/requests/compute/get_media_metadata_item_metadata.rb +3 -3
  115. data/lib/fog/vcloud_director/requests/compute/get_media_owner.rb +4 -4
  116. data/lib/fog/vcloud_director/requests/compute/get_medias_from_query.rb +3 -3
  117. data/lib/fog/vcloud_director/requests/compute/get_memory_rasd_item.rb +3 -3
  118. data/lib/fog/vcloud_director/requests/compute/get_metadata.rb +3 -3
  119. data/lib/fog/vcloud_director/requests/compute/get_network.rb +5 -5
  120. data/lib/fog/vcloud_director/requests/compute/get_network_cards_items_list.rb +3 -3
  121. data/lib/fog/vcloud_director/requests/compute/get_network_complete.rb +4 -4
  122. data/lib/fog/vcloud_director/requests/compute/get_network_config_section_vapp.rb +3 -3
  123. data/lib/fog/vcloud_director/requests/compute/get_network_config_section_vapp_template.rb +2 -2
  124. data/lib/fog/vcloud_director/requests/compute/get_network_connection_system_section_vapp.rb +3 -3
  125. data/lib/fog/vcloud_director/requests/compute/get_network_connection_system_section_vapp_template.rb +2 -2
  126. data/lib/fog/vcloud_director/requests/compute/get_network_metadata.rb +2 -2
  127. data/lib/fog/vcloud_director/requests/compute/get_network_metadata_item_metadata.rb +3 -3
  128. data/lib/fog/vcloud_director/requests/compute/get_network_section_vapp.rb +2 -2
  129. data/lib/fog/vcloud_director/requests/compute/get_network_section_vapp_template.rb +2 -2
  130. data/lib/fog/vcloud_director/requests/compute/get_operating_system_section.rb +3 -3
  131. data/lib/fog/vcloud_director/requests/compute/get_org_settings.rb +2 -2
  132. data/lib/fog/vcloud_director/requests/compute/get_org_vdc_gateways.rb +4 -4
  133. data/lib/fog/vcloud_director/requests/compute/get_organization.rb +4 -4
  134. data/lib/fog/vcloud_director/requests/compute/get_organization_metadata.rb +2 -2
  135. data/lib/fog/vcloud_director/requests/compute/get_organization_metadata_item_metadata.rb +3 -3
  136. data/lib/fog/vcloud_director/requests/compute/get_organizations.rb +2 -2
  137. data/lib/fog/vcloud_director/requests/compute/get_organizations_from_query.rb +3 -3
  138. data/lib/fog/vcloud_director/requests/compute/get_product_sections_vapp.rb +2 -2
  139. data/lib/fog/vcloud_director/requests/compute/get_product_sections_vapp_template.rb +2 -2
  140. data/lib/fog/vcloud_director/requests/compute/get_request.rb +2 -2
  141. data/lib/fog/vcloud_director/requests/compute/get_runtime_info_section_type.rb +3 -3
  142. data/lib/fog/vcloud_director/requests/compute/get_serial_ports_items_list.rb +2 -2
  143. data/lib/fog/vcloud_director/requests/compute/get_shadow_vm.rb +2 -2
  144. data/lib/fog/vcloud_director/requests/compute/get_snapshot_section.rb +3 -3
  145. data/lib/fog/vcloud_director/requests/compute/get_startup_section.rb +3 -3
  146. data/lib/fog/vcloud_director/requests/compute/get_supported_systems_info.rb +2 -2
  147. data/lib/fog/vcloud_director/requests/compute/get_supported_versions.rb +2 -2
  148. data/lib/fog/vcloud_director/requests/compute/get_task.rb +4 -4
  149. data/lib/fog/vcloud_director/requests/compute/get_task_list.rb +5 -5
  150. data/lib/fog/vcloud_director/requests/compute/get_template_vm.rb +4 -50
  151. data/lib/fog/vcloud_director/requests/compute/get_template_vms.rb +3 -16
  152. data/lib/fog/vcloud_director/requests/compute/get_thumbnail.rb +2 -2
  153. data/lib/fog/vcloud_director/requests/compute/get_users_from_query.rb +3 -3
  154. data/lib/fog/vcloud_director/requests/compute/get_vapp.rb +9 -8
  155. data/lib/fog/vcloud_director/requests/compute/get_vapp_metadata.rb +4 -4
  156. data/lib/fog/vcloud_director/requests/compute/get_vapp_metadata_item_metadata.rb +3 -3
  157. data/lib/fog/vcloud_director/requests/compute/get_vapp_ovf_descriptor.rb +2 -2
  158. data/lib/fog/vcloud_director/requests/compute/get_vapp_owner.rb +4 -4
  159. data/lib/fog/vcloud_director/requests/compute/get_vapp_template.rb +2 -2
  160. data/lib/fog/vcloud_director/requests/compute/get_vapp_template_customization_system_section.rb +2 -2
  161. data/lib/fog/vcloud_director/requests/compute/get_vapp_template_metadata.rb +2 -2
  162. data/lib/fog/vcloud_director/requests/compute/get_vapp_template_metadata_item_metadata.rb +3 -3
  163. data/lib/fog/vcloud_director/requests/compute/get_vapp_template_ovf_descriptor.rb +2 -2
  164. data/lib/fog/vcloud_director/requests/compute/get_vapp_template_owner.rb +2 -2
  165. data/lib/fog/vcloud_director/requests/compute/get_vapp_templates_from_query.rb +3 -3
  166. data/lib/fog/vcloud_director/requests/compute/get_vapps_in_lease_from_query.rb +3 -3
  167. data/lib/fog/vcloud_director/requests/compute/get_vcloud.rb +2 -2
  168. data/lib/fog/vcloud_director/requests/compute/get_vdc.rb +4 -4
  169. data/lib/fog/vcloud_director/requests/compute/get_vdc_metadata.rb +2 -2
  170. data/lib/fog/vcloud_director/requests/compute/get_vdc_metadata_item_metadata.rb +3 -3
  171. data/lib/fog/vcloud_director/requests/compute/get_vdc_storage_class.rb +4 -4
  172. data/lib/fog/vcloud_director/requests/compute/get_vdc_storage_class_metadata.rb +2 -2
  173. data/lib/fog/vcloud_director/requests/compute/get_vdc_storage_class_metadata_item_metadata.rb +3 -3
  174. data/lib/fog/vcloud_director/requests/compute/get_vdcs_from_query.rb +3 -3
  175. data/lib/fog/vcloud_director/requests/compute/get_virtual_hardware_section.rb +2 -2
  176. data/lib/fog/vcloud_director/requests/compute/get_vm.rb +3 -49
  177. data/lib/fog/vcloud_director/requests/compute/get_vm_capabilities.rb +3 -3
  178. data/lib/fog/vcloud_director/requests/compute/get_vm_compliance_results.rb +2 -2
  179. data/lib/fog/vcloud_director/requests/compute/get_vm_customization.rb +3 -3
  180. data/lib/fog/vcloud_director/requests/compute/get_vm_disks.rb +3 -3
  181. data/lib/fog/vcloud_director/requests/compute/get_vm_network.rb +3 -3
  182. data/lib/fog/vcloud_director/requests/compute/get_vm_pending_question.rb +2 -2
  183. data/lib/fog/vcloud_director/requests/compute/get_vms_by_metadata.rb +3 -3
  184. data/lib/fog/vcloud_director/requests/compute/get_vms_disk_attached_to.rb +3 -3
  185. data/lib/fog/vcloud_director/requests/compute/get_vms_in_lease_from_query.rb +3 -3
  186. data/lib/fog/vcloud_director/requests/compute/instantiate_vapp_template.rb +6 -6
  187. data/lib/fog/vcloud_director/requests/compute/post_acquire_mks_ticket.rb +3 -3
  188. data/lib/fog/vcloud_director/requests/compute/post_acquire_ticket.rb +3 -3
  189. data/lib/fog/vcloud_director/requests/compute/post_answer_vm_pending_question.rb +2 -2
  190. data/lib/fog/vcloud_director/requests/compute/post_attach_disk.rb +2 -2
  191. data/lib/fog/vcloud_director/requests/compute/post_cancel_task.rb +3 -3
  192. data/lib/fog/vcloud_director/requests/compute/post_capture_vapp.rb +2 -2
  193. data/lib/fog/vcloud_director/requests/compute/post_check_vm_compliance.rb +2 -2
  194. data/lib/fog/vcloud_director/requests/compute/post_clone_media.rb +4 -4
  195. data/lib/fog/vcloud_director/requests/compute/post_clone_vapp.rb +2 -2
  196. data/lib/fog/vcloud_director/requests/compute/post_clone_vapp_template.rb +2 -2
  197. data/lib/fog/vcloud_director/requests/compute/post_compose_vapp.rb +3 -3
  198. data/lib/fog/vcloud_director/requests/compute/post_configure_edge_gateway_services.rb +4 -4
  199. data/lib/fog/vcloud_director/requests/compute/post_consolidate_vm_vapp.rb +2 -2
  200. data/lib/fog/vcloud_director/requests/compute/post_consolidate_vm_vapp_template.rb +2 -2
  201. data/lib/fog/vcloud_director/requests/compute/post_create_catalog_item.rb +5 -5
  202. data/lib/fog/vcloud_director/requests/compute/post_create_org_vdc_network.rb +4 -4
  203. data/lib/fog/vcloud_director/requests/compute/post_create_snapshot.rb +3 -3
  204. data/lib/fog/vcloud_director/requests/compute/post_deploy_vapp.rb +2 -2
  205. data/lib/fog/vcloud_director/requests/compute/post_detach_disk.rb +2 -2
  206. data/lib/fog/vcloud_director/requests/compute/post_disable_nested_hv.rb +2 -2
  207. data/lib/fog/vcloud_director/requests/compute/post_disable_vapp_template_download.rb +2 -2
  208. data/lib/fog/vcloud_director/requests/compute/post_discard_vapp_state.rb +2 -2
  209. data/lib/fog/vcloud_director/requests/compute/post_eject_cd_rom.rb +2 -2
  210. data/lib/fog/vcloud_director/requests/compute/post_enable_nested_hv.rb +2 -2
  211. data/lib/fog/vcloud_director/requests/compute/post_enable_vapp_template_download.rb +2 -2
  212. data/lib/fog/vcloud_director/requests/compute/post_enter_maintenance_mode.rb +2 -2
  213. data/lib/fog/vcloud_director/requests/compute/post_exit_maintenance_mode.rb +2 -2
  214. data/lib/fog/vcloud_director/requests/compute/post_insert_cd_rom.rb +2 -2
  215. data/lib/fog/vcloud_director/requests/compute/post_install_vmware_tools.rb +2 -2
  216. data/lib/fog/vcloud_director/requests/compute/post_instantiate_vapp_template.rb +6 -6
  217. data/lib/fog/vcloud_director/requests/compute/post_login_session.rb +2 -2
  218. data/lib/fog/vcloud_director/requests/compute/post_power_off_vapp.rb +3 -3
  219. data/lib/fog/vcloud_director/requests/compute/post_power_on_vapp.rb +6 -6
  220. data/lib/fog/vcloud_director/requests/compute/post_reboot_vapp.rb +3 -3
  221. data/lib/fog/vcloud_director/requests/compute/post_recompose_vapp.rb +3 -3
  222. data/lib/fog/vcloud_director/requests/compute/post_reconfigure_vm.rb +6 -86
  223. data/lib/fog/vcloud_director/requests/compute/post_remove_all_snapshots.rb +2 -2
  224. data/lib/fog/vcloud_director/requests/compute/post_reset_vapp.rb +3 -3
  225. data/lib/fog/vcloud_director/requests/compute/post_revert_snapshot.rb +2 -2
  226. data/lib/fog/vcloud_director/requests/compute/post_shutdown_vapp.rb +3 -3
  227. data/lib/fog/vcloud_director/requests/compute/post_suspend_vapp.rb +3 -3
  228. data/lib/fog/vcloud_director/requests/compute/post_undeploy_vapp.rb +3 -3
  229. data/lib/fog/vcloud_director/requests/compute/post_update_catalog_item_metadata.rb +2 -2
  230. data/lib/fog/vcloud_director/requests/compute/post_update_disk_metadata.rb +2 -2
  231. data/lib/fog/vcloud_director/requests/compute/post_update_media_metadata.rb +2 -2
  232. data/lib/fog/vcloud_director/requests/compute/post_update_vapp_metadata.rb +4 -4
  233. data/lib/fog/vcloud_director/requests/compute/post_update_vapp_template_metadata.rb +2 -2
  234. data/lib/fog/vcloud_director/requests/compute/post_upgrade_hw_version.rb +2 -2
  235. data/lib/fog/vcloud_director/requests/compute/post_upload_disk.rb +4 -4
  236. data/lib/fog/vcloud_director/requests/compute/post_upload_media.rb +7 -7
  237. data/lib/fog/vcloud_director/requests/compute/post_upload_vapp_template.rb +2 -2
  238. data/lib/fog/vcloud_director/requests/compute/put_catalog_item_metadata_item_metadata.rb +3 -3
  239. data/lib/fog/vcloud_director/requests/compute/put_cpu.rb +4 -4
  240. data/lib/fog/vcloud_director/requests/compute/put_disk_metadata_item_metadata.rb +3 -3
  241. data/lib/fog/vcloud_director/requests/compute/put_disks.rb +3 -3
  242. data/lib/fog/vcloud_director/requests/compute/put_guest_customization_section_vapp.rb +2 -2
  243. data/lib/fog/vcloud_director/requests/compute/put_media_metadata_item_metadata.rb +3 -3
  244. data/lib/fog/vcloud_director/requests/compute/put_memory.rb +4 -4
  245. data/lib/fog/vcloud_director/requests/compute/put_metadata_value.rb +4 -4
  246. data/lib/fog/vcloud_director/requests/compute/put_network.rb +4 -4
  247. data/lib/fog/vcloud_director/requests/compute/put_network_connection_system_section_vapp.rb +4 -4
  248. data/lib/fog/vcloud_director/requests/compute/put_product_sections.rb +2 -2
  249. data/lib/fog/vcloud_director/requests/compute/put_vapp_metadata_item_metadata.rb +4 -4
  250. data/lib/fog/vcloud_director/requests/compute/put_vapp_name_and_description.rb +3 -3
  251. data/lib/fog/vcloud_director/requests/compute/put_vapp_template_metadata_item_metadata.rb +3 -3
  252. data/lib/fog/vcloud_director/requests/compute/put_vm.rb +5 -5
  253. data/lib/fog/vcloud_director/requests/compute/put_vm_capabilities.rb +2 -2
  254. data/lib/fog/vcloud_director/version.rb +1 -1
  255. data/spec/common_assertions.rb +42 -0
  256. data/spec/fixtures/empty_vm.xml +244 -0
  257. data/spec/fixtures/vm.xml +419 -0
  258. data/spec/secrets.yaml.templ +3 -0
  259. data/spec/spec_helper.rb +6 -6
  260. data/spec/vcloud_director/generators/compute/compose_common_spec.rb +3 -8
  261. data/spec/vcloud_director/generators/compute/compose_vapp_spec.rb +67 -0
  262. data/spec/vcloud_director/generators/compute/create_snapshot_spec.rb +4 -0
  263. data/spec/vcloud_director/generators/compute/customization_spec.rb +4 -0
  264. data/spec/vcloud_director/generators/compute/disks_spec.rb +4 -0
  265. data/spec/vcloud_director/generators/compute/edge_gateway_service_configuration_spec.rb +4 -0
  266. data/spec/vcloud_director/generators/compute/instantiate_vapp_template_params_spec.rb +7 -10
  267. data/spec/vcloud_director/generators/compute/metadata_spec.rb +4 -0
  268. data/spec/vcloud_director/generators/compute/org_vdc_network_spec.rb +4 -0
  269. data/spec/vcloud_director/generators/compute/recompose_vapp_spec.rb +4 -0
  270. data/spec/vcloud_director/generators/compute/reconfigure_vm_spec.rb +390 -0
  271. data/spec/vcloud_director/generators/compute/vapp_spec.rb +4 -0
  272. data/spec/vcloud_director/generators/compute/vm_network_spec.rb +4 -0
  273. data/spec/vcloud_director/generators/compute/vm_spec.rb +4 -0
  274. data/spec/vcloud_director/models/compute/basic_spec.rb +44 -0
  275. data/spec/vcloud_director/models/compute/vapps_spec.rb +104 -0
  276. data/spec/vcloud_director/models/compute/vms_spec.rb +80 -0
  277. data/spec/vcloud_director/parsers/compute/disks_spec.rb +4 -0
  278. data/spec/vcloud_director/parsers/compute/metadata_spec.rb +4 -0
  279. data/spec/vcloud_director/parsers/compute/network_spec.rb +4 -0
  280. data/spec/vcloud_director/parsers/compute/vm_customization_spec.rb +4 -0
  281. data/spec/vcloud_director/parsers/compute/vm_network_spec.rb +4 -0
  282. data/spec/vcloud_director/parsers/compute/vm_parser_helper_spec.rb +4 -0
  283. data/spec/vcloud_director/parsers/compute/vm_spec.rb +4 -0
  284. data/spec/vcloud_director/parsers/compute/vms_by_metadata_spec.rb +4 -0
  285. data/spec/vcloud_director/parsers/compute/vms_spec.rb +4 -0
  286. data/spec/vcloud_director/requests/compute/basic_spec.rb +212 -0
  287. data/spec/vcloud_director/requests/compute/get_vapp_spec.rb +11 -0
  288. data/spec/vcloud_director/requests/compute/get_vdc_spec.rb +10 -0
  289. data/spec/vcloud_director/requests/compute/instantiate_vapp_template_spec.rb +3 -5
  290. data/spec/vcloud_director/requests/compute/post_reconfigure_vm_spec.rb +26 -0
  291. data/spec/vcr_cassettes/authentication.yml +48 -0
  292. data/spec/vcr_cassettes/get_vapp-emptyvm.yml +806 -0
  293. data/spec/vcr_cassettes/get_vapp.yml +937 -0
  294. data/spec/vcr_cassettes/get_vapps-expired.yml +918 -0
  295. data/spec/vcr_cassettes/get_vapps-novms.yml +215 -0
  296. data/spec/vcr_cassettes/get_vapps.yml +118 -0
  297. data/spec/vcr_cassettes/get_vdc.yml +118 -0
  298. data/spec/vcr_cassettes/get_vm.yml +398 -0
  299. data/spec/vcr_cassettes/post_reconfigure_vm-virtual_hardware.yml +445 -0
  300. data/spec/vcr_spec_helper.rb +34 -0
  301. data/tasks/test.rake +3 -10
  302. data/tests/vcloud_director/ensure_list_tests.rb +1 -1
  303. data/tests/vcloud_director/generators/compute/compose_vapp_tests.rb +1 -1
  304. data/tests/vcloud_director/models/compute/helper.rb +1 -1
  305. data/tests/vcloud_director/models/compute/media_tests.rb +1 -1
  306. data/tests/vcloud_director/models/compute/network_tests.rb +1 -1
  307. data/tests/vcloud_director/models/compute/tasks_tests.rb +1 -1
  308. data/tests/vcloud_director/models/compute/vapp_template_tests.rb +1 -1
  309. data/tests/vcloud_director/models/compute/vms_tests.rb +6 -6
  310. data/tests/vcloud_director/requests/compute/admin_tests.rb +1 -1
  311. data/tests/vcloud_director/requests/compute/catalog_tests.rb +2 -2
  312. data/tests/vcloud_director/requests/compute/disk_tests.rb +11 -11
  313. data/tests/vcloud_director/requests/compute/edge_gateway_tests.rb +8 -8
  314. data/tests/vcloud_director/requests/compute/groups_tests.rb +1 -1
  315. data/tests/vcloud_director/requests/compute/media_tests.rb +11 -11
  316. data/tests/vcloud_director/requests/compute/network_tests.rb +6 -6
  317. data/tests/vcloud_director/requests/compute/organization_tests.rb +2 -2
  318. data/tests/vcloud_director/requests/compute/ovf_descriptor_tests.rb +1 -1
  319. data/tests/vcloud_director/requests/compute/query_tests.rb +1 -1
  320. data/tests/vcloud_director/requests/compute/session_tests.rb +1 -1
  321. data/tests/vcloud_director/requests/compute/supported_systems_tests.rb +1 -1
  322. data/tests/vcloud_director/requests/compute/task_tests.rb +4 -4
  323. data/tests/vcloud_director/requests/compute/users_tests.rb +1 -1
  324. data/tests/vcloud_director/requests/compute/vapp_tests.rb +4 -4
  325. data/tests/vcloud_director/requests/compute/vdc_storage_profile_tests.rb +2 -2
  326. data/tests/vcloud_director/requests/compute/vdc_tests.rb +2 -2
  327. data/tests/vcloud_director/requests/compute/versions_tests.rb +1 -1
  328. data/tests/vcloud_director/requests/compute/vm_tests.rb +4 -4
  329. metadata +140 -13
  330. data/lib/fog/vcloud_director/requests/compute/get_vms.rb +0 -41
  331. data/spec/vcloud_director/spec_helper.rb +0 -13
@@ -1,8 +1,6 @@
1
- require 'fog/core/model'
2
-
3
1
  module Fog
4
- module Compute
5
- class VcloudDirector
2
+ module VcloudDirector
3
+ class Compute
6
4
  class VappTemplate < Model
7
5
  identity :id
8
6
 
@@ -1,14 +1,13 @@
1
- require 'fog/core/collection'
2
- require 'fog/vcloud_director/models/compute/vapp'
1
+ require 'fog/vcloud_director/models/compute/vapp_template'
3
2
 
4
3
  module Fog
5
- module Compute
6
- class VcloudDirector
4
+ module VcloudDirector
5
+ class Compute
7
6
  class VappTemplates < Collection
8
7
 
9
8
  include Fog::VcloudDirector::Query
10
9
 
11
- model Fog::Compute::VcloudDirector::VappTemplate
10
+ model Fog::VcloudDirector::Compute::VappTemplate
12
11
 
13
12
  attribute :vdc
14
13
 
@@ -1,14 +1,13 @@
1
- require 'fog/core/collection'
2
1
  require 'fog/vcloud_director/models/compute/vapp'
3
2
 
4
3
  module Fog
5
- module Compute
6
- class VcloudDirector
4
+ module VcloudDirector
5
+ class Compute
7
6
  class Vapps < Collection
8
7
 
9
8
  include Fog::VcloudDirector::Query
10
9
 
11
- model Fog::Compute::VcloudDirector::Vapp
10
+ model Fog::VcloudDirector::Compute::Vapp
12
11
 
13
12
  attribute :vdc
14
13
 
@@ -1,8 +1,6 @@
1
- require 'fog/core/model'
2
-
3
1
  module Fog
4
- module Compute
5
- class VcloudDirector
2
+ module VcloudDirector
3
+ class Compute
6
4
  class Vdc < Model
7
5
  identity :id
8
6
 
@@ -1,14 +1,13 @@
1
- require 'fog/core/collection'
2
1
  require 'fog/vcloud_director/models/compute/vdc'
3
2
 
4
3
  module Fog
5
- module Compute
6
- class VcloudDirector
4
+ module VcloudDirector
5
+ class Compute
7
6
  class Vdcs < Collection
8
7
 
9
8
  include Fog::VcloudDirector::Query
10
9
 
11
- model Fog::Compute::VcloudDirector::Vdc
10
+ model Fog::VcloudDirector::Compute::Vdc
12
11
 
13
12
  attribute :organization
14
13
 
@@ -1,14 +1,12 @@
1
- require 'fog/core/model'
2
1
  require 'fog/vcloud_director/models/compute/vm_customization'
3
2
 
4
3
  module Fog
5
- module Compute
6
- class VcloudDirector
4
+ module VcloudDirector
5
+ class Compute
7
6
  class Vm < Model
8
7
  identity :id
9
8
 
10
9
  attribute :vapp_id
11
- attribute :vapp_name
12
10
  attribute :name
13
11
  attribute :type
14
12
  attribute :description
@@ -18,7 +16,10 @@ module Fog
18
16
  attribute :operating_system
19
17
  attribute :ip_address
20
18
  attribute :cpu, :type => :integer
19
+ attribute :cores_per_socket, :type => :integer
20
+ attribute :cpu_hot_add, :type => :boolean
21
21
  attribute :memory, :type => :integer
22
+ attribute :memory_hot_add, :type => :boolean
22
23
  attribute :hard_disks, :aliases => :disks
23
24
  attribute :network_adapters
24
25
 
@@ -49,7 +50,7 @@ module Fog
49
50
  requires :id
50
51
  begin
51
52
  response = service.post_power_off_vapp(id)
52
- rescue Fog::Compute::VcloudDirector::BadRequest => ex
53
+ rescue Fog::VcloudDirector::Compute::BadRequest => ex
53
54
  Fog::Logger.debug(ex.message)
54
55
  return false
55
56
  end
@@ -61,7 +62,7 @@ module Fog
61
62
  requires :id
62
63
  begin
63
64
  response = service.post_power_on_vapp(id)
64
- rescue Fog::Compute::VcloudDirector::BadRequest => ex
65
+ rescue Fog::VcloudDirector::Compute::BadRequest => ex
65
66
  Fog::Logger.debug(ex.message)
66
67
  return false
67
68
  end
@@ -73,7 +74,7 @@ module Fog
73
74
  requires :id
74
75
  begin
75
76
  response = service.post_reboot_vapp(id)
76
- rescue Fog::Compute::VcloudDirector::BadRequest => ex
77
+ rescue Fog::VcloudDirector::Compute::BadRequest => ex
77
78
  Fog::Logger.debug(ex.message)
78
79
  return false
79
80
  end
@@ -85,7 +86,7 @@ module Fog
85
86
  requires :id
86
87
  begin
87
88
  response = service.post_reset_vapp(id)
88
- rescue Fog::Compute::VcloudDirector::BadRequest => ex
89
+ rescue Fog::VcloudDirector::Compute::BadRequest => ex
89
90
  Fog::Logger.debug(ex.message)
90
91
  return false
91
92
  end
@@ -96,7 +97,7 @@ module Fog
96
97
  requires :id
97
98
  begin
98
99
  response = service.post_undeploy_vapp(id)
99
- rescue Fog::Compute::VcloudDirector::BadRequest => ex
100
+ rescue Fog::VcloudDirector::Compute::BadRequest => ex
100
101
  Fog::Logger.debug(ex.message)
101
102
  return false
102
103
  end
@@ -108,7 +109,7 @@ module Fog
108
109
  requires :id
109
110
  begin
110
111
  response = service.post_shutdown_vapp(id)
111
- rescue Fog::Compute::VcloudDirector::BadRequest => ex
112
+ rescue Fog::VcloudDirector::Compute::BadRequest => ex
112
113
  Fog::Logger.debug(ex.message)
113
114
  return false
114
115
  end
@@ -120,7 +121,7 @@ module Fog
120
121
  requires :id
121
122
  begin
122
123
  response = service.post_suspend_vapp(id)
123
- rescue Fog::Compute::VcloudDirector::BadRequest => ex
124
+ rescue Fog::VcloudDirector::Compute::BadRequest => ex
124
125
  Fog::Logger.debug(ex.message)
125
126
  return false
126
127
  end
@@ -148,38 +149,17 @@ module Fog
148
149
  requires :id
149
150
  service.disks(:vm => self)
150
151
  end
151
-
152
- def memory=(new_memory)
153
- has_changed = ( memory != new_memory.to_i )
154
- not_first_set = !memory.nil?
155
- attributes[:memory] = new_memory.to_i
156
- if not_first_set && has_changed
157
- response = service.put_memory(id, memory)
158
- service.process_task(response.body)
159
- end
160
- end
161
-
162
- def cpu=(new_cpu)
163
- has_changed = ( cpu != new_cpu.to_i )
164
- not_first_set = !cpu.nil?
165
- attributes[:cpu] = new_cpu.to_i
166
- if not_first_set && has_changed
167
- response = service.put_cpu(id, cpu)
168
- service.process_task(response.body)
169
- end
170
- end
171
152
 
172
153
  # Reconfigure a VM using any of the options documented in
173
154
  # post_reconfigure_vm
174
- def reconfigure(options)
175
- options[:name] ||= name # name has to be sent
176
- # Delete those things that are not changing for performance
177
- [:cpu, :memory, :description].each do |k|
178
- options.delete(k) if options.key? k and options[k] == attributes[k]
179
- end
180
- response = service.post_reconfigure_vm(id, options)
155
+ def reconfigure(options, current: nil)
156
+ # Fetch current XML.
157
+ current ||= service.get_vapp(id, :parser => 'xml').body
158
+ # Let post_reconfigure_vm apply modifications.
159
+ response = service.post_reconfigure_vm(id, current, options)
181
160
  service.process_task(response.body)
182
- options.each {|k,v| attributes[k] = v}
161
+
162
+ # TODO: apply modifications on current VM instance.
183
163
  end
184
164
 
185
165
  def ready?
@@ -1,8 +1,6 @@
1
- require 'fog/core/model'
2
-
3
1
  module Fog
4
- module Compute
5
- class VcloudDirector
2
+ module VcloudDirector
3
+ class Compute
6
4
  class VmCustomization < Model
7
5
  identity :id
8
6
 
@@ -1,11 +1,10 @@
1
- require 'fog/core/collection'
2
1
  require 'fog/vcloud_director/models/compute/vm_customization'
3
2
 
4
3
  module Fog
5
- module Compute
6
- class VcloudDirector
4
+ module VcloudDirector
5
+ class Compute
7
6
  class VmCustomizations < Collection
8
- model Fog::Compute::VcloudDirector::VmCustomization
7
+ model Fog::VcloudDirector::Compute::VmCustomization
9
8
 
10
9
  attribute :vm
11
10
 
@@ -1,8 +1,6 @@
1
- require 'fog/core/model'
2
-
3
1
  module Fog
4
- module Compute
5
- class VcloudDirector
2
+ module VcloudDirector
3
+ class Compute
6
4
  class VmNetwork < Model
7
5
  identity :id
8
6
 
@@ -1,11 +1,10 @@
1
- require 'fog/core/collection'
2
1
  require 'fog/vcloud_director/models/compute/vm_network'
3
2
 
4
3
  module Fog
5
- module Compute
6
- class VcloudDirector
4
+ module VcloudDirector
5
+ class Compute
7
6
  class VmNetworks < Collection
8
- model Fog::Compute::VcloudDirector::VmNetwork
7
+ model Fog::VcloudDirector::Compute::VmNetwork
9
8
 
10
9
  attribute :vm
11
10
 
@@ -1,14 +1,13 @@
1
- require 'fog/core/collection'
2
1
  require 'fog/vcloud_director/models/compute/vm'
3
2
 
4
3
  module Fog
5
- module Compute
6
- class VcloudDirector
4
+ module VcloudDirector
5
+ class Compute
7
6
  class Vms < Collection
8
7
 
9
8
  include Fog::VcloudDirector::Query
10
9
 
11
- model Fog::Compute::VcloudDirector::Vm
10
+ model Fog::VcloudDirector::Compute::Vm
12
11
 
13
12
  attribute :vapp
14
13
 
@@ -36,7 +35,7 @@ module Fog
36
35
  end
37
36
 
38
37
  def item_list
39
- data = service.get_vms(vapp.id).body # vapp.id
38
+ data = service.get_vapp(vapp.id).body
40
39
  items = data[:vms]
41
40
  items
42
41
  end
@@ -1,7 +1,7 @@
1
1
  module Fog
2
- module Parsers
3
- module Compute
4
- module VcloudDirector
2
+ module VcloudDirector
3
+ module Parsers
4
+ module Compute
5
5
  class Disks < VcloudDirectorParser
6
6
  def reset
7
7
  @disk = {}
@@ -1,7 +1,7 @@
1
1
  module Fog
2
- module Parsers
3
- module Compute
4
- module VcloudDirector
2
+ module VcloudDirector
3
+ module Parsers
4
+ module Compute
5
5
  #
6
6
  # <Metadata xmlns="http://www.vmware.com/vcloud/v1.5" type="application/vnd.vmware.vcloud.metadata+xml" href="https://example.com/api/vApp/vm-18545e82-d919-4071-ae7e-d1300d9d8112/metadata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://10.194.1.65/api/v1.5/schema/master.xsd">
7
7
  # <Link rel="up" type="application/vnd.vmware.vcloud.vm+xml" href="https://example.com/api/vApp/vm-18545e82-d919-4071-ae7e-d1300d9d8112"/>
@@ -1,7 +1,7 @@
1
1
  module Fog
2
- module Parsers
3
- module Compute
4
- module VcloudDirector
2
+ module VcloudDirector
3
+ module Parsers
4
+ module Compute
5
5
  #
6
6
  #{:xmlns=>"http://www.vmware.com/vcloud/v1.5",
7
7
  # :xmlns_xsi=>"http://www.w3.org/2001/XMLSchema-instance",
@@ -0,0 +1,93 @@
1
+ require 'fog/vcloud_director/parsers/compute/vm_parser_helper'
2
+
3
+ module Fog
4
+ module VcloudDirector
5
+ module Parsers
6
+ module Compute
7
+ class Vapp < VcloudDirectorParser
8
+ include VmParserHelper
9
+
10
+ def reset
11
+ @response = @vapp = {
12
+ :lease_settings => 'not-implemented',
13
+ :network_section => 'not-implemented',
14
+ :network_config => 'not-implemented'
15
+ }
16
+ @in_sections = false
17
+ @parsing_vm = false
18
+ end
19
+
20
+ def start_element(name, attributes)
21
+ super
22
+ return vm_start_element(name, attributes) if @parsing_vm
23
+ vapp_start_element(name, attributes)
24
+ end
25
+
26
+ def end_element(name)
27
+ return vm_end_element(name) if @parsing_vm && name != 'Vm'
28
+ vapp_end_element(name)
29
+ end
30
+
31
+ private
32
+
33
+ def vapp_start_element(name, attributes)
34
+ case name
35
+ when 'VApp'
36
+ vapp_attrs = extract_attributes(attributes)
37
+ @vapp.merge!(vapp_attrs.reject { |key, _| ![:href, :name, :status, :type, :deployed].include?(key) })
38
+ @vapp[:id] ||= id_from_url(@vapp[:href], id_prefix: 'vapp-')
39
+ @vapp[:deployed] = @vapp[:deployed] == 'true'
40
+ when 'LeaseSettingsSection' # this is the first of the sections
41
+ @in_sections = true
42
+ @vapp[:description] ||= '' # if description wasn't parsed by now, then vApp has empty description
43
+ when 'User'
44
+ @vapp[:owner] = attr_value('href', attributes).to_s.split('/').last
45
+ when 'Vm'
46
+ @parsing_vm = true
47
+ vm_reset(@vapp[:id])
48
+ vm_start_element(name, attributes)
49
+ end
50
+ end
51
+
52
+ def vapp_end_element(name)
53
+ case name
54
+ when 'Description'
55
+ @vapp[:description] = value unless @in_sections
56
+ when 'InMaintenanceMode'
57
+ @vapp[:maintenance] = value == 'true'
58
+ when 'Vm'
59
+ @parsing_vm = false
60
+ @vapp[:vms] ||= []
61
+ @vapp[:vms] << @curr_vm
62
+ end
63
+ end
64
+
65
+ #
66
+ # Nested VMs
67
+ #
68
+
69
+ def vm_start_element(name, attributes)
70
+ return parse_vm_attributes(attributes, @curr_vm) if name == 'Vm'
71
+ parse_start_element(name, attributes, @curr_vm)
72
+ end
73
+
74
+ def vm_end_element(name)
75
+ parse_end_element(name, @curr_vm)
76
+ end
77
+
78
+ def vm_reset(vapp_id)
79
+ @curr_vm = initialize_vm
80
+ @curr_vm[:vapp_id] = vapp_id
81
+ @in_operating_system = false
82
+ @in_children = false
83
+ @resource_type = nil
84
+ @links = []
85
+ @element_name = nil
86
+ @current_network_connection = nil
87
+ @current_host_resource = nil
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -1,9 +1,9 @@
1
1
  require 'fog/vcloud_director/parsers/compute/vm_parser_helper'
2
2
 
3
3
  module Fog
4
- module Parsers
5
- module Compute
6
- module VcloudDirector
4
+ module VcloudDirector
5
+ module Parsers
6
+ module Compute
7
7
  class Vm < VcloudDirectorParser
8
8
  include VmParserHelper
9
9
 
@@ -11,77 +11,18 @@ module Fog
11
11
  @in_operating_system = false
12
12
  @in_children = false
13
13
  @resource_type = nil
14
- @response = { :vm => { :ip_address => '' } }
14
+ @response = { :vm => initialize_vm }
15
15
  @links = []
16
16
  end
17
17
 
18
18
  def start_element(name, attributes)
19
19
  super
20
- if name == 'Vm'
21
- vm_attrs = extract_attributes(attributes)
22
- @response[:vm].merge!(vm_attrs.reject {|key,value| ![:href, :name, :status, :type, :deployed].include?(key)})
23
- @response[:vm][:id] = @response[:vm][:href].split('/').last
24
- @response[:vm][:status] = human_status(@response[:vm][:status])
25
- @response[:vm][:deployed] = @response[:vm][:deployed] == 'true'
26
- else
27
- parse_start_element name, attributes, @response[:vm]
28
- end
20
+ return parse_vm_attributes(attributes, @response[:vm]) if name == 'Vm'
21
+ parse_start_element name, attributes, @response[:vm]
29
22
  end
30
23
 
31
24
  def end_element(name)
32
25
  parse_end_element name, @response[:vm]
33
- case name
34
- when 'IpAddress'
35
- @response[:vm][:ip_address] = value
36
- when 'Description'
37
- if @in_operating_system
38
- @response[:vm][:operating_system] = value
39
- @in_operating_system = false
40
- end
41
- when 'ResourceType'
42
- @resource_type = value
43
- when 'VirtualQuantity'
44
- case @resource_type
45
- when '3'
46
- @response[:vm][:cpu] = value
47
- when '4'
48
- @response[:vm][:memory] = value
49
- end
50
- when 'ElementName'
51
- @element_name = value
52
- when 'Item'
53
- case @resource_type
54
- when '17' # disk
55
- @response[:vm][:disks] ||= []
56
- @response[:vm][:disks] << { @element_name => @current_host_resource[:capacity].to_i }
57
- when '10' # nic
58
- @response[:vm][:network_adapters] ||= []
59
- @response[:vm][:network_adapters] << {
60
- :ip_address => @current_network_connection[:ipAddress],
61
- :primary => (@current_network_connection[:primaryNetworkConnection] == 'true'),
62
- :ip_allocation_mode => @current_network_connection[:ipAddressingMode]
63
- }
64
- end
65
- when 'Link'
66
- @response[:vm][:links] = @links
67
- end
68
- end
69
-
70
- def human_status(status)
71
- case status
72
- when '-1', -1
73
- 'failed_creation'
74
- when '0', 0
75
- 'creating'
76
- when '8', 8
77
- 'off'
78
- when '4', 4
79
- 'on'
80
- when '3', 3
81
- 'suspended'
82
- else
83
- 'unknown'
84
- end
85
26
  end
86
27
  end
87
28
  end