brightbox-cli 3.3.0 → 4.1.0

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 (419) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +1 -0
  3. data/.github/workflows/ruby.yml +1 -1
  4. data/.gitignore +1 -1
  5. data/.rubocop.yml +70 -0
  6. data/CHANGELOG.md +60 -0
  7. data/Gemfile.lock +74 -45
  8. data/Jenkinsfile +12 -32
  9. data/README +23 -32
  10. data/README.rdoc +1 -1
  11. data/brightbox-cli.gemspec +21 -34
  12. data/lib/brightbox-cli/accounts.rb +9 -11
  13. data/lib/brightbox-cli/api.rb +38 -36
  14. data/lib/brightbox-cli/cloud_ips.rb +8 -8
  15. data/lib/brightbox-cli/collaborating_account.rb +5 -5
  16. data/lib/brightbox-cli/collaboration.rb +1 -1
  17. data/lib/brightbox-cli/commands/accounts/{accept-invite.rb → accept_invite.rb} +2 -6
  18. data/lib/brightbox-cli/commands/accounts/default.rb +1 -2
  19. data/lib/brightbox-cli/commands/accounts/list.rb +6 -8
  20. data/lib/brightbox-cli/commands/accounts/remove.rb +2 -6
  21. data/lib/brightbox-cli/commands/accounts/{reset-ftp-password.rb → reset_ftp_password.rb} +6 -9
  22. data/lib/brightbox-cli/commands/accounts/show.rb +10 -13
  23. data/lib/brightbox-cli/commands/cloudips/create.rb +2 -5
  24. data/lib/brightbox-cli/commands/cloudips/destroy.rb +10 -14
  25. data/lib/brightbox-cli/commands/cloudips/list.rb +0 -2
  26. data/lib/brightbox-cli/commands/cloudips/map.rb +10 -13
  27. data/lib/brightbox-cli/commands/cloudips/show.rb +11 -14
  28. data/lib/brightbox-cli/commands/cloudips/unmap.rb +2 -4
  29. data/lib/brightbox-cli/commands/cloudips/update.rb +2 -4
  30. data/lib/brightbox-cli/commands/collaborations.rb +2 -3
  31. data/lib/brightbox-cli/commands/config/{client-add.rb → client_add.rb} +0 -3
  32. data/lib/brightbox-cli/commands/config/client_default.rb +18 -0
  33. data/lib/brightbox-cli/commands/config/{client-list.rb → client_list.rb} +1 -4
  34. data/lib/brightbox-cli/commands/config/{client-remove.rb → client_remove.rb} +0 -3
  35. data/lib/brightbox-cli/commands/config/{user-add.rb → user_add.rb} +1 -4
  36. data/lib/brightbox-cli/commands/firewall/{policies-apply.rb → policies_apply.rb} +2 -2
  37. data/lib/brightbox-cli/commands/firewall/{policies-create.rb → policies_create.rb} +2 -4
  38. data/lib/brightbox-cli/commands/firewall/{policies-destroy.rb → policies_destroy.rb} +0 -3
  39. data/lib/brightbox-cli/commands/firewall/{policies-list.rb → policies_list.rb} +0 -2
  40. data/lib/brightbox-cli/commands/firewall/{policies-remove.rb → policies_remove.rb} +2 -2
  41. data/lib/brightbox-cli/commands/firewall/{policies-show.rb → policies_show.rb} +6 -8
  42. data/lib/brightbox-cli/commands/firewall/{policies-update.rb → policies_update.rb} +2 -4
  43. data/lib/brightbox-cli/commands/firewall/{rules-create.rb → rules_create.rb} +6 -8
  44. data/lib/brightbox-cli/commands/firewall/{rules-destroy.rb → rules_destroy.rb} +0 -2
  45. data/lib/brightbox-cli/commands/firewall/{rules-list.rb → rules_list.rb} +0 -2
  46. data/lib/brightbox-cli/commands/firewall/{rules-show.rb → rules_show.rb} +7 -9
  47. data/lib/brightbox-cli/commands/firewall/{rules-update.rb → rules_update.rb} +7 -8
  48. data/lib/brightbox-cli/commands/groups/{add-server.rb → add_server.rb} +0 -2
  49. data/lib/brightbox-cli/commands/groups/create.rb +2 -3
  50. data/lib/brightbox-cli/commands/groups/destroy.rb +0 -2
  51. data/lib/brightbox-cli/commands/groups/list.rb +0 -1
  52. data/lib/brightbox-cli/commands/groups/move_servers.rb +2 -3
  53. data/lib/brightbox-cli/commands/groups/{remove-servers.rb → remove_servers.rb} +2 -4
  54. data/lib/brightbox-cli/commands/groups/show.rb +0 -2
  55. data/lib/brightbox-cli/commands/groups/update.rb +2 -3
  56. data/lib/brightbox-cli/commands/images/destroy.rb +0 -4
  57. data/lib/brightbox-cli/commands/images/list.rb +3 -5
  58. data/lib/brightbox-cli/commands/images/register.rb +9 -17
  59. data/lib/brightbox-cli/commands/images/show.rb +19 -20
  60. data/lib/brightbox-cli/commands/images/update.rb +12 -8
  61. data/lib/brightbox-cli/commands/lbs/{add-nodes.rb → add_nodes.rb} +0 -3
  62. data/lib/brightbox-cli/commands/lbs/create.rb +5 -7
  63. data/lib/brightbox-cli/commands/lbs/destroy.rb +0 -3
  64. data/lib/brightbox-cli/commands/lbs/list.rb +0 -1
  65. data/lib/brightbox-cli/commands/lbs/{remove-nodes.rb → remove_nodes.rb} +0 -3
  66. data/lib/brightbox-cli/commands/lbs/show.rb +20 -22
  67. data/lib/brightbox-cli/commands/lbs/update.rb +6 -9
  68. data/lib/brightbox-cli/commands/login.rb +13 -12
  69. data/lib/brightbox-cli/commands/servers/{activate-console.rb → activate_console.rb} +2 -5
  70. data/lib/brightbox-cli/commands/servers/create.rb +32 -26
  71. data/lib/brightbox-cli/commands/servers/destroy.rb +0 -3
  72. data/lib/brightbox-cli/commands/servers/list.rb +4 -5
  73. data/lib/brightbox-cli/commands/servers/show.rb +0 -2
  74. data/lib/brightbox-cli/commands/servers/shutdown.rb +0 -3
  75. data/lib/brightbox-cli/commands/servers/snapshot.rb +0 -4
  76. data/lib/brightbox-cli/commands/servers/start.rb +0 -4
  77. data/lib/brightbox-cli/commands/servers/stop.rb +0 -3
  78. data/lib/brightbox-cli/commands/servers/update.rb +5 -5
  79. data/lib/brightbox-cli/commands/sql/instances_create.rb +3 -6
  80. data/lib/brightbox-cli/commands/sql/instances_destroy.rb +0 -2
  81. data/lib/brightbox-cli/commands/sql/instances_list.rb +7 -9
  82. data/lib/brightbox-cli/commands/sql/instances_reset_password.rb +0 -1
  83. data/lib/brightbox-cli/commands/sql/instances_show.rb +0 -3
  84. data/lib/brightbox-cli/commands/sql/instances_snapshot.rb +0 -3
  85. data/lib/brightbox-cli/commands/sql/instances_update.rb +1 -3
  86. data/lib/brightbox-cli/commands/sql/snapshots_destroy.rb +0 -3
  87. data/lib/brightbox-cli/commands/sql/snapshots_list.rb +7 -9
  88. data/lib/brightbox-cli/commands/sql/snapshots_show.rb +12 -15
  89. data/lib/brightbox-cli/commands/sql/snapshots_update.rb +1 -3
  90. data/lib/brightbox-cli/commands/sql/types.rb +8 -15
  91. data/lib/brightbox-cli/commands/token.rb +0 -1
  92. data/lib/brightbox-cli/commands/types.rb +8 -14
  93. data/lib/brightbox-cli/commands/{user-collaborations.rb → user_collaborations.rb} +7 -8
  94. data/lib/brightbox-cli/commands/users/list.rb +0 -2
  95. data/lib/brightbox-cli/commands/users/show.rb +1 -3
  96. data/lib/brightbox-cli/commands/users/update.rb +3 -6
  97. data/lib/brightbox-cli/commands/zones.rb +7 -10
  98. data/lib/brightbox-cli/config/accounts.rb +18 -26
  99. data/lib/brightbox-cli/config/api_client.rb +12 -16
  100. data/lib/brightbox-cli/config/authentication_tokens.rb +39 -42
  101. data/lib/brightbox-cli/config/cache.rb +1 -0
  102. data/lib/brightbox-cli/config/clients.rb +8 -8
  103. data/lib/brightbox-cli/config/gpg_encrypted_passwords.rb +6 -8
  104. data/lib/brightbox-cli/config/password_helper.rb +33 -8
  105. data/lib/brightbox-cli/config/sections.rb +45 -29
  106. data/lib/brightbox-cli/config/two_factor_auth.rb +12 -14
  107. data/lib/brightbox-cli/config/two_factor_helper.rb +5 -7
  108. data/lib/brightbox-cli/config/user_application.rb +18 -18
  109. data/lib/brightbox-cli/config.rb +26 -23
  110. data/lib/brightbox-cli/connection_manager.rb +4 -2
  111. data/lib/brightbox-cli/database_server.rb +28 -29
  112. data/lib/brightbox-cli/database_snapshot.rb +1 -1
  113. data/lib/brightbox-cli/database_type.rb +6 -6
  114. data/lib/brightbox-cli/detailed_server.rb +43 -43
  115. data/lib/brightbox-cli/detailed_server_group.rb +1 -1
  116. data/lib/brightbox-cli/error_parser.rb +9 -9
  117. data/lib/brightbox-cli/firewall_policy.rb +2 -1
  118. data/lib/brightbox-cli/firewall_rule.rb +3 -3
  119. data/lib/brightbox-cli/firewall_rules.rb +3 -3
  120. data/lib/brightbox-cli/gli_global_hooks.rb +25 -27
  121. data/lib/brightbox-cli/images.rb +14 -12
  122. data/lib/brightbox-cli/load_balancers.rb +3 -6
  123. data/lib/brightbox-cli/logging.rb +14 -14
  124. data/lib/brightbox-cli/nilable_hash.rb +1 -1
  125. data/lib/brightbox-cli/ruby_core_ext.rb +3 -3
  126. data/lib/brightbox-cli/server_groups.rb +2 -2
  127. data/lib/brightbox-cli/servers.rb +6 -6
  128. data/lib/brightbox-cli/tables.rb +13 -15
  129. data/lib/brightbox-cli/types.rb +6 -6
  130. data/lib/brightbox-cli/user_collaboration.rb +5 -7
  131. data/lib/brightbox-cli/users.rb +1 -1
  132. data/lib/brightbox-cli/version.rb +1 -1
  133. data/lib/brightbox-cli/zones.rb +1 -1
  134. data/lib/brightbox_cli.rb +33 -33
  135. data/locales/en.yml +2 -0
  136. data/spec/brightbox_spec.rb +0 -1
  137. data/spec/cassettes/Brightbox_Account/_all/when_connected_using_an_application/returns_a_collection_of_Accounts.yml +5 -5
  138. data/spec/cassettes/Brightbox_Account/_all/when_connected_using_an_application/returns_resources_on_the_same_connection.yml +2 -2
  139. data/spec/cassettes/Brightbox_Account/_all/when_connected_using_an_client/returns_a_collection_of_Accounts.yml +4 -4
  140. data/spec/cassettes/Brightbox_Account/_all/when_connected_using_an_client/returns_resources_on_the_same_connection.yml +2 -2
  141. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_config_exists_and_overwrite_duplicates_is_false/does_not_update_the_config_file.yml +12 -12
  142. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_config_exists_and_overwrite_duplicates_is_true/does_not_update_the_config_file.yml +12 -12
  143. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_first_and_only_client/saves_changes_to_the_config_file.yml +2 -2
  144. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_first_and_only_client/saves_the_default_account.yml +2 -2
  145. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_first_and_only_client/saves_the_new_client_as_the_default.yml +2 -2
  146. data/spec/cassettes/Brightbox_BBConfig/_find_or_set_default_account/when_client_is_not_authenticated/does_not_raise_an_error.yml +8 -8
  147. data/spec/cassettes/Brightbox_BBConfig/_find_or_set_default_account/when_client_may_access_one_account/updates_the_setting.yml +8 -8
  148. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_config_in_use_is_not_the_default/uses_correct_credentials.yml +1 -1
  149. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_using_a_user_app_with_a_cached_refresh_token/caches_the_new_tokens.yml +1 -1
  150. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_using_a_user_app_with_an_expired_refresh_token/caches_the_new_tokens.yml +2 -2
  151. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_using_a_user_app_with_no_tokens/caches_the_new_tokens.yml +1 -1
  152. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_using_a_user_app_with_no_tokens/prompts_user_to_retry_command.yml +1 -1
  153. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_using_an_API_client_with_no_tokens/caches_a_new_access_token.yml +1 -1
  154. data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/does_not_alter_the_configuration.yml +6 -6
  155. data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/updates_access_token.yml +6 -6
  156. data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/updates_refresh_token.yml +6 -6
  157. data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/does_not_alter_the_configuration.yml +6 -6
  158. data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/updates_access_token.yml +6 -6
  159. data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/updates_refresh_token.yml +6 -6
  160. data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/does_not_alter_the_configuration.yml +9 -9
  161. data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/updates_access_token.yml +9 -9
  162. data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/updates_refresh_token.yml +9 -9
  163. data/spec/cassettes/Brightbox_BBConfig_add_login/when_no_config_exists/creates_the_configuration.yml +6 -6
  164. data/spec/cassettes/Brightbox_BBConfig_add_login/when_no_config_exists/refreshed_tokens.yml +6 -6
  165. data/spec/cassettes/Brightbox_BBConfig_add_login/when_using_an_email_and_suffix/creates_the_configuration.yml +6 -6
  166. data/spec/cassettes/Brightbox_BBConfig_add_login/when_using_an_email_and_suffix/refreshed_tokens.yml +6 -6
  167. data/spec/cassettes/Brightbox_CloudIP/_find_all_/when_a_Cloud_IP_exists/returns_a_suitable.yml +15 -15
  168. data/spec/cassettes/Brightbox_FirewallPolicy/_apply_to/should_apply_firewall_policy.yml +14 -14
  169. data/spec/cassettes/Brightbox_FirewallPolicy/_create/should_create_firewall_policy.yml +14 -14
  170. data/spec/cassettes/Brightbox_FirewallPolicy/_destroy/should_destroy_firewall_policy.yml +16 -16
  171. data/spec/cassettes/Brightbox_FirewallPolicy/_find_all_/when_a_policy_exists/should_list_firewall_policy.yml +13 -13
  172. data/spec/cassettes/Brightbox_FirewallPolicy/_find_or_call/when_a_policy_exists/should_show_firewall_policy.yml +11 -11
  173. data/spec/cassettes/Brightbox_FirewallRule/_create/when_policy_exists/creates_the_rule_successfully.yml +14 -14
  174. data/spec/cassettes/Brightbox_FirewallRule/_destroy/when_rule_exists/destroys_a_rule.yml +12 -12
  175. data/spec/cassettes/Brightbox_FirewallRule/_find/when_rule_exists/can_display_the_result.yml +14 -14
  176. data/spec/cassettes/Brightbox_FirewallRule/_from_policy/when_policy_exists_with_a_rule/lists_all_rules.yml +19 -19
  177. data/spec/cassettes/Brightbox_Server/_destroy/when_server_exists/should_work.yml +12 -12
  178. data/spec/cassettes/Brightbox_Server/_find_all_/when_a_server_exists/should_print_server_list.yml +15 -15
  179. data/spec/cassettes/Brightbox_Server/_show/when_server_exists/shows_detailed_attributes_of_a_server.yml +18 -18
  180. data/spec/cassettes/Brightbox_Server/_shutdown/should_work.yml +18 -18
  181. data/spec/cassettes/Brightbox_Server/_start/should_work.yml +24 -24
  182. data/spec/cassettes/Brightbox_Server/_stop/should_work.yml +18 -18
  183. data/spec/cassettes/Brightbox_Server/_update/when_passing_new_group_membership/should_update_with_group.yml +22 -22
  184. data/spec/cassettes/Brightbox_ServerGroup/_find_all_/when_a_group_exists/list_server_groups.yml +13 -13
  185. data/spec/cassettes/Firewall_policies/update/when_the_policy_does_not_exist/prints_error_to_STDERR.yml +3 -3
  186. data/spec/cassettes/brightbox_accounts/list/_when_access_token_expired_/does_not_report_invalid_token_errors.yml +30 -30
  187. data/spec/cassettes/brightbox_accounts/list/_when_both_tokens_expired_/does_not_report_invalid_token_errors.yml +9 -9
  188. data/spec/cassettes/brightbox_accounts/list/_when_invalid_tokens_/does_not_report_invalid_token_errors.yml +9 -9
  189. data/spec/cassettes/brightbox_accounts/list/_when_no_tokens_/does_not_report_invalid_token_errors.yml +27 -27
  190. data/spec/cassettes/brightbox_accounts/list/_when_no_tokens_/reports_they_were_updated.yml +7 -7
  191. data/spec/cassettes/brightbox_accounts/list/_when_no_tokens_and_password_incorrect_/does_not_report_invalid_token_errors.yml +7 -7
  192. data/spec/cassettes/brightbox_accounts/list/_when_no_tokens_and_password_incorrect_/reports_unable_to_authenticate.yml +6 -6
  193. data/spec/cassettes/brightbox_accounts/list/does_not_error.yml +3 -3
  194. data/spec/cassettes/brightbox_cloudips/map/when_destination_is_a_server_ID/passes_the_interface_identifier_to_the_API.yml +12 -12
  195. data/spec/cassettes/brightbox_cloudips/map/when_destination_is_another_value/passes_the_identifier_to_the_API.yml +7 -7
  196. data/spec/cassettes/brightbox_config/client_add/when_adding_a_new_client/does_not_error.yml +7 -7
  197. data/spec/cassettes/brightbox_config/client_add/when_adding_a_new_client/sets_up_the_config.yml +7 -7
  198. data/spec/cassettes/brightbox_config/client_add/when_new_client_is_first_and_only_client/does_not_change_the_default_client.yml +7 -7
  199. data/spec/cassettes/brightbox_config/client_add/when_new_client_is_first_and_only_client/does_not_error.yml +7 -7
  200. data/spec/cassettes/brightbox_config/client_add/when_new_client_is_first_and_only_client/sets_this_as_the_default_client.yml +7 -7
  201. data/spec/cassettes/brightbox_config/client_add/when_new_client_is_first_and_only_client/sets_up_the_config.yml +7 -7
  202. data/spec/cassettes/brightbox_config/user_add/when_NO_config_file_on_disk/sets_up_the_config.yml +5 -5
  203. data/spec/cassettes/brightbox_config/user_add/when_a_default_client_is_already_set/does_not_change_the_default_client.yml +2 -2
  204. data/spec/cassettes/brightbox_config/user_add/when_application_details_in_config/does_not_error.yml +2 -2
  205. data/spec/cassettes/brightbox_config/user_add/when_application_details_in_config/sets_up_the_config.yml +2 -2
  206. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_only_one_active_account/display_an_warning_about_preselected_default.yml +2 -2
  207. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_only_one_active_account/does_not_error.yml +2 -2
  208. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_only_one_active_account/selects_the_active_account_for_the_default.yml +2 -2
  209. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_only_one_active_account/sets_up_the_config.yml +2 -2
  210. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_to_multiple_accounts/display_an_warning_about_preselected_default.yml +2 -2
  211. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_to_multiple_accounts/does_not_error.yml +2 -2
  212. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_to_multiple_accounts/sets_up_the_config.yml +2 -2
  213. data/spec/cassettes/brightbox_config/user_add/when_new_client_is_first_and_only_client/does_not_error.yml +2 -2
  214. data/spec/cassettes/brightbox_config/user_add/when_new_client_is_first_and_only_client/does_not_prompt_to_rerun_the_command.yml +2 -2
  215. data/spec/cassettes/brightbox_config/user_add/when_new_client_is_first_and_only_client/requests_access_tokens.yml +2 -2
  216. data/spec/cassettes/brightbox_config/user_add/when_new_client_is_first_and_only_client/sets_this_as_the_default_client.yml +2 -2
  217. data/spec/cassettes/brightbox_config/user_add/when_new_client_is_first_and_only_client/sets_up_the_config.yml +5 -5
  218. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments/does_not_error.yml +2 -2
  219. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments/does_not_prompt_to_rerun_the_command.yml +2 -2
  220. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments/requests_access_tokens.yml +2 -2
  221. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments/sets_up_the_config.yml +3 -3
  222. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments_and_api_url/does_not_error.yml +2 -2
  223. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments_and_api_url/requests_access_tokens.yml +2 -2
  224. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments_and_api_url/sets_up_the_config.yml +2 -2
  225. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/does_not_error.yml +6 -6
  226. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/does_not_prompt_to_rerun_the_command.yml +6 -6
  227. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/prompts_for_the_password.yml +6 -6
  228. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/requests_access_tokens.yml +6 -6
  229. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/sets_up_the_config.yml +6 -6
  230. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/does_not_error.yml +6 -6
  231. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/does_not_prompt_to_rerun_the_command.yml +6 -6
  232. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/prompts_for_the_password.yml +6 -6
  233. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/requests_access_tokens.yml +6 -6
  234. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/sets_up_the_config.yml +6 -6
  235. data/spec/cassettes/brightbox_login/when_default_account_is_passed/does_not_error.yml +3 -3
  236. data/spec/cassettes/brightbox_login/when_default_account_is_passed/does_not_prompt_to_rerun_the_command.yml +3 -3
  237. data/spec/cassettes/brightbox_login/when_default_account_is_passed/prompts_for_the_password.yml +3 -3
  238. data/spec/cassettes/brightbox_login/when_default_account_is_passed/requests_access_tokens.yml +3 -3
  239. data/spec/cassettes/brightbox_login/when_default_account_is_passed/sets_up_the_config.yml +3 -3
  240. data/spec/cassettes/brightbox_login/when_no_config_is_present/does_not_error.yml +6 -6
  241. data/spec/cassettes/brightbox_login/when_no_config_is_present/does_not_prompt_to_rerun_the_command.yml +6 -6
  242. data/spec/cassettes/brightbox_login/when_no_config_is_present/requests_access_tokens.yml +6 -6
  243. data/spec/cassettes/brightbox_login/when_no_config_is_present/sets_up_the_config.yml +6 -6
  244. data/spec/cassettes/brightbox_login/when_no_password_is_given/does_not_error.yml +6 -6
  245. data/spec/cassettes/brightbox_login/when_no_password_is_given/does_not_prompt_to_rerun_the_command.yml +6 -6
  246. data/spec/cassettes/brightbox_login/when_no_password_is_given/prompts_for_the_password.yml +6 -6
  247. data/spec/cassettes/brightbox_login/when_no_password_is_given/requests_access_tokens.yml +6 -6
  248. data/spec/cassettes/brightbox_login/when_no_password_is_given/sets_up_the_config.yml +6 -6
  249. data/spec/cassettes/brightbox_sql_instances/create/--allow-access_10_0_0_0/correctly_sends_API_parameters.yml +313 -26
  250. data/spec/cassettes/brightbox_sql_instances/create/--allow-access_srv-12345_grp-12345/correctly_sends_API_parameters.yml +1204 -38
  251. data/spec/cassettes/brightbox_sql_instances/create/--engine_mysql/correctly_sends_API_parameters.yml +596 -26
  252. data/spec/cassettes/brightbox_sql_instances/create/--engine_mysql_--engine-version_5_6/correctly_sends_API_parameters.yml +63 -9
  253. data/spec/cassettes/brightbox_sql_instances/create/--engine_mysql_--engine-version_8_0/correctly_sends_API_parameters.yml +393 -0
  254. data/spec/cassettes/brightbox_sql_instances/create/--maintenance-weekday_5_--maintenance_hour_11/correctly_sends_API_parameters.yml +393 -0
  255. data/spec/cassettes/brightbox_sql_instances/create/--maintenance-weekday_thursday/correctly_sends_API_parameters.yml +393 -0
  256. data/spec/cassettes/brightbox_sql_instances/create/--snapshot_dbi-12345/includes_schedule_fields_in_response.yml +1466 -0
  257. data/spec/cassettes/brightbox_sql_instances/create/--snapshots-schedule_0_12_4_/includes_schedule_fields_in_response.yml +342 -0
  258. data/spec/cassettes/brightbox_sql_instances/create/without_arguments/reports_the_new_admin_password.yml +541 -26
  259. data/spec/cassettes/brightbox_sql_instances/create/without_arguments/reports_the_new_admin_username.yml +484 -26
  260. data/spec/cassettes/brightbox_sql_instances/snapshot/when_database_server_active/correctly_sends_API_parameters.yml +4 -4
  261. data/spec/cassettes/brightbox_sql_instances/snapshot/when_database_server_can_not_be_snapshotted/reports_an_error_to_the_user.yml +2 -2
  262. data/spec/cassettes/brightbox_sql_snapshots/list/when_resources_are_available/does_not_output_to_stderr.yml +2 -2
  263. data/spec/cassettes/brightbox_sql_snapshots/list/when_resources_are_available/outputs_table_details_to_stdout.yml +2 -2
  264. data/spec/cassettes/brightbox_sql_snapshots/show/when_resource_exists/does_not_output_to_stderr.yml +2 -2
  265. data/spec/commands/accounts/default_spec.rb +1 -2
  266. data/spec/commands/accounts/list_spec.rb +7 -8
  267. data/spec/commands/accounts/reset_ftp_password_spec.rb +1 -2
  268. data/spec/commands/accounts/show_spec.rb +1 -2
  269. data/spec/commands/cloudips/create_spec.rb +1 -2
  270. data/spec/commands/cloudips/destroy_spec.rb +1 -2
  271. data/spec/commands/cloudips/list_spec.rb +1 -2
  272. data/spec/commands/cloudips/map_spec.rb +2 -3
  273. data/spec/commands/cloudips/show_spec.rb +1 -2
  274. data/spec/commands/cloudips/unmap_spec.rb +1 -2
  275. data/spec/commands/cloudips/update_spec.rb +7 -8
  276. data/spec/commands/config/client_add_spec.rb +2 -3
  277. data/spec/commands/config/client_default_spec.rb +1 -2
  278. data/spec/commands/config/client_list_spec.rb +1 -2
  279. data/spec/commands/config/client_remove_spec.rb +1 -2
  280. data/spec/commands/config/user_add_spec.rb +3 -4
  281. data/spec/commands/firewall_policies/update_spec.rb +3 -3
  282. data/spec/commands/groups/add_server_spec.rb +1 -2
  283. data/spec/commands/groups/create_spec.rb +1 -2
  284. data/spec/commands/groups/destroy_spec.rb +1 -2
  285. data/spec/commands/groups/list_spec.rb +1 -2
  286. data/spec/commands/groups/move_servers_spec.rb +1 -2
  287. data/spec/commands/groups/remove_servers_spec.rb +1 -2
  288. data/spec/commands/groups/show_spec.rb +1 -2
  289. data/spec/commands/groups/update_spec.rb +1 -2
  290. data/spec/commands/images/destroy_spec.rb +1 -2
  291. data/spec/commands/images/list_spec.rb +62 -63
  292. data/spec/commands/images/locking_spec.rb +4 -4
  293. data/spec/commands/images/register_spec.rb +89 -3
  294. data/spec/commands/images/show_spec.rb +56 -4
  295. data/spec/commands/images/update_spec.rb +53 -3
  296. data/spec/commands/lbs/add_nodes_spec.rb +1 -2
  297. data/spec/commands/lbs/create_spec.rb +2 -3
  298. data/spec/commands/lbs/destroy_spec.rb +1 -2
  299. data/spec/commands/lbs/list_spec.rb +1 -2
  300. data/spec/commands/lbs/locking_spec.rb +4 -4
  301. data/spec/commands/lbs/remove_nodes_spec.rb +1 -2
  302. data/spec/commands/lbs/show_spec.rb +1 -2
  303. data/spec/commands/lbs/update_spec.rb +3 -4
  304. data/spec/commands/login_spec.rb +134 -30
  305. data/spec/commands/policies/apply_spec.rb +1 -2
  306. data/spec/commands/policies/create_spec.rb +1 -2
  307. data/spec/commands/policies/destroy_spec.rb +1 -2
  308. data/spec/commands/policies/list_spec.rb +1 -2
  309. data/spec/commands/policies/remove_spec.rb +1 -2
  310. data/spec/commands/policies/show_spec.rb +1 -2
  311. data/spec/commands/policies/update_spec.rb +1 -2
  312. data/spec/commands/rules/create_spec.rb +1 -2
  313. data/spec/commands/rules/destroy_spec.rb +1 -2
  314. data/spec/commands/rules/list_spec.rb +1 -2
  315. data/spec/commands/rules/show_spec.rb +1 -2
  316. data/spec/commands/rules/update_spec.rb +1 -2
  317. data/spec/commands/servers/activate_console_spec.rb +1 -2
  318. data/spec/commands/servers/create_spec.rb +112 -10
  319. data/spec/commands/servers/destroy_spec.rb +1 -2
  320. data/spec/commands/servers/list_spec.rb +1 -2
  321. data/spec/commands/servers/locking_spec.rb +4 -4
  322. data/spec/commands/servers/reboot_spec.rb +3 -4
  323. data/spec/commands/servers/reset_spec.rb +3 -4
  324. data/spec/commands/servers/show_spec.rb +1 -2
  325. data/spec/commands/servers/shutdown_spec.rb +1 -2
  326. data/spec/commands/servers/snapshot_spec.rb +1 -2
  327. data/spec/commands/servers/start_spec.rb +1 -2
  328. data/spec/commands/servers/stop_spec.rb +1 -2
  329. data/spec/commands/servers/update_spec.rb +1 -2
  330. data/spec/commands/sql/instances/create_spec.rb +58 -75
  331. data/spec/commands/sql/instances/locking_spec.rb +4 -4
  332. data/spec/commands/sql/instances/show_spec.rb +7 -7
  333. data/spec/commands/sql/instances/snapshot_spec.rb +2 -2
  334. data/spec/commands/sql/instances/update_spec.rb +8 -8
  335. data/spec/commands/sql/snapshots/list_spec.rb +1 -1
  336. data/spec/commands/sql/snapshots/locking_spec.rb +4 -4
  337. data/spec/commands/sql/snapshots/show_spec.rb +1 -1
  338. data/spec/commands/sql/types/list_spec.rb +1 -2
  339. data/spec/commands/types/list_spec.rb +1 -2
  340. data/spec/commands/users/list_spec.rb +1 -2
  341. data/spec/commands/users/show_spec.rb +1 -2
  342. data/spec/commands/users/update_spec.rb +1 -2
  343. data/spec/commands/zones/list_spec.rb +1 -2
  344. data/spec/configs/api_client.ini +1 -1
  345. data/spec/configs/user_app.ini +2 -2
  346. data/spec/spec_helper.rb +16 -3
  347. data/spec/support/authentication_helpers.rb +98 -0
  348. data/spec/support/config_helpers.rb +2 -4
  349. data/spec/support/password_prompt_helpers.rb +22 -1
  350. data/spec/support/server_helper.rb +5 -5
  351. data/spec/support/tmp_config.rb +1 -1
  352. data/spec/support/token_helpers.rb +2 -2
  353. data/spec/support/vcr.rb +3 -22
  354. data/spec/unit/brightbox/api/created_on_spec.rb +2 -2
  355. data/spec/unit/brightbox/api/fog_model_spec.rb +13 -13
  356. data/spec/unit/brightbox/api/klass_name_spec.rb +0 -1
  357. data/spec/unit/brightbox/api/method_missing_spec.rb +64 -0
  358. data/spec/unit/brightbox/api/require_account_spec.rb +0 -1
  359. data/spec/unit/brightbox/api/respond_to_spec.rb +71 -0
  360. data/spec/unit/brightbox/bb_config/access_token_filename_spec.rb +0 -1
  361. data/spec/unit/brightbox/bb_config/account_spec.rb +0 -1
  362. data/spec/unit/brightbox/bb_config/add_login_spec.rb +27 -28
  363. data/spec/unit/brightbox/bb_config/add_section_spec.rb +1 -2
  364. data/spec/unit/brightbox/bb_config/clear_default_client_spec.rb +0 -1
  365. data/spec/unit/brightbox/bb_config/client_id_spec.rb +0 -1
  366. data/spec/unit/brightbox/bb_config/client_name_spec.rb +0 -1
  367. data/spec/unit/brightbox/bb_config/config_directory_exists_spec.rb +0 -1
  368. data/spec/unit/brightbox/bb_config/config_directory_spec.rb +0 -1
  369. data/spec/unit/brightbox/bb_config/config_spec.rb +2 -3
  370. data/spec/unit/brightbox/bb_config/default_account_spec.rb +0 -1
  371. data/spec/unit/brightbox/bb_config/default_client_spec.rb +0 -1
  372. data/spec/unit/brightbox/bb_config/delete_section_spec.rb +0 -1
  373. data/spec/unit/brightbox/bb_config/find_or_set_default_account_spec.rb +4 -4
  374. data/spec/unit/brightbox/bb_config/refresh_token_filename_spec.rb +0 -1
  375. data/spec/unit/brightbox/bb_config/renew_tokens_spec.rb +3 -4
  376. data/spec/unit/brightbox/bb_config/save_default_account_spec.rb +0 -1
  377. data/spec/unit/brightbox/bb_config/save_spec.rb +0 -1
  378. data/spec/unit/brightbox/bb_config/section_names_spec.rb +1 -1
  379. data/spec/unit/brightbox/bb_config/to_fog_spec.rb +2 -2
  380. data/spec/unit/brightbox/collaborating_account/to_row_spec.rb +3 -3
  381. data/spec/unit/brightbox/config/api_client/to_fog_spec.rb +8 -8
  382. data/spec/unit/brightbox/config/api_client/valid_spec.rb +4 -4
  383. data/spec/unit/brightbox/config/discover_two_factor_pin_spec.rb +87 -0
  384. data/spec/unit/brightbox/config/section_name_deduplicator_spec.rb +1 -1
  385. data/spec/unit/brightbox/config/user_application/to_fog_spec.rb +10 -10
  386. data/spec/unit/brightbox/config/user_application/valid_spec.rb +3 -3
  387. data/spec/unit/brightbox/connection_manager/fetch_connection_spec.rb +1 -1
  388. data/spec/unit/brightbox/database_server/clean_arguments_spec.rb +1 -2
  389. data/spec/unit/brightbox/database_server/maintenance_window_spec.rb +0 -1
  390. data/spec/unit/brightbox/error_parser/pretty_print_spec.rb +0 -1
  391. data/spec/unit/brightbox/firewall_policy/apply_to_spec.rb +0 -1
  392. data/spec/unit/brightbox/firewall_policy/create_spec.rb +0 -1
  393. data/spec/unit/brightbox/firewall_policy/find_or_call_spec.rb +0 -1
  394. data/spec/unit/brightbox/firewall_policy/find_spec.rb +0 -1
  395. data/spec/unit/brightbox/firewall_rule/find_spec.rb +9 -9
  396. data/spec/unit/brightbox/firewall_rule/from_policy_spec.rb +4 -4
  397. data/spec/unit/brightbox/legacy/args_adjuster_spec.rb +20 -21
  398. data/spec/unit/brightbox/server/create_spec.rb +1 -2
  399. data/spec/unit/brightbox/server/start_spec.rb +2 -2
  400. data/spec/unit/brightbox/server/update_spec.rb +0 -1
  401. data/spec/unit/brightbox/user_collaboration/remove_spec.rb +0 -1
  402. data/spec/unit/nilable_hash_spec.rb +5 -5
  403. data/spec/unit/ruby_core_ext_spec.rb +3 -4
  404. data/spec/unit/temporary_home_spec.rb +1 -1
  405. data/spec/unit/tmp_config_spec.rb +0 -1
  406. metadata +131 -99
  407. data/bin/brightbox-accounts +0 -13
  408. data/bin/brightbox-cloudips +0 -13
  409. data/bin/brightbox-config +0 -13
  410. data/bin/brightbox-firewall-policies +0 -13
  411. data/bin/brightbox-firewall-rules +0 -13
  412. data/bin/brightbox-groups +0 -13
  413. data/bin/brightbox-images +0 -13
  414. data/bin/brightbox-lbs +0 -13
  415. data/bin/brightbox-servers +0 -13
  416. data/bin/brightbox-types +0 -13
  417. data/bin/brightbox-users +0 -13
  418. data/bin/brightbox-zones +0 -13
  419. data/lib/brightbox-cli/commands/config/client-default.rb +0 -26
