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,15 @@
1
1
  module Brightbox
2
- class BBConfigError < StandardError ; end
2
+ class BBConfigError < StandardError; end
3
3
 
4
4
  class NoSelectedClientError < BBConfigError; end
5
- NO_CLIENT_MESSAGE = "You must specify client to use with --client or set default client"
5
+ NO_CLIENT_MESSAGE = "You must specify client to use with --client or set default client".freeze
6
6
 
7
7
  class AmbiguousClientError < BBConfigError; end
8
- AMBIGUOUS_CLIENT_ERROR = "You must specify a default client using brightbox config client_default"
8
+ AMBIGUOUS_CLIENT_ERROR = "You must specify a default client using brightbox config client_default".freeze
9
9
 
10
10
  class BBConfig
11
- require 'fileutils'
12
- require 'ini'
11
+ require "fileutils"
12
+ require "ini"
13
13
  include Brightbox::Logging
14
14
  include Brightbox::Config::Cache
15
15
  include Brightbox::Config::GpgEncryptedPasswords
@@ -49,6 +49,7 @@ module Brightbox
49
49
  # @return [String]
50
50
  def config_directory
51
51
  return @dir if @dir
52
+
52
53
  path = @options[:directory] || default_config_dir
53
54
  @dir = File.expand_path(path)
54
55
  end
@@ -65,7 +66,8 @@ module Brightbox
65
66
  # @return [String]
66
67
  def config_filename
67
68
  return @config_filename if @config_filename
68
- @config_filename = File.join(config_directory, 'config')
69
+
70
+ @config_filename = File.join(config_directory, "config")
69
71
  end
70
72
 
71
73
  # The loads the configuration from disk or creates the directory if missing
@@ -78,22 +80,22 @@ module Brightbox
78
80
 
79
81
  # Write out the configuration file to disk
80
82
  def save
81
- if dirty? && config.respond_to?(:write)
82
- config.write
83
- clean_up
84
- end
83
+ return unless dirty? && config.respond_to?(:write)
84
+
85
+ config.write
86
+ clean_up
85
87
  end
86
88
 
87
89
  # Outputs to debug the current values of the config/client's tokens
88
90
  #
89
91
  def debug_tokens
90
- if ENV["DEBUG"]
91
- debug "Access token: #{access_token} (#{cached_access_token})"
92
- if using_application?
93
- debug "Refresh token: #{refresh_token} (#{cached_refresh_token}))"
94
- else
95
- debug "Refresh token: <NOT EXPECTED FOR CLIENT>"
96
- end
92
+ return unless ENV["DEBUG"]
93
+
94
+ debug "Access token: #{access_token} (#{cached_access_token})"
95
+ if using_application?
96
+ debug "Refresh token: #{refresh_token} (#{cached_refresh_token}))"
97
+ else
98
+ debug "Refresh token: <NOT EXPECTED FOR CLIENT>"
97
99
  end
98
100
  end
99
101
 
@@ -110,13 +112,14 @@ module Brightbox
110
112
  private
111
113
 
112
114
  def default_config_dir
113
- File.join(ENV['HOME'], '.brightbox')
115
+ File.join(ENV.fetch("HOME", nil), ".brightbox")
114
116
  end
115
117
 
116
118
  def configured?
117
119
  if client_name.nil? || config[client_name].nil?
118
120
  raise BBConfigError, "client id or alias #{client_name.inspect} not defined in config"
119
121
  end
122
+
120
123
  true
121
124
  end
122
125
 
@@ -124,11 +127,11 @@ module Brightbox
124
127
  # in
125
128
  #
126
129
  def create_directory
127
- unless File.exist? config_directory
128
- begin
129
- FileUtils.mkdir config_directory
130
- rescue Errno::EEXIST
131
- end
130
+ return if File.exist? config_directory
131
+
132
+ begin
133
+ FileUtils.mkdir config_directory
134
+ rescue Errno::EEXIST
132
135
  end
133
136
  end
134
137
 
@@ -27,11 +27,13 @@ module Brightbox
27
27
 
28
28
  def connection_options
29
29
  merged_options = @connection_options.dup