@@ -1,15 +1,13 @@
1
1
  module Brightbox
2
2
  command [:images] do |cmd|
3
-
4
3
  cmd.desc I18n.t("images.update.desc")
5
4
  cmd.arg_name "img-id"
6
5
  cmd.command [:update] do |c|
7
-
8
6
  c.desc I18n.t("options.name.desc")
9
- c.flag [:n, :name]
7
+ c.flag %i[n name]
10
8
 
11
9
  c.desc I18n.t("options.description.desc")
12
- c.flag [:d, :description]
10
+ c.flag %i[d description]
13
11
 
14
12
  c.desc "Architecture of the image (i686 or x86_64)"
15
13
  c.flag [:a, "arch"]
@@ -20,6 +18,9 @@ module Brightbox
20
18
  c.desc "Set image to be publicly visible (true or false)"
21
19
  c.flag [:p, "public"]
22
20
 
21
+ c.desc "Set minimum amount of RAM required by this image (MB)"
22
+ c.flag ["min-ram"]
23
+
23
24
  c.desc "Set image to be deprecated (true or false)"
24
25
  c.flag "deprecated"
25
26
 
@@ -29,11 +30,12 @@ module Brightbox
29
30
  c.action do |global_options, options, args|
30
31
  img_id = args.shift
31
32
  raise "You must specify the image to update as the first argument" unless img_id =~ /^img-/
32
- if options[:m]
33
- raise "Mode must be 'virtio' or 'compatibility'" unless options[:m] == "virtio" || options[:m] == "compatibility"
33
+
34
+ if options[:m] && !(options[:m] == "virtio" || options[:m] == "compatibility")
35
+ raise "Mode must be 'virtio' or 'compatibility'"
34
36
  end
35
- if options[:p]
36
- raise "Public must be true or false" unless options[:p] == "true" || options[:p] == "false"
37
+ if options[:p] && !(options[:p] == "true" || options[:p] == "false")
38
+ raise "Public must be true or false"
37
39
  end
38
40
 
39
41
  params = NilableHash.new
@@ -49,6 +51,8 @@ module Brightbox
49
51
  params[:public] = true if options[:p] == "true"
50
52
  params[:public] = false if options[:p] == "false"
51
53
 
54
+ params[:min_ram] = options["min-ram"].to_i if options["min-ram"]
55
+
52
56
  # If options[:deprecated] isn't specified, leave the status alone
53
57
  params[:status] = "deprecated" if options[:deprecated] == "true"
54
58
  params[:status] = "available" if options[:deprecated] == "false"
@@ -1,13 +1,10 @@
1
1
  module Brightbox
2
2
  desc I18n.t("lbs.desc")