30
- if @connection && @connection.refresh_token
30
+ merged_options.update(:brightbox_support_two_factor => true)
31
+
32
+ if @connection&.refresh_token
31
33
  merged_options.update(:brightbox_refresh_token => @connection.refresh_token)
32
34
  end
33
35
 
34
- if @connection && @connection.access_token
36
+ if @connection&.access_token
35
37
  merged_options.update(:brightbox_access_token => @connection.access_token)
36
38
  end
37
39
  merged_options
@@ -33,44 +33,44 @@ module Brightbox
33
33
  end
34
34
 
35
35
  def self.default_field_order
36
- [
37
- :id,
38
- :status,
39
- :type,
40
- :db_engine,
41
- :zone,
42
- :created_on,
43
- :cloud_ip_ids,
44
- :name
36
+ %i[
37
+ id
38
+ status
39
+ type
40
+ db_engine
41
+ zone
42
+ created_on
43
+ cloud_ip_ids
44
+ name
45
45
  ]
46
46
  end
47
47
 
48
48
  # These are all the fields show in the longer table form
49
49
  def self.detailed_fields
50
- [
51
- :id, :name, :description, :status, :locked,
52
- :type, :engine, :version,
53
- :zone,
54
- :created_on,
55
- :admin_username, :admin_password,
56
- :maintenance_window,
57
- :snapshots_schedule,
58
- :snapshots_schedule_next_at,
59
- :allow_access,
60
- :cloud_ip_ids, :cloud_ips
50
+ %i[
51
+ id name description status locked
52
+ type engine version
53
+ zone
54
+ created_on
55
+ admin_username admin_password
56
+ maintenance_window
57
+ snapshots_schedule
58
+ snapshots_schedule_next_at
59
+ allow_access
60
+ cloud_ip_ids cloud_ips
61
61
  ]
62
62
  end
63
63
 
64
64
  def type_identifier
65
- if fog_model.attributes.key?("database_server_type")
66
- fog_model.attributes["database_server_type"]["id"]
67
- end
65
+ return unless fog_model.attributes.key?("database_server_type")
66
+
67
+ fog_model.attributes["database_server_type"]["id"]
68
68
  end
69
69
 
70
70
  def zone_handle
71
- if fog_model.attributes.key?("zone")
72
- fog_model.attributes["zone"]["handle"]
73
- end
71
+ return unless fog_model.attributes.key?("zone")
72
+
73
+ fog_model.attributes["zone"]["handle"]
74
74
  end
75
75
 
76
76
  def to_row
@@ -99,8 +99,9 @@ module Brightbox
99
99
  # A more humanised version of the maintenance window
100
100
  def maintenance_window
101
101
  return nil if maintenance_weekday.nil?
102
+
102
103
  weekday = Date::DAYNAMES[maintenance_weekday]
103
- sprintf("%s %02d:00 UTC", weekday, maintenance_hour)
104
+ format("%s %02d:00 UTC", weekday, maintenance_hour)
104
105
  end
105
106
 
106
107
  def cloud_ips
@@ -149,8 +150,6 @@ module Brightbox
149
150
  params
150
151
  end
151
152
 
152
- private
153
-
154
153
  # @param [String] user_input either a day or it's index ('sunday' or '0')
155
154
  # @returns [String] The index
156
155
  def self.weekday_index(user_input)
@@ -23,7 +23,7 @@ module Brightbox
23
23
  end
24
24
 
25
25
  def self.default_field_order
26
- [:id, :status, :created_on, :size, :name]
26
+ %i[id status created_on size name]
27
27
  end
28
28
 
29
29
  def to_row
@@ -30,15 +30,15 @@ module Brightbox
30
30
  end
31
31
 
32
32
  def self.default_field_order
33
- [:id, :name, :ram, :disk]
33
+ %i[id name ram disk]
34
34
  end
35
35
 
36
36
  def <=>(other)
37
- if other.is_a? DatabaseType
38
- ram <=> other.ram
39
- else
40
- ram <=> other
41
- end
37
+ ram <=> if other.is_a? DatabaseType
38
+ other.ram
39
+ else
40
+ other
41
+ end
42
42
  end
43
43
  end
44
44
  end
@@ -6,12 +6,12 @@ module Brightbox
6
6
  row_attributes[:compatibility_mode] = row_attributes["compatibility_mode"]
7
7
 
8
8
  if server_type
9
- row_attributes[:type] = server_type['id']
10
- row_attributes[:type_handle] = server_type['handle']
11
- row_attributes[:type_name] = server_type['name']
12
- row_attributes[:ram] = server_type['ram']
13
- row_attributes[:cores] = server_type['cores']
14
- row_attributes[:disk] = server_type['disk_size'].to_i
9
+ row_attributes[:type] = server_type["id"]
10
+ row_attributes[:type_handle] = server_type["handle"]
11
+ row_attributes[:type_name] = server_type["name"]
12
+ row_attributes[:ram] = server_type["ram"]
13
+ row_attributes[:cores] = server_type["cores"]
14
+ row_attributes[:disk] = server_type["disk_size"].to_i
15
15
  end
16
16
 
17
17
  if image
@@ -19,52 +19,52 @@ module Brightbox
19
19
  row_attributes[:arch] = image.arch
20
20
  end
21
21
 
22
- row_attributes[:private_ips] = interfaces.map { |i| i['ipv4_address'] }.join(", ")
23
- row_attributes[:ipv6_address] = interfaces.map { |i| i['ipv6_address'] }.join(", ")
22
+ row_attributes[:private_ips] = interfaces.map { |i| i["ipv4_address"] }.join(", ")
23
+ row_attributes[:ipv6_address] = interfaces.map { |i| i["ipv6_address"] }.join(", ")
24
24
 
25
- row_attributes[:cloud_ip_ids] = cloud_ips.map { |i| i['id'] }.join(", ")
26
- row_attributes[:cloud_ipv4s] = cloud_ips.map { |i| i['public_ipv4'] }.join(", ")
27
- row_attributes[:cloud_ipv6s] = cloud_ips.map { |i| i['public_ipv6'] }.join(", ")
28
- row_attributes[:snapshots] = snapshots.map { |i| i['id'] }.join(", ")
25
+ row_attributes[:cloud_ip_ids] = cloud_ips.map { |i| i["id"] }.join(", ")
26
+ row_attributes[:cloud_ipv4s] = cloud_ips.map { |i| i["public_ipv4"] }.join(", ")
27
+ row_attributes[:cloud_ipv6s] = cloud_ips.map { |i| i["public_ipv6"] }.join(", ")
28
+ row_attributes[:snapshots] = snapshots.map { |i| i["id"] }.join(", ")
29
29
 
30
30
  if server_groups
31
- row_attributes[:server_groups] = server_groups.map { |sg| sg['id'] }.join(", ")
31
+ row_attributes[:server_groups] = server_groups.map { |sg| sg["id"] }.join(", ")
32
32
  end
33
33
 
34
34
  row_attributes
35
35
  end
36
36
 
37
37
  def self.default_field_order
38
- [
39
- :id,
40
- :status,
41
- :locked,
42
- :name,
43
- :created_at,
44
- :deleted_at,
45
- :zone,
46
- :type,
47
- :type_name,
48
- :type_handle,
49
- :ram,
50
- :cores,
51
- :disk,
52
- :disk_encrypted,
53
- :compatibility_mode,
54
- :image,
55
- :image_name,
56
- :arch,
57
- :private_ips,
58
- :ipv6_address,
59
- :hostname,
60
- :fqdn,
61
- :public_hostname,
62
- :ipv6_hostname,
63
- :cloud_ip_ids,
64
- :cloud_ipv4s,
65
- :cloud_ipv6s,
66
- :snapshots,
67
- :server_groups
38
+ %i[
39
+ id
40
+ status
41
+ locked
42
+ name
43
+ created_at
44
+ deleted_at
45
+ zone
46
+ type
47
+ type_name
48
+ type_handle
49
+ ram
50
+ cores
51
+ disk
52
+ disk_encrypted
53
+ compatibility_mode
54
+ image
55
+ image_name
56
+ arch
57
+ private_ips
58
+ ipv6_address
59
+ hostname
60
+ fqdn
61
+ public_hostname
62
+ ipv6_hostname
63
+ cloud_ip_ids
64
+ cloud_ipv4s
65
+ cloud_ipv6s
66
+ snapshots
67
+ server_groups
68
68
  ]
69
69
  end
70
70
  end
@@ -7,7 +7,7 @@ module Brightbox
7
7
  end
8
8
 
9
9
  def self.default_field_order
10
- [:id, :name, :servers, :firewall_policy, :description]
10
+ %i[id name servers firewall_policy description]
11
11
  end
12
12
  end
13
13
  end
@@ -16,26 +16,26 @@ module Brightbox
16
16
  end
17
17
  end
18
18
 
19
- def parse_http_error(e)
20
- if e.respond_to?(:response) && e.response.respond_to?(:body)
19
+ def parse_http_error(err)
20
+ if err.respond_to?(:response) && err.response.respond_to?(:body)
21
21
  begin
22
- json_response = MultiJson.load(e.response.body)
23
- extract_response_from_json(json_response, e)
24
- rescue
22
+ json_response = MultiJson.load(err.response.body)
23
+ extract_response_from_json(json_response, err)
24
+ rescue StandardError
25
25
  {}
26
26
  end
27
27
  else
28
- error "ERROR: #{e}"
28
+ error "ERROR: #{err}"
29
29
  end
30
30
  end
31
31
 
32
- def extract_response_from_json(error_json, e)
33
- json_error = error_json['errors'] || error_json['error']
32
+ def extract_response_from_json(error_json, err)
33
+ json_error = error_json["errors"] || error_json["error"]
34
34
  if json_error && !json_error.empty?
35
35
  error_string = Array(json_error).join(" ")
36
36
  error "ERROR: #{error_string}"
37
37
  else
38
- error "ERROR: #{e}"
38
+ error "ERROR: #{err}"
39
39
  end
40
40
  end
41
41
  end
@@ -1,6 +1,7 @@
1
1
  module Brightbox
2
2
  class FirewallPolicy < Api
3
3
  def self.require_account?; true; end
4
+
4
5
  def self.create(options)
5
6
  new(conn.firewall_policies.create(options))
6
7
  end
@@ -26,7 +27,7 @@ module Brightbox
26
27
  end
27
28
 
28
29
  def self.default_field_order
29
- [:id, :server_group, :name]
30
+ %i[id server_group name]
30
31
  end
31
32
  end
32
33
  end
@@ -29,8 +29,8 @@ module Brightbox
29
29
 
30
30
  def to_row
31
31
  attrs = attributes.dup
32
- [:protocol, :source, :sport, :destination, :dport, :icmp_type].each do |key|
33
- attrs[key] = attributes[key] || '-'
32
+ %i[protocol source sport destination dport icmp_type].each do |key|
33
+ attrs[key] = attributes[key] || "-"
34
34
  end
35
35
  attrs
36
36
  end
@@ -40,7 +40,7 @@ module Brightbox
40
40
  end
41
41
 
42
42
  def self.default_field_order
43
- [:id, :protocol, :source, :sport, :destination, :dport, :icmp_type, :description]
43
+ %i[id protocol source sport destination dport icmp_type description]
44
44
  end
45
45
  end
46
46
  end
@@ -3,19 +3,19 @@ module Brightbox
3
3
  def self.from_policy(firewall_policy)
4
4
  rules = firewall_policy.rules
5
5
  rules.map do |rule|
6
- fwr = FirewallRule.new('fwr')
6
+ fwr = FirewallRule.new("fwr")
7
7
  fwr.attributes = symbolize_keys(rule)
8
8
  fwr
9
9
  end
10
10
  end
11
11
 
12
- def self.symbolize_keys(object) #:nodoc:
12
+ def self.symbolize_keys(object) # :nodoc:
13
13
  modify_keys(object) do |key|
14
14
  key.is_a?(String) ? key.to_sym : key
15
15
  end
16
16
  end
17
17
 
18
- def self.modify_keys(object, &modifier) #:nodoc:
18
+ def self.modify_keys(object, &modifier) # :nodoc:
19
19
  object.reduce({}) do |result, (key, value)|
20
20
  new_key = modifier.call(key)
21
21
  result.merge! new_key => value
@@ -11,7 +11,7 @@ module Brightbox
11
11
  #
12
12
  # Need to locate the source of double loading under Aruba
13
13
  #
14
- subcommand_files = Dir.glob(File.expand_path("../commands/**/*.rb", __FILE__))
14
+ subcommand_files = Dir.glob(File.expand_path("commands/**/*.rb", __dir__))
15
15
  subcommand_files.sort.each do |cmd_file|
16
16
  require cmd_file
17
17
  end
@@ -21,34 +21,34 @@ module Brightbox
21
21
 
22
22
  # Global options
23
23
  desc "Simple output (tab separated, don't draw fancy tables)"
24
- switch [:s, :simple], :negatable => false
24
+ switch %i[s simple], :negatable => false
25
25
 
26
26
  desc "Set the api client to use"
27
- flag [:c, :client]
27
+ flag %i[c client]
28
28
 
29
29
  desc "Set the account to use"
30
30
  flag :account
31
31
 
32
32
  desc "Disable peer SSL certificate verification"
33
- switch [:k, :insecure], :negatable => false
33
+ switch %i[k insecure], :negatable => false
34
34
 
35
35
  pre do |global_options, command, _options, _args|
36
36
  # Configuration options
37
37
  config_opts = {
38
- :client_name => ENV["CLIENT"] || global_options[:client],
39
- :account => ENV["ACCOUNT"] || global_options[:account]
38
+ :client_name => ENV.fetch("CLIENT", global_options[:client]),
39
+ :account => ENV.fetch("ACCOUNT", global_options[:account])
40
40
  }
41
41
  Brightbox.config = BBConfig.new(config_opts)
42
42
 
43
43
  # Commands that alter the config files should not error here
44
- unless [:config, :login].include?(command.topmost_ancestor.name)
44
+ unless %i[config login].include?(command.topmost_ancestor.name)
45
45
  raise AmbiguousClientError, AMBIGUOUS_CLIENT_ERROR if Brightbox.config.client_name.nil?
46
46
 
47
47
  if Brightbox.config.has_multiple_clients?
48
48
  if Brightbox.config.client_has_alias?
49
- info "INFO: client_id: #{Brightbox.config.client_name} (#{Brightbox.config.client_alias})"
49
+ debug "client_id: #{Brightbox.config.client_name} (#{Brightbox.config.client_alias})"
50
50
  else
51
- info "INFO: client_id: #{Brightbox.config.client_name}"
51
+ debug "client_id: #{Brightbox.config.client_name}"
52
52
  end
53
53
  end
54
54
 
@@ -56,11 +56,11 @@ module Brightbox
56
56
  Brightbox.config.debug_tokens if Brightbox.config.respond_to?(:debug_tokens)
57
57
  end
58
58
 
59
- Excon.defaults[:headers]['User-Agent'] = "brightbox-cli/#{Brightbox::VERSION} Fog/#{Fog::Core::VERSION}"
59
+ Excon.defaults[:headers]["User-Agent"] = "brightbox-cli/#{Brightbox::VERSION} Fog/#{Fog::Core::VERSION}"
60
60
 
61
- Excon.defaults[:headers]['User-Agent'] ||= "brightbox-cli/#{Brightbox::VERSION}"
61
+ Excon.defaults[:headers]["User-Agent"] ||= "brightbox-cli/#{Brightbox::VERSION}"
62
62
 
63
- if global_options[:k] || ENV["INSECURE"]
63
+ if global_options[:k] || ENV.fetch("INSECURE", false)
64
64
  Excon.defaults[:ssl_verify_peer] = false
65
65
  end
66
66
 
@@ -73,20 +73,18 @@ module Brightbox
73
73
  end
74
74
 
75
75
  post do |_global_options, _command, _options, _args|
76
- begin
77
- # Api.conn is another global which holds the authentication tokens so
78
- # we need to shuffle data between globals at a higher level rather than
79
- # force one inside the other
80
- access_token = Api.conn.access_token
81
- refresh_token = Api.conn.refresh_token
82
-
83
- Brightbox.config.update_stored_tokens(access_token, refresh_token)
84
- Brightbox.config.save
85
- rescue BBConfigError
86
- rescue StandardError => e
87
- # FIXME: Other StandardErrors are available
88
- warn "Error writing auth token #{Brightbox.config.access_token_filename}: #{e.class}: #{e}"
89
- end
76
+ # Api.conn is another global which holds the authentication tokens so
77
+ # we need to shuffle data between globals at a higher level rather than
78
+ # force one inside the other
79
+ access_token = Api.conn.access_token
80
+ refresh_token = Api.conn.refresh_token
81
+
82
+ Brightbox.config.update_stored_tokens(access_token, refresh_token)
83
+ Brightbox.config.save
84
+ rescue BBConfigError
85
+ rescue StandardError => e
86
+ # FIXME: Other StandardErrors are available
87
+ warn "Error writing auth token #{Brightbox.config.access_token_filename}: #{e.class}: #{e}"
90
88
  end
91
89
 
92
90
  on_error do |e|
@@ -103,7 +101,7 @@ module Brightbox
103
101
  error "Unable to authenticate with supplied details"
104
102
  Brightbox.config.debug_tokens if Brightbox.config.respond_to?(:debug_tokens)
105
103
  exit(111)
106
- rescue Exception => e
104
+ rescue StandardError => e
107
105
  if ENV["DEBUG"]
108
106
  debug e
109
107
  debug e.class.to_s
@@ -1,6 +1,7 @@
1
1
  module Brightbox
2
2
  class Image < Api
3
3
  def self.require_account?; true; end
4
+
4
5
  def self.all
5
6
  conn.images
6
7
  end
@@ -11,40 +12,40 @@ module Brightbox
11
12
 
12
13
  def self.register(options = {})
13
14
  image = conn.create_image(options)
14
- find image['id']
15
+ find image["id"]
15
16
  end
16
17
 
17
18
  def self.default_field_order
18
- [:id, :owner, :type, :created_on, :status, :size, :name]
19
+ %i[id owner type created_on status size name]
19
20
  end
20
21
 
21
22
  # Filter out images that are not of the right type, account or status if the option is passed
22
23
  def self.filter_images(images, options = {})
23
24
  # Remove images that don't match the given type
24
25
  if options[:t]
25
- images.reject! { |i| i.type != options[:t] }
26
+ images.select! { |i| i.type == options[:t] }
26
27
  end
27
28
 
28
29
  # Remove statuses that don't match the argument
29
30
  if options[:s]
30
- images.reject! { |i| i.status != options[:s] }
31
+ images.select! { |i| i.status == options[:s] }
31
32
  end
32
33
 
33
34
  # Remove images that don't belong to the specified owner id
34
35
  if options[:l]
35
- if options[:l] == 'brightbox'
36
- images.reject! { |i| !i.official }
36
+ if options[:l] == "brightbox"
37
+ images.select!(&:official)
37
38
  else
38
- images.reject! { |i| i.owner_id != options[:l] }
39
+ images.select! { |i| i.owner_id == options[:l] }
39
40
  end
40
41
  end
41
42
 
42
43
  unless options[:a]
43
44
  account = Account.conn.get_scoped_account(:nested => false)
44
- images.reject! { |i| !i.official && i.owner_id != account["id"] }
45
+ images.reject! { |i| !i.official && i.owner_id != account["id"] }
45
46
  end
46
47
 
47
- snapshots = images.select { |i| i.source_type == 'snapshot' }
48
+ snapshots = images.select { |i| i.source_type == "snapshot" }
48
49
  images -= snapshots
49
50
 
50
51
  images.sort! { |a, b| a.default_sort_fields <=> b.default_sort_fields }
@@ -68,7 +69,7 @@ module Brightbox
68
69
 
69
70
  def status
70
71
  if fog_model.attributes[:status] == "available"
71
- public? ? 'public' : 'private'
72
+ public? ? "public" : "private"
72
73
  else
73
74
  fog_model.attributes[:status]
74
75
  end
@@ -90,6 +91,7 @@ module Brightbox
90
91
  o[:description] = description if description
91
92
  o[:licence_name] = licence_name
92
93
  o[:size] = virtual_size
94
+ o[:min_ram] = min_ram
93
95
  o
94
96
  end
95
97
 
@@ -99,9 +101,9 @@ module Brightbox
99
101
 
100
102
  def status_sort_code
101
103
  case fog_model.attributes[:status]
102
- when 'available'
104
+ when "available"
103
105
  (public? ? 1 : 2)
104
- when 'deprecated'
106
+ when "deprecated"
105
107
  3
106
108
  else
107
109
  4