3
3
  command [:lbs] do |cmd|
4
-
5
4
  cmd.desc I18n.t("lbs.add_nodes.desc")
6
5
  cmd.arg_name "lb-id node-id..."
7
6
  cmd.command [:add_nodes] do |c|
8
-
9
7
  c.action do |global_options, _options, args|
10
-
11
8
  raise "You must specify the load balancer and the node ids to add" if args.size < 2
12
9
 
13
10
  lb = LoadBalancer.find(args.shift)
@@ -1,21 +1,19 @@
1
1
  module Brightbox
2
2
  command [:lbs] do |cmd|
3
-
4
3
  cmd.desc I18n.t("lbs.create.desc")
5
4
  cmd.long_desc I18n.t("lbs.create.long_desc")
6
5
  cmd.arg_name "srv-id..."
7
6
  cmd.command [:create] do |c|
8
-
9
7
  c.desc I18n.t("options.name.desc")
10
- c.flag [:n, :name]
8
+ c.flag %i[n name]
11
9
 
12
10
  c.desc "Load balancer policy"
13
11
  c.default_value "least-connections"
14
- c.flag [:p, :policy]
12
+ c.flag %i[p policy]
15
13
 
16
14
  c.desc "Listeners. Format: in-port:out-port:type:timeout. Comma separated multiple listeners. Protocols can be tcp, http or http+ws and timeouts are in milliseconds."
17
15
  c.default_value "80:80:http:50000,443:443:tcp:50000"
18
- c.flag [:l, :listeners]
16
+ c.flag %i[l listeners]
19
17
 
20
18
  c.desc "Healthcheck port. Defaults to first listener out port."
21
19
  c.flag [:k, "hc-port"]
@@ -60,12 +58,12 @@ module Brightbox
60
58
  c.switch ["sslv3"]
61
59
 
62
60
  c.action do |global_options, options, args|
63
-
64
61
  raise "You must specify which servers to balance connections to" if args.empty?
65
62
 
66
63
  listeners = options[:l].split(",").map do |l|
67
64
  inport, outport, protocol, timeout = l.split ":"
68
65
  raise "listener '#{l}' is invalid" if inport.nil? || outport.nil? || protocol.nil?
66
+
69
67
  { :in => inport, :out => outport, :protocol => protocol, :timeout => timeout }
70
68
  end
71
69
 
@@ -92,7 +90,7 @@ module Brightbox
92
90
 
93
91
  healthcheck = {}
94
92
 
95
- options.keys.each do |k|
93
+ options.each_key do |k|
96
94
  if options[k] && hc_arg_lookup[k]
97
95
  healthcheck[hc_arg_lookup[k]] = options[k]
98
96
  end
@@ -1,12 +1,9 @@
1
1
  module Brightbox
2
2
  command [:lbs] do |cmd|
3
-
4
3
  cmd.desc I18n.t("lbs.destroy.desc")
5
4
  cmd.arg_name "lb-id..."
6
5
  cmd.command [:destroy] do |c|
7
-
8
6
  c.action do |_global_options, _options, args|
9
-
10
7
  raise "You must specify the load balancers to destroy" if args.empty?
11
8
 
12
9
  lbs = LoadBalancer.find_or_call(args) do |id|
@@ -1,6 +1,5 @@
1
1
  module Brightbox
2
2
  command [:lbs] do |cmd|
3
-
4
3
  cmd.default_command :list
5
4
 
6
5
  cmd.desc I18n.t("lbs.list.desc")
@@ -1,12 +1,9 @@
1
1
  module Brightbox
2
2
  command [:lbs] do |cmd|
3
-
4
3
  cmd.desc I18n.t("lbs.remove_nodes.desc")
5
4
  cmd.arg_name "lb-id node-id..."
6
5
  cmd.command [:remove_nodes] do |c|
7
-
8
6
  c.action do |global_options, _options, args|
9
-
10
7
  raise "You must specify the load balancer and the node ids to remove" if args.size < 2
11
8
 
12
9
  lb = LoadBalancer.find(args.shift)
@@ -1,37 +1,35 @@
1
1
  module Brightbox
2
2
  command [:lbs] do |cmd|
3
-
4
3
  cmd.desc I18n.t("lbs.show.desc")
5
4
  cmd.arg_name "lbs-id..."
6
5
  cmd.command [:show] do |c|
7
-
8
6
  c.action do |global_options, _options, args|
9
7
  lbs = LoadBalancer.find_all_or_warn(args)
10
8
 
11
9
  table_opts = global_options.merge(
12
10
  :vertical => true,
13
- :fields => [
14
- :id,
15
- :status,
16
- :locked,
17
- :name,
18
- :created_at,
19
- :deleted_at,
20
- :policy,
21
- :ssl_minimum_version,
22
- :ssl_issuer,
23
- :ssl_subject,
24
- :ssl_valid_from,
25
- :ssl_expires_at,
26
- :ssl_v3_enabled,
27
- :cloud_ips,
28
- :nodes,
29
- :listeners,
30
- :healthcheck
31
- ])
11
+ :fields => %i[
12
+ id
13
+ status
14
+ locked
15
+ name
16
+ created_at
17
+ deleted_at
18
+ policy
19
+ ssl_minimum_version
20
+ ssl_issuer
21
+ ssl_subject
22
+ ssl_valid_from
23
+ ssl_expires_at
24
+ ssl_v3_enabled
25
+ cloud_ips
26
+ nodes
27
+ listeners
28
+ healthcheck
29
+ ]
30
+ )
32
31
 
33
32
  render_table(lbs, table_opts)
34
-
35
33
  end
36
34
  end
37
35
  end
@@ -1,19 +1,17 @@
1
1
  module Brightbox
2
2
  command [:lbs] do |cmd|
3
-
4
3
  cmd.desc I18n.t("lbs.update.desc")
5
4
  cmd.long_desc I18n.t("lbs.update.long_desc")
6
5
  cmd.arg_name "lba-id [node-id...]"
7
6
  cmd.command [:update] do |c|
8
-
9
7
  c.desc I18n.t("options.name.desc")
10
- c.flag [:n, :name]
8
+ c.flag %i[n name]
11
9
 
12
10
  c.desc "Load balancer policy"
13
- c.flag [:p, :policy]
11
+ c.flag %i[p policy]
14
12
 
15
13
  c.desc "Listeners (in-port:out-port:protocol:timeout. Comma separate multiple listeners)"
16
- c.flag [:l, :listeners]
14
+ c.flag %i[l listeners]
17
15
 
18
16
  c.desc "Healthcheck port"
19
17
  c.flag [:k, "hc-port"]
@@ -55,7 +53,6 @@ module Brightbox
55
53
  c.switch ["sslv3"]
56
54
 
57
55
  c.action do |global_options, options, args|
58
-
59
56
  lb_id = args.shift
60
57
  raise "You must specify the load balancer to update as the first argument" unless lb_id =~ /^lba-/
61
58
 
@@ -77,7 +74,7 @@ module Brightbox
77
74
 
78
75
  healthcheck = {}
79
76
 
80
- options.keys.each do |k|
77
+ options.each_key do |k|
81
78
  if options[k] && hc_arg_lookup[k]
82
79
  healthcheck[hc_arg_lookup[k]] = options[k]
83
80
  end
@@ -131,8 +128,8 @@ module Brightbox
131
128
  lbopts[:certificate_private_key] = ""
132
129
  end
133
130
 
134
- if options["ssl-min-ver"]
135
- lbopts[:ssl_minimum_version] = options["ssl-min-ver"] unless options["ssl-min-ver"].nil?
131
+ if options["ssl-min-ver"] && !options["ssl-min-ver"].nil?
132
+ lbopts[:ssl_minimum_version] = options["ssl-min-ver"]
136
133
  end
137
134
 
138
135
  lbopts.nilify_blanks
@@ -21,19 +21,9 @@ module Brightbox
21
21
 
22
22
  raise "You must specify your email address" if email.nil?
23
23
 
24
- password = options[:p]
25
- password ||= Brightbox.config.gpg_password
26
- password ||= Brightbox.config.password_helper_password
27
-
28
- if !password || password.empty?
29
- require "highline"
30
- highline = HighLine.new
31
- password = highline.ask("Enter your password : ") { |q| q.echo = false }
32
- end
24
+ password = Brightbox.config.discover_password(password: options[:p])
33
25
  raise "You must specify your Brightbox password." if password.empty?
34
26
 
35
- password = Brightbox.config.extend_with_two_factor_pin(password)
36
-
37
27
  section_options = {
38
28
  :client_name => config_name,
39
29
  :alias => config_name,
@@ -49,7 +39,18 @@ module Brightbox
49
39
  section_options[:client_id] = options[:"application-id"] if options[:"application-id"]
50
40
  section_options[:secret] = options[:"application-secret"] if options[:"application-secret"]
51
41
 
52
- Brightbox.config.add_login(email, password, section_options)
42
+ begin
43
+ Brightbox.config.add_login(email, password, section_options)
44
+ rescue Fog::Brightbox::OAuth2::TwoFactorMissingError
45
+ section_options = {
46
+ :client_name => config_name,
47
+ :alias => config_name,
48
+ :username => email,
49
+ :password => password,
50
+ :one_time_password => discover_two_factor_pin
51
+ }
52
+ Brightbox.config.add_login(email, password, section_options)
53
+ end
53
54
  end
54
55
  end
55
56
  end
@@ -3,13 +3,10 @@ require "uri"
3
3
  module Brightbox
4
4
  desc I18n.t("servers.desc")
5
5
  command [:servers] do |cmd|
6
-
7
6
  cmd.desc I18n.t("servers.activate_console.desc")
8
7
  cmd.arg_name "server-id..."
9
8
  cmd.command [:activate_console] do |c|
10
-
11
9
  c.action do |global_options, _options, args|
12
-
13
10
  raise "You must specify servers to activate the console for" if args.empty?
14
11
 
15
12
  servers = Server.find_or_call(args) do |id|
@@ -23,13 +20,13 @@ module Brightbox
23
20
  r = s.activate_console
24
21
 
25
22
  uri = URI(r["console_url"])
26
- uri.query = "password=#{r["console_token"]}"
23
+ uri.query = "password=#{r['console_token']}"
27
24
 
28
25
  expires = Time.parse(r["console_token_expires"])
29
26
  consoles << { :url => uri.to_s, :token => r["console_token"], :expires => expires.localtime.to_s }
30
27
  end
31
28
 
32
- render_table(consoles, global_options.merge(:fields => [:url, :token, :expires], :resize => false))
29
+ render_table(consoles, global_options.merge(:fields => %i[url token expires], :resize => false))
33
30
  end
34
31
  end
35
32
  end
@@ -1,12 +1,10 @@
1
1
  module Brightbox
2
2
  command [:servers] do |cmd|
3
-
4
3
  cmd.desc I18n.t("servers.create.desc")
5
4
  cmd.arg_name "image_id"
6
5
  cmd.command [:create] do |c|
7
-
8
6
  c.desc I18n.t("options.name.desc")
9
- c.flag [:n, :name]
7
+ c.flag %i[n name]
10
8
 
11
9
  c.desc "Number of servers to create"
12
10
  c.default_value 1
@@ -17,7 +15,7 @@ module Brightbox
17
15
 
18
16
  c.desc "Type of server to create"
19
17
  c.default_value "1gb.ssd"
20
- c.flag [:t, :type]
18
+ c.flag %i[t type]
21
19
 
22
20
  c.desc "Specify user data"
23
21
  c.flag [:m, "user-data"]
@@ -27,7 +25,7 @@ module Brightbox
27
25
 
28
26
  c.desc "base64 encode the user data"
29
27
  c.default_value true
30
- c.switch [:e, :base64], :negatable => true
28
+ c.switch %i[e base64], :negatable => true
31
29
 
32
30
  c.desc "Enable encryption at rest for disk"
33
31
  c.default_value false
@@ -39,8 +37,10 @@ module Brightbox
39
37
  c.desc I18n.t("servers.create.cloud_ip.desc")
40
38
  c.flag ["cloud-ip"]
41
39
 
42
- c.action do |global_options, options, args|
40
+ c.desc I18n.t("servers.create.volume_size.desc")
41
+ c.flag ["volume-size"]
43
42
 
43
+ c.action do |global_options, options, args|
44
44
  if args.empty?
45
45
  raise "You must specify the image_id as the first argument"
46
46
  end
@@ -49,19 +49,19 @@ module Brightbox
49
49
  image = Image.find image_id
50
50
 
51
51
  type_id = options[:t]
52
- if type_id =~ /^typ\-/
53
- type = Type.find type_id
54
- else
55
- type = Type.find_by_handle type_id
56
- end
52
+ type = if type_id =~ /^typ-/
53
+ Type.find type_id
54
+ else
55
+ Type.find_by_handle type_id
56
+ end
57
57
 
58
58
  if options[:z]
59
59
  zone = options[:z]
60
- if zone =~ /^typ\-/
61
- zone = Zone.find zone
62
- else
63
- zone = Zone.find_by_handle zone
64
- end
60
+ zone = if zone =~ /^typ-/
61
+ Zone.find zone
62
+ else
63
+ Zone.find_by_handle zone
64
+ end
65
65
  end
66
66
 
67
67
  user_data = options[:m]
@@ -69,9 +69,11 @@ module Brightbox
69
69
 
70
70
  if user_data_file
71
71
  raise "Cannot specify user data on command line and in file at same time" if user_data
72
+
72
73
  # Wot we use to read the data, be it from stdin or a file on disk
73
74
  file_handler = lambda do |fh|
74
75
  raise "User data file too big (>16k)" if fh.stat.size > 16 * 1024
76
+
75
77
  user_data = fh.read
76
78
  end
77
79
  # Figure out how to invoke file_handler, and then invoke it
@@ -98,11 +100,11 @@ module Brightbox
98
100
  msg = "Creating #{options[:i] > 1 ? options[:i] : 'a'} #{type.handle} (#{type.id})"
99
101
  msg << " server#{options[:i] > 1 ? 's' : ''} with image #{image.name.strip} (#{image.id})"
100
102
  msg << " in zone #{zone.handle} (#{zone})" if zone
101
- msg << " in groups #{server_groups.map(&:id).join(", ")}" unless server_groups.empty?
102
- msg << " with %.2fk of user data" % (user_data.size / 1024.0) if user_data
103
- if options[:"cloud-ip"] && options[:"cloud-ip"].respond_to?(:start_with?)
103
+ msg << " in groups #{server_groups.map(&:id).join(', ')}" unless server_groups.empty?
104
+ msg << format(" with %.2fk of user data", (user_data.size / 1024.0)) if user_data
105
+ if options[:"cloud-ip"].respond_to?(:start_with?)
104
106
  if options[:"cloud-ip"].start_with?("cip-")
105
- msg << " mapping #{options[:'cloud-ip']} when built"
107
+ msg << " mapping #{options[:"cloud-ip"]} when built"
106
108
  end
107
109
  if options[:"cloud-ip"] == "true"
108
110
  msg << " mapping a new cloud IP when built"
@@ -111,17 +113,21 @@ module Brightbox
111
113
  info msg
112
114
 
113
115
  params = {
114
- :image_id => image.id,
115
- :flavor_id => type.id,
116
- :zone_id => zone.to_s,
117
- :name => options[:n],
118
- :user_data => user_data,
119
- :server_groups => server_groups.map(&:id)
116
+ :image_id => image.id,
117
+ :flavor_id => type.id,
118
+ :zone_id => zone.to_s,
119
+ :name => options[:n],
120
+ :user_data => user_data
120
121
  }
121
122
 
123
+ params[:server_groups] = server_groups.map(&:id) if server_groups.any?
122
124
  params[:cloud_ip] = options[:"cloud-ip"] if options.key?(:"cloud-ip")
123
125
  params[:disk_encrypted] = options[:"disk-encrypted"] if options.key?(:"disk-encrypted")
124
126
 
127
+ if options.key?(:"volume-size") && !options[:"volume-size"].nil?
128
+ params[:volume_size] = options[:"volume-size"].to_i
129
+ end
130
+
125
131
  servers = Server.create_servers options[:i], params
126
132
  render_table(servers, global_options)
127
133
  end
@@ -1,11 +1,9 @@
1
1
  module Brightbox
2
2
  command [:servers] do |cmd|
3
-
4
3
  cmd.desc I18n.t("servers.destroy.desc")
5
4
  cmd.arg_name "[server-id...]"
6
5
  cmd.command [:destroy] do |c|
7
6
  c.action do |_global_options, _options, args|
8
-
9
7
  raise "You must specify servers to destroy" if args.empty?
10
8
 
11
9
  servers = Server.find_or_call(args) do |id|
@@ -20,7 +18,6 @@ module Brightbox
20
18
  error "Could not destroy #{server}"
21
19
  end
22
20
  end
23
-
24
21
  end
25
22
  end
26
23
  end
@@ -1,24 +1,23 @@
1
1
  module Brightbox
2
2
  command [:servers] do |cmd|
3
-
4
3
  cmd.default_command :list
5
4
 
6
5
  cmd.desc "List servers"
7
6
  cmd.arg_name "[server-id...]"
8
7
  cmd.command [:list] do |c|
9
-
10
8
  c.desc "Group identifier"
11
- c.flag [:g, :group]
9
+ c.flag %i[g group]
12
10
 
13
11
  c.action do |global_options, options, args|
14
12
  # Check this here before we make any network connections
15
13
  raise "A valid server group identifier is required for the group argument" unless options[:g].nil? || options[:g] =~ /^grp-.{5}$/
14
+
16
15
  servers = Server.find_all_or_warn(args)
17
16
 
18
17
  # Scope by group if a group identifier is specified
19
18
  if options[:g]
20
- servers = servers.select do
21
- |server| server.server_groups.any? do |grp|
19
+ servers = servers.select do |server|
20
+ server.server_groups.any? do |grp|
22
21
  grp["id"] == options[:g]
23
22
  end
24
23
  end
@@ -1,10 +1,8 @@
1
1
  module Brightbox
2
2
  command [:servers] do |cmd|
3
-
4
3
  cmd.desc "Show detailed server info"
5
4
  cmd.arg_name "server-id..."
6
5
  cmd.command [:show] do |c|
7
-
8
6
  c.action do |global_options, _options, args|
9
7
  servers = DetailedServer.find_all_or_warn(args)
10
8
 
@@ -1,11 +1,9 @@
1
1
  module Brightbox
2
2
  command [:servers] do |cmd|
3
-
4
3
  cmd.desc I18n.t("servers.shutdown.desc")
5
4
  cmd.arg_name "server-id..."
6
5
  cmd.command [:shutdown] do |c|
7
6
  c.action do |_global_options, _options, args|
8
-
9
7
  raise "You must specify servers to shutdown" if args.empty?
10
8
 
11
9
  servers = Server.find_or_call(args) do |id|
@@ -16,7 +14,6 @@ module Brightbox
16
14
  info "Shutting down server #{s}"
17
15
  s.shutdown
18
16
  end
19
-
20
17
  end
21
18
  end
22
19
  end
@@ -1,12 +1,9 @@
1
1
  module Brightbox
2
2
  command [:servers] do |cmd|
3
-
4
3
  cmd.desc I18n.t("servers.snapshot.desc")
5
4
  cmd.arg_name "server-id..."
6
5
  cmd.command [:snapshot] do |c|
7
-
8
6
  c.action do |_global_options, _options, args|
9
-
10
7
  raise "You must specify servers to snapshot" if args.empty?
11
8
 
12
9
  servers = Server.find_or_call(args) do |id|
@@ -17,7 +14,6 @@ module Brightbox
17
14
  info "Snapshotting server #{s}"
18
15
  s.snapshot
19
16
  end
20
-
21
17
  end
22
18
  end
23
19
  end
@@ -1,12 +1,9 @@
1
1
  module Brightbox
2
2
  command [:servers] do |cmd|
3
-
4
3
  cmd.desc I18n.t("servers.start.desc")
5
4
  cmd.arg_name "server-id..."
6
5
  cmd.command [:start] do |c|
7
-
8
6
  c.action do |_global_options, _options, args|
9
-
10
7
  raise "You must specify servers to start" if args.empty?
11
8
 
12
9
  servers = Server.find_or_call(args) do |id|
@@ -17,7 +14,6 @@ module Brightbox
17
14
  info "Starting server #{s}"
18
15
  s.start
19
16
  end
20
-
21
17
  end
22
18
  end
23
19
  end
@@ -1,12 +1,9 @@
1
1
  module Brightbox
2
2
  command [:servers] do |cmd|
3
-
4
3
  cmd.desc I18n.t("servers.stop.desc")
5
4
  cmd.arg_name "server-id..."
6
5
  cmd.command [:stop] do |c|
7
-
8
6
  c.action do |_global_options, _options, args|
9
-
10
7
  raise "You must specify servers to stop" if args.empty?
11
8
 
12
9
  servers = Server.find_or_call(args) do |id|
@@ -1,12 +1,10 @@
1
1
  module Brightbox
2
2
  command [:servers] do |cmd|
3
-
4
3
  cmd.desc I18n.t("servers.update.desc")
5
4
  cmd.arg_name "server-id"
6
5
  cmd.command [:update] do |c|
7
-
8
6
  c.desc I18n.t("options.name.desc")
9
- c.flag [:n, :name]
7
+ c.flag %i[n name]
10
8
 
11
9
  c.desc "Specify user data"
12
10
  c.flag [:m, "user-data"]
@@ -16,7 +14,7 @@ module Brightbox
16
14
 
17
15
  c.desc "base64 encode the user data"
18
16
  c.default_value true
19
- c.switch [:e, :base64], :negatable => true
17
+ c.switch %i[e base64], :negatable => true
20
18
 
21
19
  c.desc "Use compatibility mode"
22
20
  c.switch [:"compatibility-mode"], :negatable => true
@@ -35,9 +33,11 @@ module Brightbox
35
33
 
36
34
  if user_data_file
37
35
  raise "Cannot specify user data on command line and in file at same time" if user_data
36
+
38
37
  # Wot we use to read the data, be it from stdin or a file on disk
39
38
  file_handler = lambda do |fh|
40
39
  raise "User data file too big (>16k)" if fh.stat.size > 16 * 1024
40
+
41
41
  user_data = fh.read
42
42
  end
43
43
  # Figure out how to invoke file_handler, and then invoke it
@@ -75,7 +75,7 @@ module Brightbox
75
75
 
76
76
  params.nilify_blanks
77
77
 
78
- info "Updating server #{server}#{" with %.2fk of user data" % (user_data.size / 1024.0) if user_data}"
78
+ info "Updating server #{server}#{format(' with %.2fk of user data', (user_data.size / 1024.0)) if user_data}"
79
79
  server.update params
80
80
  server.reload
81
81
  render_table([server], global_options)