brightbox-cli 3.3.0 → 4.0.0.rc2

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 (417) 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 +52 -0
  7. data/Gemfile.lock +66 -39
  8. data/README +11 -16
  9. data/README.rdoc +1 -1
  10. data/brightbox-cli.gemspec +20 -33
  11. data/lib/brightbox-cli/accounts.rb +9 -11
  12. data/lib/brightbox-cli/api.rb +38 -36
  13. data/lib/brightbox-cli/cloud_ips.rb +8 -8
  14. data/lib/brightbox-cli/collaborating_account.rb +5 -5
  15. data/lib/brightbox-cli/collaboration.rb +1 -1
  16. data/lib/brightbox-cli/commands/accounts/{accept-invite.rb → accept_invite.rb} +2 -6
  17. data/lib/brightbox-cli/commands/accounts/default.rb +1 -2
  18. data/lib/brightbox-cli/commands/accounts/list.rb +6 -8
  19. data/lib/brightbox-cli/commands/accounts/remove.rb +2 -6
  20. data/lib/brightbox-cli/commands/accounts/{reset-ftp-password.rb → reset_ftp_password.rb} +6 -9
  21. data/lib/brightbox-cli/commands/accounts/show.rb +10 -13
  22. data/lib/brightbox-cli/commands/cloudips/create.rb +2 -5
  23. data/lib/brightbox-cli/commands/cloudips/destroy.rb +10 -14
  24. data/lib/brightbox-cli/commands/cloudips/list.rb +0 -2
  25. data/lib/brightbox-cli/commands/cloudips/map.rb +10 -13
  26. data/lib/brightbox-cli/commands/cloudips/show.rb +11 -14
  27. data/lib/brightbox-cli/commands/cloudips/unmap.rb +2 -4
  28. data/lib/brightbox-cli/commands/cloudips/update.rb +2 -4
  29. data/lib/brightbox-cli/commands/collaborations.rb +2 -3
  30. data/lib/brightbox-cli/commands/config/{client-add.rb → client_add.rb} +0 -3
  31. data/lib/brightbox-cli/commands/config/client_default.rb +18 -0
  32. data/lib/brightbox-cli/commands/config/{client-list.rb → client_list.rb} +1 -4
  33. data/lib/brightbox-cli/commands/config/{client-remove.rb → client_remove.rb} +0 -3
  34. data/lib/brightbox-cli/commands/config/{user-add.rb → user_add.rb} +1 -4
  35. data/lib/brightbox-cli/commands/firewall/{policies-apply.rb → policies_apply.rb} +2 -2
  36. data/lib/brightbox-cli/commands/firewall/{policies-create.rb → policies_create.rb} +2 -4
  37. data/lib/brightbox-cli/commands/firewall/{policies-destroy.rb → policies_destroy.rb} +0 -3
  38. data/lib/brightbox-cli/commands/firewall/{policies-list.rb → policies_list.rb} +0 -2
  39. data/lib/brightbox-cli/commands/firewall/{policies-remove.rb → policies_remove.rb} +2 -2
  40. data/lib/brightbox-cli/commands/firewall/{policies-show.rb → policies_show.rb} +6 -8
  41. data/lib/brightbox-cli/commands/firewall/{policies-update.rb → policies_update.rb} +2 -4
  42. data/lib/brightbox-cli/commands/firewall/{rules-create.rb → rules_create.rb} +6 -8
  43. data/lib/brightbox-cli/commands/firewall/{rules-destroy.rb → rules_destroy.rb} +0 -2
  44. data/lib/brightbox-cli/commands/firewall/{rules-list.rb → rules_list.rb} +0 -2
  45. data/lib/brightbox-cli/commands/firewall/{rules-show.rb → rules_show.rb} +7 -9
  46. data/lib/brightbox-cli/commands/firewall/{rules-update.rb → rules_update.rb} +7 -8
  47. data/lib/brightbox-cli/commands/groups/{add-server.rb → add_server.rb} +0 -2
  48. data/lib/brightbox-cli/commands/groups/create.rb +2 -3
  49. data/lib/brightbox-cli/commands/groups/destroy.rb +0 -2
  50. data/lib/brightbox-cli/commands/groups/list.rb +0 -1
  51. data/lib/brightbox-cli/commands/groups/move_servers.rb +2 -3
  52. data/lib/brightbox-cli/commands/groups/{remove-servers.rb → remove_servers.rb} +2 -4
  53. data/lib/brightbox-cli/commands/groups/show.rb +0 -2
  54. data/lib/brightbox-cli/commands/groups/update.rb +2 -3
  55. data/lib/brightbox-cli/commands/images/destroy.rb +0 -4
  56. data/lib/brightbox-cli/commands/images/list.rb +3 -5
  57. data/lib/brightbox-cli/commands/images/register.rb +9 -17
  58. data/lib/brightbox-cli/commands/images/show.rb +19 -20
  59. data/lib/brightbox-cli/commands/images/update.rb +12 -8
  60. data/lib/brightbox-cli/commands/lbs/{add-nodes.rb → add_nodes.rb} +0 -3
  61. data/lib/brightbox-cli/commands/lbs/create.rb +5 -7
  62. data/lib/brightbox-cli/commands/lbs/destroy.rb +0 -3
  63. data/lib/brightbox-cli/commands/lbs/list.rb +0 -1
  64. data/lib/brightbox-cli/commands/lbs/{remove-nodes.rb → remove_nodes.rb} +0 -3
  65. data/lib/brightbox-cli/commands/lbs/show.rb +20 -22
  66. data/lib/brightbox-cli/commands/lbs/update.rb +6 -9
  67. data/lib/brightbox-cli/commands/login.rb +13 -12
  68. data/lib/brightbox-cli/commands/servers/{activate-console.rb → activate_console.rb} +2 -5
  69. data/lib/brightbox-cli/commands/servers/create.rb +24 -25
  70. data/lib/brightbox-cli/commands/servers/destroy.rb +0 -3
  71. data/lib/brightbox-cli/commands/servers/list.rb +4 -5
  72. data/lib/brightbox-cli/commands/servers/show.rb +0 -2
  73. data/lib/brightbox-cli/commands/servers/shutdown.rb +0 -3
  74. data/lib/brightbox-cli/commands/servers/snapshot.rb +0 -4
  75. data/lib/brightbox-cli/commands/servers/start.rb +0 -4
  76. data/lib/brightbox-cli/commands/servers/stop.rb +0 -3
  77. data/lib/brightbox-cli/commands/servers/update.rb +5 -5
  78. data/lib/brightbox-cli/commands/sql/instances_create.rb +3 -6
  79. data/lib/brightbox-cli/commands/sql/instances_destroy.rb +0 -2
  80. data/lib/brightbox-cli/commands/sql/instances_list.rb +7 -9
  81. data/lib/brightbox-cli/commands/sql/instances_reset_password.rb +0 -1
  82. data/lib/brightbox-cli/commands/sql/instances_show.rb +0 -3
  83. data/lib/brightbox-cli/commands/sql/instances_snapshot.rb +0 -3
  84. data/lib/brightbox-cli/commands/sql/instances_update.rb +1 -3
  85. data/lib/brightbox-cli/commands/sql/snapshots_destroy.rb +0 -3
  86. data/lib/brightbox-cli/commands/sql/snapshots_list.rb +7 -9
  87. data/lib/brightbox-cli/commands/sql/snapshots_show.rb +12 -15
  88. data/lib/brightbox-cli/commands/sql/snapshots_update.rb +1 -3
  89. data/lib/brightbox-cli/commands/sql/types.rb +8 -15
  90. data/lib/brightbox-cli/commands/token.rb +0 -1
  91. data/lib/brightbox-cli/commands/types.rb +8 -14
  92. data/lib/brightbox-cli/commands/{user-collaborations.rb → user_collaborations.rb} +7 -8
  93. data/lib/brightbox-cli/commands/users/list.rb +0 -2
  94. data/lib/brightbox-cli/commands/users/show.rb +1 -3
  95. data/lib/brightbox-cli/commands/users/update.rb +3 -6
  96. data/lib/brightbox-cli/commands/zones.rb +7 -10
  97. data/lib/brightbox-cli/config/accounts.rb +18 -26
  98. data/lib/brightbox-cli/config/api_client.rb +12 -16
  99. data/lib/brightbox-cli/config/authentication_tokens.rb +39 -42
  100. data/lib/brightbox-cli/config/cache.rb +1 -0
  101. data/lib/brightbox-cli/config/clients.rb +8 -8
  102. data/lib/brightbox-cli/config/gpg_encrypted_passwords.rb +6 -8
  103. data/lib/brightbox-cli/config/password_helper.rb +33 -8
  104. data/lib/brightbox-cli/config/sections.rb +45 -29
  105. data/lib/brightbox-cli/config/two_factor_auth.rb +12 -14
  106. data/lib/brightbox-cli/config/two_factor_helper.rb +5 -7
  107. data/lib/brightbox-cli/config/user_application.rb +18 -18
  108. data/lib/brightbox-cli/config.rb +26 -23
  109. data/lib/brightbox-cli/connection_manager.rb +4 -2
  110. data/lib/brightbox-cli/database_server.rb +28 -29
  111. data/lib/brightbox-cli/database_snapshot.rb +1 -1
  112. data/lib/brightbox-cli/database_type.rb +6 -6
  113. data/lib/brightbox-cli/detailed_server.rb +43 -43
  114. data/lib/brightbox-cli/detailed_server_group.rb +1 -1
  115. data/lib/brightbox-cli/error_parser.rb +9 -9
  116. data/lib/brightbox-cli/firewall_policy.rb +2 -1
  117. data/lib/brightbox-cli/firewall_rule.rb +3 -3
  118. data/lib/brightbox-cli/firewall_rules.rb +3 -3
  119. data/lib/brightbox-cli/gli_global_hooks.rb +25 -27
  120. data/lib/brightbox-cli/images.rb +14 -12
  121. data/lib/brightbox-cli/load_balancers.rb +3 -6
  122. data/lib/brightbox-cli/logging.rb +14 -14
  123. data/lib/brightbox-cli/nilable_hash.rb +1 -1
  124. data/lib/brightbox-cli/ruby_core_ext.rb +3 -3
  125. data/lib/brightbox-cli/server_groups.rb +2 -2
  126. data/lib/brightbox-cli/servers.rb +6 -6
  127. data/lib/brightbox-cli/tables.rb +13 -15
  128. data/lib/brightbox-cli/types.rb +6 -6
  129. data/lib/brightbox-cli/user_collaboration.rb +5 -7
  130. data/lib/brightbox-cli/users.rb +1 -1
  131. data/lib/brightbox-cli/version.rb +1 -1
  132. data/lib/brightbox-cli/zones.rb +1 -1
  133. data/lib/brightbox_cli.rb +33 -33
  134. data/spec/brightbox_spec.rb +0 -1
  135. data/spec/cassettes/Brightbox_Account/_all/when_connected_using_an_application/returns_a_collection_of_Accounts.yml +5 -5
  136. data/spec/cassettes/Brightbox_Account/_all/when_connected_using_an_application/returns_resources_on_the_same_connection.yml +2 -2
  137. data/spec/cassettes/Brightbox_Account/_all/when_connected_using_an_client/returns_a_collection_of_Accounts.yml +4 -4
  138. data/spec/cassettes/Brightbox_Account/_all/when_connected_using_an_client/returns_resources_on_the_same_connection.yml +2 -2
  139. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_config_exists_and_overwrite_duplicates_is_false/does_not_update_the_config_file.yml +12 -12
  140. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_config_exists_and_overwrite_duplicates_is_true/does_not_update_the_config_file.yml +12 -12
  141. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_first_and_only_client/saves_changes_to_the_config_file.yml +2 -2
  142. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_first_and_only_client/saves_the_default_account.yml +2 -2
  143. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_first_and_only_client/saves_the_new_client_as_the_default.yml +2 -2
  144. data/spec/cassettes/Brightbox_BBConfig/_find_or_set_default_account/when_client_is_not_authenticated/does_not_raise_an_error.yml +8 -8
  145. data/spec/cassettes/Brightbox_BBConfig/_find_or_set_default_account/when_client_may_access_one_account/updates_the_setting.yml +8 -8
  146. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_config_in_use_is_not_the_default/uses_correct_credentials.yml +1 -1
  147. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_using_a_user_app_with_a_cached_refresh_token/caches_the_new_tokens.yml +1 -1
  148. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_using_a_user_app_with_an_expired_refresh_token/caches_the_new_tokens.yml +2 -2
  149. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_using_a_user_app_with_no_tokens/caches_the_new_tokens.yml +1 -1
  150. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_using_a_user_app_with_no_tokens/prompts_user_to_retry_command.yml +1 -1
  151. data/spec/cassettes/Brightbox_BBConfig/_renew_tokens/when_using_an_API_client_with_no_tokens/caches_a_new_access_token.yml +1 -1
  152. data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/does_not_alter_the_configuration.yml +6 -6
  153. data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/updates_access_token.yml +6 -6
  154. data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/updates_refresh_token.yml +6 -6
  155. data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/does_not_alter_the_configuration.yml +6 -6
  156. data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/updates_access_token.yml +6 -6
  157. data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/updates_refresh_token.yml +6 -6
  158. data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/does_not_alter_the_configuration.yml +9 -9
  159. data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/updates_access_token.yml +9 -9
  160. data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/updates_refresh_token.yml +9 -9
  161. data/spec/cassettes/Brightbox_BBConfig_add_login/when_no_config_exists/creates_the_configuration.yml +6 -6
  162. data/spec/cassettes/Brightbox_BBConfig_add_login/when_no_config_exists/refreshed_tokens.yml +6 -6
  163. data/spec/cassettes/Brightbox_BBConfig_add_login/when_using_an_email_and_suffix/creates_the_configuration.yml +6 -6
  164. data/spec/cassettes/Brightbox_BBConfig_add_login/when_using_an_email_and_suffix/refreshed_tokens.yml +6 -6
  165. data/spec/cassettes/Brightbox_CloudIP/_find_all_/when_a_Cloud_IP_exists/returns_a_suitable.yml +15 -15
  166. data/spec/cassettes/Brightbox_FirewallPolicy/_apply_to/should_apply_firewall_policy.yml +14 -14
  167. data/spec/cassettes/Brightbox_FirewallPolicy/_create/should_create_firewall_policy.yml +14 -14
  168. data/spec/cassettes/Brightbox_FirewallPolicy/_destroy/should_destroy_firewall_policy.yml +16 -16
  169. data/spec/cassettes/Brightbox_FirewallPolicy/_find_all_/when_a_policy_exists/should_list_firewall_policy.yml +13 -13
  170. data/spec/cassettes/Brightbox_FirewallPolicy/_find_or_call/when_a_policy_exists/should_show_firewall_policy.yml +11 -11
  171. data/spec/cassettes/Brightbox_FirewallRule/_create/when_policy_exists/creates_the_rule_successfully.yml +14 -14
  172. data/spec/cassettes/Brightbox_FirewallRule/_destroy/when_rule_exists/destroys_a_rule.yml +12 -12
  173. data/spec/cassettes/Brightbox_FirewallRule/_find/when_rule_exists/can_display_the_result.yml +14 -14
  174. data/spec/cassettes/Brightbox_FirewallRule/_from_policy/when_policy_exists_with_a_rule/lists_all_rules.yml +19 -19
  175. data/spec/cassettes/Brightbox_Server/_destroy/when_server_exists/should_work.yml +12 -12
  176. data/spec/cassettes/Brightbox_Server/_find_all_/when_a_server_exists/should_print_server_list.yml +15 -15
  177. data/spec/cassettes/Brightbox_Server/_show/when_server_exists/shows_detailed_attributes_of_a_server.yml +18 -18
  178. data/spec/cassettes/Brightbox_Server/_shutdown/should_work.yml +18 -18
  179. data/spec/cassettes/Brightbox_Server/_start/should_work.yml +24 -24
  180. data/spec/cassettes/Brightbox_Server/_stop/should_work.yml +18 -18
  181. data/spec/cassettes/Brightbox_Server/_update/when_passing_new_group_membership/should_update_with_group.yml +22 -22
  182. data/spec/cassettes/Brightbox_ServerGroup/_find_all_/when_a_group_exists/list_server_groups.yml +13 -13
  183. data/spec/cassettes/Firewall_policies/update/when_the_policy_does_not_exist/prints_error_to_STDERR.yml +3 -3
  184. data/spec/cassettes/brightbox_accounts/list/_when_access_token_expired_/does_not_report_invalid_token_errors.yml +30 -30
  185. data/spec/cassettes/brightbox_accounts/list/_when_both_tokens_expired_/does_not_report_invalid_token_errors.yml +9 -9
  186. data/spec/cassettes/brightbox_accounts/list/_when_invalid_tokens_/does_not_report_invalid_token_errors.yml +9 -9
  187. data/spec/cassettes/brightbox_accounts/list/_when_no_tokens_/does_not_report_invalid_token_errors.yml +27 -27
  188. data/spec/cassettes/brightbox_accounts/list/_when_no_tokens_/reports_they_were_updated.yml +7 -7
  189. data/spec/cassettes/brightbox_accounts/list/_when_no_tokens_and_password_incorrect_/does_not_report_invalid_token_errors.yml +7 -7
  190. data/spec/cassettes/brightbox_accounts/list/_when_no_tokens_and_password_incorrect_/reports_unable_to_authenticate.yml +6 -6
  191. data/spec/cassettes/brightbox_accounts/list/does_not_error.yml +3 -3
  192. data/spec/cassettes/brightbox_cloudips/map/when_destination_is_a_server_ID/passes_the_interface_identifier_to_the_API.yml +12 -12
  193. data/spec/cassettes/brightbox_cloudips/map/when_destination_is_another_value/passes_the_identifier_to_the_API.yml +7 -7
  194. data/spec/cassettes/brightbox_config/client_add/when_adding_a_new_client/does_not_error.yml +7 -7
  195. data/spec/cassettes/brightbox_config/client_add/when_adding_a_new_client/sets_up_the_config.yml +7 -7
  196. data/spec/cassettes/brightbox_config/client_add/when_new_client_is_first_and_only_client/does_not_change_the_default_client.yml +7 -7
  197. data/spec/cassettes/brightbox_config/client_add/when_new_client_is_first_and_only_client/does_not_error.yml +7 -7
  198. data/spec/cassettes/brightbox_config/client_add/when_new_client_is_first_and_only_client/sets_this_as_the_default_client.yml +7 -7
  199. data/spec/cassettes/brightbox_config/client_add/when_new_client_is_first_and_only_client/sets_up_the_config.yml +7 -7
  200. data/spec/cassettes/brightbox_config/user_add/when_NO_config_file_on_disk/sets_up_the_config.yml +5 -5
  201. data/spec/cassettes/brightbox_config/user_add/when_a_default_client_is_already_set/does_not_change_the_default_client.yml +2 -2
  202. data/spec/cassettes/brightbox_config/user_add/when_application_details_in_config/does_not_error.yml +2 -2
  203. data/spec/cassettes/brightbox_config/user_add/when_application_details_in_config/sets_up_the_config.yml +2 -2
  204. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_only_one_active_account/display_an_warning_about_preselected_default.yml +2 -2
  205. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_only_one_active_account/does_not_error.yml +2 -2
  206. 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
  207. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_only_one_active_account/sets_up_the_config.yml +2 -2
  208. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_to_multiple_accounts/display_an_warning_about_preselected_default.yml +2 -2
  209. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_to_multiple_accounts/does_not_error.yml +2 -2
  210. data/spec/cassettes/brightbox_config/user_add/when_application_has_access_to_multiple_accounts/sets_up_the_config.yml +2 -2
  211. data/spec/cassettes/brightbox_config/user_add/when_new_client_is_first_and_only_client/does_not_error.yml +2 -2
  212. 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
  213. data/spec/cassettes/brightbox_config/user_add/when_new_client_is_first_and_only_client/requests_access_tokens.yml +2 -2
  214. data/spec/cassettes/brightbox_config/user_add/when_new_client_is_first_and_only_client/sets_this_as_the_default_client.yml +2 -2
  215. data/spec/cassettes/brightbox_config/user_add/when_new_client_is_first_and_only_client/sets_up_the_config.yml +5 -5
  216. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments/does_not_error.yml +2 -2
  217. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments/does_not_prompt_to_rerun_the_command.yml +2 -2
  218. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments/requests_access_tokens.yml +2 -2
  219. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments/sets_up_the_config.yml +3 -3
  220. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments_and_api_url/does_not_error.yml +2 -2
  221. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments_and_api_url/requests_access_tokens.yml +2 -2
  222. data/spec/cassettes/brightbox_config/user_add/when_passing_in_required_arguments_and_api_url/sets_up_the_config.yml +2 -2
  223. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/does_not_error.yml +6 -6
  224. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/does_not_prompt_to_rerun_the_command.yml +6 -6
  225. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/prompts_for_the_password.yml +6 -6
  226. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/requests_access_tokens.yml +6 -6
  227. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/sets_up_the_config.yml +6 -6
  228. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/does_not_error.yml +6 -6
  229. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/does_not_prompt_to_rerun_the_command.yml +6 -6
  230. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/prompts_for_the_password.yml +6 -6
  231. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/requests_access_tokens.yml +6 -6
  232. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/sets_up_the_config.yml +6 -6
  233. data/spec/cassettes/brightbox_login/when_default_account_is_passed/does_not_error.yml +3 -3
  234. data/spec/cassettes/brightbox_login/when_default_account_is_passed/does_not_prompt_to_rerun_the_command.yml +3 -3
  235. data/spec/cassettes/brightbox_login/when_default_account_is_passed/prompts_for_the_password.yml +3 -3
  236. data/spec/cassettes/brightbox_login/when_default_account_is_passed/requests_access_tokens.yml +3 -3
  237. data/spec/cassettes/brightbox_login/when_default_account_is_passed/sets_up_the_config.yml +3 -3
  238. data/spec/cassettes/brightbox_login/when_no_config_is_present/does_not_error.yml +6 -6
  239. data/spec/cassettes/brightbox_login/when_no_config_is_present/does_not_prompt_to_rerun_the_command.yml +6 -6
  240. data/spec/cassettes/brightbox_login/when_no_config_is_present/requests_access_tokens.yml +6 -6
  241. data/spec/cassettes/brightbox_login/when_no_config_is_present/sets_up_the_config.yml +6 -6
  242. data/spec/cassettes/brightbox_login/when_no_password_is_given/does_not_error.yml +6 -6
  243. data/spec/cassettes/brightbox_login/when_no_password_is_given/does_not_prompt_to_rerun_the_command.yml +6 -6
  244. data/spec/cassettes/brightbox_login/when_no_password_is_given/prompts_for_the_password.yml +6 -6
  245. data/spec/cassettes/brightbox_login/when_no_password_is_given/requests_access_tokens.yml +6 -6
  246. data/spec/cassettes/brightbox_login/when_no_password_is_given/sets_up_the_config.yml +6 -6
  247. data/spec/cassettes/brightbox_sql_instances/create/--allow-access_10_0_0_0/correctly_sends_API_parameters.yml +313 -26
  248. data/spec/cassettes/brightbox_sql_instances/create/--allow-access_srv-12345_grp-12345/correctly_sends_API_parameters.yml +1204 -38
  249. data/spec/cassettes/brightbox_sql_instances/create/--engine_mysql/correctly_sends_API_parameters.yml +596 -26
  250. data/spec/cassettes/brightbox_sql_instances/create/--engine_mysql_--engine-version_5_6/correctly_sends_API_parameters.yml +63 -9
  251. data/spec/cassettes/brightbox_sql_instances/create/--engine_mysql_--engine-version_8_0/correctly_sends_API_parameters.yml +393 -0
  252. data/spec/cassettes/brightbox_sql_instances/create/--maintenance-weekday_5_--maintenance_hour_11/correctly_sends_API_parameters.yml +393 -0
  253. data/spec/cassettes/brightbox_sql_instances/create/--maintenance-weekday_thursday/correctly_sends_API_parameters.yml +393 -0
  254. data/spec/cassettes/brightbox_sql_instances/create/--snapshot_dbi-12345/includes_schedule_fields_in_response.yml +1466 -0
  255. data/spec/cassettes/brightbox_sql_instances/create/--snapshots-schedule_0_12_4_/includes_schedule_fields_in_response.yml +342 -0
  256. data/spec/cassettes/brightbox_sql_instances/create/without_arguments/reports_the_new_admin_password.yml +541 -26
  257. data/spec/cassettes/brightbox_sql_instances/create/without_arguments/reports_the_new_admin_username.yml +484 -26
  258. data/spec/cassettes/brightbox_sql_instances/snapshot/when_database_server_active/correctly_sends_API_parameters.yml +4 -4
  259. data/spec/cassettes/brightbox_sql_instances/snapshot/when_database_server_can_not_be_snapshotted/reports_an_error_to_the_user.yml +2 -2
  260. data/spec/cassettes/brightbox_sql_snapshots/list/when_resources_are_available/does_not_output_to_stderr.yml +2 -2
  261. data/spec/cassettes/brightbox_sql_snapshots/list/when_resources_are_available/outputs_table_details_to_stdout.yml +2 -2
  262. data/spec/cassettes/brightbox_sql_snapshots/show/when_resource_exists/does_not_output_to_stderr.yml +2 -2
  263. data/spec/commands/accounts/default_spec.rb +1 -2
  264. data/spec/commands/accounts/list_spec.rb +7 -8
  265. data/spec/commands/accounts/reset_ftp_password_spec.rb +1 -2
  266. data/spec/commands/accounts/show_spec.rb +1 -2
  267. data/spec/commands/cloudips/create_spec.rb +1 -2
  268. data/spec/commands/cloudips/destroy_spec.rb +1 -2
  269. data/spec/commands/cloudips/list_spec.rb +1 -2
  270. data/spec/commands/cloudips/map_spec.rb +2 -3
  271. data/spec/commands/cloudips/show_spec.rb +1 -2
  272. data/spec/commands/cloudips/unmap_spec.rb +1 -2
  273. data/spec/commands/cloudips/update_spec.rb +7 -8
  274. data/spec/commands/config/client_add_spec.rb +2 -3
  275. data/spec/commands/config/client_default_spec.rb +1 -2
  276. data/spec/commands/config/client_list_spec.rb +1 -2
  277. data/spec/commands/config/client_remove_spec.rb +1 -2
  278. data/spec/commands/config/user_add_spec.rb +3 -4
  279. data/spec/commands/firewall_policies/update_spec.rb +3 -3
  280. data/spec/commands/groups/add_server_spec.rb +1 -2
  281. data/spec/commands/groups/create_spec.rb +1 -2
  282. data/spec/commands/groups/destroy_spec.rb +1 -2
  283. data/spec/commands/groups/list_spec.rb +1 -2
  284. data/spec/commands/groups/move_servers_spec.rb +1 -2
  285. data/spec/commands/groups/remove_servers_spec.rb +1 -2
  286. data/spec/commands/groups/show_spec.rb +1 -2
  287. data/spec/commands/groups/update_spec.rb +1 -2
  288. data/spec/commands/images/destroy_spec.rb +1 -2
  289. data/spec/commands/images/list_spec.rb +62 -63
  290. data/spec/commands/images/locking_spec.rb +4 -4
  291. data/spec/commands/images/register_spec.rb +89 -3
  292. data/spec/commands/images/show_spec.rb +56 -4
  293. data/spec/commands/images/update_spec.rb +53 -3
  294. data/spec/commands/lbs/add_nodes_spec.rb +1 -2
  295. data/spec/commands/lbs/create_spec.rb +2 -3
  296. data/spec/commands/lbs/destroy_spec.rb +1 -2
  297. data/spec/commands/lbs/list_spec.rb +1 -2
  298. data/spec/commands/lbs/locking_spec.rb +4 -4
  299. data/spec/commands/lbs/remove_nodes_spec.rb +1 -2
  300. data/spec/commands/lbs/show_spec.rb +1 -2
  301. data/spec/commands/lbs/update_spec.rb +3 -4
  302. data/spec/commands/login_spec.rb +134 -30
  303. data/spec/commands/policies/apply_spec.rb +1 -2
  304. data/spec/commands/policies/create_spec.rb +1 -2
  305. data/spec/commands/policies/destroy_spec.rb +1 -2
  306. data/spec/commands/policies/list_spec.rb +1 -2
  307. data/spec/commands/policies/remove_spec.rb +1 -2
  308. data/spec/commands/policies/show_spec.rb +1 -2
  309. data/spec/commands/policies/update_spec.rb +1 -2
  310. data/spec/commands/rules/create_spec.rb +1 -2
  311. data/spec/commands/rules/destroy_spec.rb +1 -2
  312. data/spec/commands/rules/list_spec.rb +1 -2
  313. data/spec/commands/rules/show_spec.rb +1 -2
  314. data/spec/commands/rules/update_spec.rb +1 -2
  315. data/spec/commands/servers/activate_console_spec.rb +1 -2
  316. data/spec/commands/servers/create_spec.rb +10 -10
  317. data/spec/commands/servers/destroy_spec.rb +1 -2
  318. data/spec/commands/servers/list_spec.rb +1 -2
  319. data/spec/commands/servers/locking_spec.rb +4 -4
  320. data/spec/commands/servers/reboot_spec.rb +3 -4
  321. data/spec/commands/servers/reset_spec.rb +3 -4
  322. data/spec/commands/servers/show_spec.rb +1 -2
  323. data/spec/commands/servers/shutdown_spec.rb +1 -2
  324. data/spec/commands/servers/snapshot_spec.rb +1 -2
  325. data/spec/commands/servers/start_spec.rb +1 -2
  326. data/spec/commands/servers/stop_spec.rb +1 -2
  327. data/spec/commands/servers/update_spec.rb +1 -2
  328. data/spec/commands/sql/instances/create_spec.rb +58 -75
  329. data/spec/commands/sql/instances/locking_spec.rb +4 -4
  330. data/spec/commands/sql/instances/show_spec.rb +7 -7
  331. data/spec/commands/sql/instances/snapshot_spec.rb +2 -2
  332. data/spec/commands/sql/instances/update_spec.rb +8 -8
  333. data/spec/commands/sql/snapshots/list_spec.rb +1 -1
  334. data/spec/commands/sql/snapshots/locking_spec.rb +4 -4
  335. data/spec/commands/sql/snapshots/show_spec.rb +1 -1
  336. data/spec/commands/sql/types/list_spec.rb +1 -2
  337. data/spec/commands/types/list_spec.rb +1 -2
  338. data/spec/commands/users/list_spec.rb +1 -2
  339. data/spec/commands/users/show_spec.rb +1 -2
  340. data/spec/commands/users/update_spec.rb +1 -2
  341. data/spec/commands/zones/list_spec.rb +1 -2
  342. data/spec/configs/api_client.ini +1 -1
  343. data/spec/configs/user_app.ini +2 -2
  344. data/spec/spec_helper.rb +16 -3
  345. data/spec/support/authentication_helpers.rb +98 -0
  346. data/spec/support/config_helpers.rb +2 -4
  347. data/spec/support/password_prompt_helpers.rb +22 -1
  348. data/spec/support/server_helper.rb +5 -5
  349. data/spec/support/tmp_config.rb +1 -1
  350. data/spec/support/token_helpers.rb +2 -2
  351. data/spec/support/vcr.rb +3 -22
  352. data/spec/unit/brightbox/api/created_on_spec.rb +2 -2
  353. data/spec/unit/brightbox/api/fog_model_spec.rb +13 -13
  354. data/spec/unit/brightbox/api/klass_name_spec.rb +0 -1
  355. data/spec/unit/brightbox/api/method_missing_spec.rb +64 -0
  356. data/spec/unit/brightbox/api/require_account_spec.rb +0 -1
  357. data/spec/unit/brightbox/api/respond_to_spec.rb +71 -0
  358. data/spec/unit/brightbox/bb_config/access_token_filename_spec.rb +0 -1
  359. data/spec/unit/brightbox/bb_config/account_spec.rb +0 -1
  360. data/spec/unit/brightbox/bb_config/add_login_spec.rb +27 -28
  361. data/spec/unit/brightbox/bb_config/add_section_spec.rb +1 -2
  362. data/spec/unit/brightbox/bb_config/clear_default_client_spec.rb +0 -1
  363. data/spec/unit/brightbox/bb_config/client_id_spec.rb +0 -1
  364. data/spec/unit/brightbox/bb_config/client_name_spec.rb +0 -1
  365. data/spec/unit/brightbox/bb_config/config_directory_exists_spec.rb +0 -1
  366. data/spec/unit/brightbox/bb_config/config_directory_spec.rb +0 -1
  367. data/spec/unit/brightbox/bb_config/config_spec.rb +2 -3
  368. data/spec/unit/brightbox/bb_config/default_account_spec.rb +0 -1
  369. data/spec/unit/brightbox/bb_config/default_client_spec.rb +0 -1
  370. data/spec/unit/brightbox/bb_config/delete_section_spec.rb +0 -1
  371. data/spec/unit/brightbox/bb_config/find_or_set_default_account_spec.rb +4 -4
  372. data/spec/unit/brightbox/bb_config/refresh_token_filename_spec.rb +0 -1
  373. data/spec/unit/brightbox/bb_config/renew_tokens_spec.rb +3 -4
  374. data/spec/unit/brightbox/bb_config/save_default_account_spec.rb +0 -1
  375. data/spec/unit/brightbox/bb_config/save_spec.rb +0 -1
  376. data/spec/unit/brightbox/bb_config/section_names_spec.rb +1 -1
  377. data/spec/unit/brightbox/bb_config/to_fog_spec.rb +2 -2
  378. data/spec/unit/brightbox/collaborating_account/to_row_spec.rb +3 -3
  379. data/spec/unit/brightbox/config/api_client/to_fog_spec.rb +8 -8
  380. data/spec/unit/brightbox/config/api_client/valid_spec.rb +4 -4
  381. data/spec/unit/brightbox/config/discover_two_factor_pin_spec.rb +87 -0
  382. data/spec/unit/brightbox/config/section_name_deduplicator_spec.rb +1 -1
  383. data/spec/unit/brightbox/config/user_application/to_fog_spec.rb +10 -10
  384. data/spec/unit/brightbox/config/user_application/valid_spec.rb +3 -3
  385. data/spec/unit/brightbox/connection_manager/fetch_connection_spec.rb +1 -1
  386. data/spec/unit/brightbox/database_server/clean_arguments_spec.rb +1 -2
  387. data/spec/unit/brightbox/database_server/maintenance_window_spec.rb +0 -1
  388. data/spec/unit/brightbox/error_parser/pretty_print_spec.rb +0 -1
  389. data/spec/unit/brightbox/firewall_policy/apply_to_spec.rb +0 -1
  390. data/spec/unit/brightbox/firewall_policy/create_spec.rb +0 -1
  391. data/spec/unit/brightbox/firewall_policy/find_or_call_spec.rb +0 -1
  392. data/spec/unit/brightbox/firewall_policy/find_spec.rb +0 -1
  393. data/spec/unit/brightbox/firewall_rule/find_spec.rb +9 -9
  394. data/spec/unit/brightbox/firewall_rule/from_policy_spec.rb +4 -4
  395. data/spec/unit/brightbox/legacy/args_adjuster_spec.rb +20 -21
  396. data/spec/unit/brightbox/server/create_spec.rb +1 -2
  397. data/spec/unit/brightbox/server/start_spec.rb +2 -2
  398. data/spec/unit/brightbox/server/update_spec.rb +0 -1
  399. data/spec/unit/brightbox/user_collaboration/remove_spec.rb +0 -1
  400. data/spec/unit/nilable_hash_spec.rb +5 -5
  401. data/spec/unit/ruby_core_ext_spec.rb +3 -4
  402. data/spec/unit/temporary_home_spec.rb +1 -1
  403. data/spec/unit/tmp_config_spec.rb +0 -1
  404. metadata +133 -101
  405. data/bin/brightbox-accounts +0 -13
  406. data/bin/brightbox-cloudips +0 -13
  407. data/bin/brightbox-config +0 -13
  408. data/bin/brightbox-firewall-policies +0 -13
  409. data/bin/brightbox-firewall-rules +0 -13
  410. data/bin/brightbox-groups +0 -13
  411. data/bin/brightbox-images +0 -13
  412. data/bin/brightbox-lbs +0 -13
  413. data/bin/brightbox-servers +0 -13
  414. data/bin/brightbox-types +0 -13
  415. data/bin/brightbox-users +0 -13
  416. data/bin/brightbox-zones +0 -13
  417. data/lib/brightbox-cli/commands/config/client-default.rb +0 -26
@@ -1,13 +1,10 @@
1
1
  module Brightbox
2
2
  command [:sql] do |product|
3
3
  product.command [:snapshots] do |cmd|
4
-
5
4
  cmd.desc I18n.t("sql.snapshots.show.desc")
6
5
  cmd.arg_name "[snapshot-id...]"
7
6
  cmd.command [:show] do |c|
8
-
9
7
  c.action do |global_options, _options, args|
10
-
11
8
  raise "You must specify snapshot ids to show" if args.empty?
12
9
 
13
10
  servers = DatabaseSnapshot.find_or_call(args) do |id|
@@ -16,18 +13,18 @@ module Brightbox
16
13
 
17
14
  table_opts = global_options.merge(
18
15
  :vertical => true,
19
- :fields => [
20
- :id,
21
- :name,
22
- :description,
23
- :status,
24
- :database_engine,
25
- :database_version,
26
- :locked,
27
- :created_on,
28
- :created_at,
29
- :size,
30
- :source
16
+ :fields => %i[
17
+ id
18
+ name
19
+ description
20
+ status
21
+ database_engine
22
+ database_version
23
+ locked
24
+ created_on
25
+ created_at
26
+ size
27
+ source
31
28
  ]
32
29
  )
33
30
  render_table(servers, table_opts)
@@ -1,13 +1,11 @@
1
1
  module Brightbox
2
2
  command [:sql] do |product|
3
3
  product.command [:snapshots] do |cmd|
4
-
5
4
  cmd.desc I18n.t("sql.snapshots.update.desc")
6
5
  cmd.arg_name "snapshot-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 I18n.t("options.description.desc")
13
11
  c.flag [:d, "description"]
@@ -1,24 +1,20 @@
1
1
  module Brightbox
2
2
  command [:sql] do |product|
3
-
4
3
  product.desc I18n.t("sql.types.desc")
5
4
  product.command [:types] do |cmd|
6
-
7
5
  cmd.default_command :list
8
6
 
9
7
  cmd.desc I18n.t("sql.types.list.desc")
10
8
  cmd.arg_name "[type-id...]"
11
9
  cmd.command [:list] do |c|
12
-
13
10
  c.action do |global_options, _options, args|
14
-
15
- if args.empty?
16
- types = DatabaseType.find :all
17
- else
18
- types = DatabaseType.find_or_call(args) do |id|
19
- warn "Couldn't find an SQL type with ID #{id}"
20
- end
21
- end
11
+ types = if args.empty?
12
+ DatabaseType.find :all
13
+ else
14
+ DatabaseType.find_or_call(args) do |id|
15
+ warn "Couldn't find an SQL type with ID #{id}"
16
+ end
17
+ end
22
18
 
23
19
  render_table(types.sort, global_options)
24
20
  end
@@ -27,9 +23,7 @@ module Brightbox
27
23
  cmd.desc I18n.t("sql.types.show.desc")
28
24
  cmd.arg_name "[type-id...]"
29
25
  cmd.command [:show] do |c|
30
-
31
26
  c.action do |global_options, _options, args|
32
-
33
27
  if args.empty?
34
28
  raise "You must specify the types you want to show"
35
29
  end
@@ -40,12 +34,11 @@ module Brightbox
40
34
 
41
35
  display_options = {
42
36
  :vertical => true,
43
- :fields => [:id, :name, :description, :ram, :disk]
37
+ :fields => %i[id name description ram disk]
44
38
  }
45
39
 
46
40
  table_opts = global_options.merge(display_options)
47
41
  render_table(types, table_opts)
48
-
49
42
  end
50
43
  end
51
44
  end
@@ -29,6 +29,5 @@ module Brightbox
29
29
  $stdout.puts token.format(options[:format])
30
30
  end
31
31
  end
32
-
33
32
  end
34
33
  end
@@ -1,22 +1,19 @@
1
1
  module Brightbox
2
2
  desc "Lists the type of templates available for servers"
3
3
  command [:types] do |cmd|
4
-
5
4
  cmd.default_command :list
6
5
 
7
6
  cmd.desc "List types"
8
7
  cmd.arg_name "[type-id...]"
9
8
  cmd.command [:list] do |c|
10
-
11
9
  c.action do |global_options, _options, args|
12
-
13
- if args.empty?
14
- types = Type.find :all
15
- else
16
- types = Type.find_or_call(args) do |id|
17
- warn "Couldn't find type #{id}"
18
- end
19
- end
10
+ types = if args.empty?
11
+ Type.find :all
12
+ else
13
+ Type.find_or_call(args) do |id|
14
+ warn "Couldn't find type #{id}"
15
+ end
16
+ end
20
17
 
21
18
  render_table(types.sort, global_options)
22
19
  end
@@ -25,9 +22,7 @@ module Brightbox
25
22
  cmd.desc "Show detailed type info"
26
23
  cmd.arg_name "type-id..."
27
24
  cmd.command [:show] do |c|
28
-
29
25
  c.action do |global_options, _options, args|
30
-
31
26
  if args.empty?
32
27
  raise "You must specify the types you want to show"
33
28
  end
@@ -38,12 +33,11 @@ module Brightbox
38
33
 
39
34
  display_options = {
40
35
  :vertical => true,
41
- :fields => [:id, :handle, :status, :name, :ram, :disk, :cores]
36
+ :fields => %i[id handle status name ram disk cores]
42
37
  }
43
38
 
44
39
  table_opts = global_options.merge(display_options)
45
40
  render_table(types, table_opts)
46
-
47
41
  end
48
42
  end
49
43
  end
@@ -1,20 +1,19 @@
1
1
  module Brightbox
2
2
  desc "Lists accounts you can access (when using user credentials)"
3
3
  command [:"account-access"] do |cmd|
4
-
5
4
  cmd.default_command :list
6
5
 
7
6
  cmd.desc "List your collaborations"
8
7
  cmd.arg_name "[collaboration-id...]"
9
8
  cmd.command [:list] do |c|
10
9
  c.action do |global_options, _options, args|
11
- if args.empty?
12
- collaborations = UserCollaboration.find(:all)
13
- else
14
- collaborations = UserCollaboration.find_or_call(args) do |id|
15
- warn "Couldn't find collaboration #{id}"
16
- end
17
- end
10
+ collaborations = if args.empty?
11
+ UserCollaboration.find(:all)
12
+ else
13
+ UserCollaboration.find_or_call(args) do |id|
14
+ warn "Couldn't find collaboration #{id}"
15
+ end
16
+ end
18
17
  render_table(collaborations, global_options)
19
18
  end
20
19
  end
@@ -1,13 +1,11 @@
1
1
  module Brightbox
2
2
  desc I18n.t("users.desc")
3
3
  command [:users] do |cmd|
4
-
5
4
  cmd.default_command :list
6
5
 
7
6
  cmd.desc I18n.t("users.list.desc")
8
7
  cmd.arg_name "[user-id...]"
9
8
  cmd.command [:list] do |c|
10
-
11
9
  c.action do |global_options, _options, args|
12
10
  users = User.find_all_or_warn(args)
13
11
  render_table(users, global_options)
@@ -1,16 +1,14 @@
1
1
  module Brightbox
2
2
  command [:users] do |cmd|
3
-
4
3
  cmd.desc I18n.t("users.show.desc")
5
4
  cmd.arg_name "user-id..."
6
5
  cmd.command [:show] do |c|
7
-
8
6
  c.action do |global_options, _options, args|
9
7
  users = User.find_all_or_warn(args)
10
8
 
11
9
  table_opts = global_options.merge(
12
10
  :vertical => true,
13
- :fields => [:id, :name, :email_address, :accounts, :ssh_key]
11
+ :fields => %i[id name email_address accounts ssh_key]
14
12
  )
15
13
 
16
14
  render_table(users, table_opts)
@@ -1,26 +1,23 @@
1
1
  module Brightbox
2
2
  command [:users] do |cmd|
3
-
4
3
  cmd.desc I18n.t("users.update.desc")
5
4
  cmd.arg_name "user-id..."
6
5
  cmd.command [:update] do |c|
7
-
8
6
  c.desc "Path to public ssh key file"
9
7
  c.long_desc "This is the path to the public ssh key that you'd like to use
10
8
  for new servers. You can specify '-' to read from stdin"
11
9
  c.flag [:f, "ssh-key"]
12
10
 
13
11
  c.desc I18n.t("options.name.desc")
14
- c.flag [:n, :name]
12
+ c.flag %i[n name]
15
13
 
16
14
  c.action do |global_options, options, args|
17
-
18
15
  raise "You must specify the user id as the first argument" if args.empty?
19
16
 
20
17
  user = User.find args.first
21
18
 
22
19
  if options[:f] == "-"
23
- user.ssh_key = STDIN.read
20
+ user.ssh_key = $stdin.read
24
21
  elsif options[:f]
25
22
  File.open(File.expand_path(options[:f])) { |f| user.ssh_key = f.read }
26
23
  end
@@ -31,7 +28,7 @@ module Brightbox
31
28
 
32
29
  table_opts = global_options.merge(
33
30
  :vertical => true,
34
- :fields => [:id, :name, :email_address, :ssh_key]
31
+ :fields => %i[id name email_address ssh_key]
35
32
  )
36
33
 
37
34
  render_table([user], table_opts)
@@ -1,22 +1,19 @@
1
1
  module Brightbox
2
2
  desc "Lists the zones available to an account or see more details"
3
3
  command [:zones] do |cmd|
4
-
5
4
  cmd.default_command :list
6
5
 
7
6
  cmd.desc "List zones"
8
7
  cmd.arg_name "[zone-id...]"
9
8
  cmd.command [:list] do |c|
10
-
11
9
  c.action do |global_options, _options, args|
12
-
13
- if args.empty?
14
- zones = Zone.find(:all)
15
- else
16
- zones = Zone.find_or_call(args) do |id|
17
- warn "Couldn't find zone #{id}"
18
- end
19
- end
10
+ zones = if args.empty?
11
+ Zone.find(:all)
12
+ else
13
+ Zone.find_or_call(args) do |id|
14
+ warn "Couldn't find zone #{id}"
15
+ end
16
+ end
20
17
 
21
18
  render_table(zones, global_options)
22
19
  end
@@ -3,23 +3,15 @@ module Brightbox
3
3
  module Accounts
4
4
  def save_default_account(account_id)
5
5
  dirty! unless account_id == selected_config["default_account"]
6
- selected_config['default_account'] = account_id
6
+
7
+ selected_config["default_account"] = account_id
7
8
  end
8
9
 
9
- #
10
- #
11
- #
12
10
  def default_account
13
- if selected_config
14
- configured_default_account = selected_config["default_account"]
15
- if configured_default_account && !configured_default_account.empty?
16
- configured_default_account
17
- else
18
- nil
19
- end
20
- else
21
- nil
22
- end
11
+ return unless selected_config
12
+
13
+ configured_default_account = selected_config["default_account"]
14
+ return configured_default_account if configured_default_account && !configured_default_account.empty?
23
15
  end
24
16
 
25
17
  def determine_account(preferred_account)
@@ -44,19 +36,19 @@ module Brightbox
44
36
  def find_or_set_default_account
45
37
  # FIXME: API clients are scoped to their account so this code should
46
38
  # never need to run for them.
47
- unless default_account
48
- begin
49
- service = Fog::Compute.new(to_fog)
50
- accounts = service.accounts
39
+ return if default_account
40
+
41
+ begin
42
+ service = Fog::Compute.new(to_fog)
43
+ accounts = service.accounts
51
44
 
52
- @account = accounts.select { |acc| %w(pending active).include?(acc.status) }.first.id
53
- save_default_account(@account) if @account
54
- rescue Brightbox::BBConfigError
55
- # We can't get a suitable fog connection so we can't select an
56
- # account
57
- rescue Excon::Errors::Unauthorized
58
- # This is a helper, if it fails let the other code warn and prompt
59
- end
45
+ @account = accounts.select { |acc| %w[pending active].include?(acc.status) }.first.id
46
+ save_default_account(@account) if @account
47
+ rescue Brightbox::BBConfigError
48
+ # We can't get a suitable fog connection so we can't select an
49
+ # account
50
+ rescue Excon::Errors::Unauthorized
51
+ # This is a helper, if it fails let the other code warn and prompt
60
52
  end
61
53
  end
62
54
  end
@@ -1,7 +1,7 @@
1
1
  module Brightbox
2
2
  module Config
3
3
  class ApiClient
4
- NON_BLANK_KEYS = %w(api_url client_id secret)
4
+ NON_BLANK_KEYS = %w[api_url client_id secret].freeze
5
5
 
6
6
  attr_accessor :selected_config, :client_name
7
7
 
@@ -13,11 +13,11 @@ module Brightbox
13
13
  def to_fog
14
14
  check_required_params
15
15
  {
16
- :provider => 'Brightbox',
17
- :brightbox_api_url => selected_config['api_url'],
18
- :brightbox_auth_url => selected_config['auth_url'] || selected_config['api_url'],
19
- :brightbox_client_id => selected_config['client_id'],
20
- :brightbox_secret => selected_config['secret'],
16
+ :provider => "Brightbox",
17
+ :brightbox_api_url => selected_config["api_url"],
18
+ :brightbox_auth_url => selected_config["auth_url"] || selected_config["api_url"],
19
+ :brightbox_client_id => selected_config["client_id"],
20
+ :brightbox_secret => selected_config["secret"],
21
21
  :persistent => persistent?
22
22
  }
23
23
  end
@@ -31,19 +31,15 @@ module Brightbox
31
31
  private
32
32
 
33
33
  def persistent?
34
- if selected_config["persistent"] == "false"
35
- false
36
- else
37
- true
38
- end
34
+ selected_config["persistent"] != "false"
39
35
  end
40
36
 
41
37
  def check_required_params
42
- unless valid?
43
- NON_BLANK_KEYS.each do |key|
44
- unless selected_config.key?(key) && !selected_config[key].to_s.empty?
45
- raise Brightbox::BBConfigError, "#{key} option missing from config in section #{client_name}"
46
- end
38
+ return if valid?
39
+
40
+ NON_BLANK_KEYS.each do |key|
41
+ unless selected_config.key?(key) && !selected_config[key].to_s.empty?
42
+ raise Brightbox::BBConfigError, "#{key} option missing from config in section #{client_name}"
47
43
  end
48
44
  end
49
45
  end
@@ -12,11 +12,10 @@ module Brightbox
12
12
  if defined?(@access_token) && !@access_token.nil?
13
13
  return @access_token
14
14
  end
15
- if File.exist?(access_token_filename)
16
- @access_token = cached_access_token
17
- else
18
- @access_token = nil
19
- end
15
+
16
+ @access_token = if File.exist?(access_token_filename)
17
+ cached_access_token
18
+ end
20
19
  end
21
20
 
22
21
  def refresh_token_filename
@@ -28,11 +27,10 @@ module Brightbox
28
27
  if defined?(@refresh_token) && !@refresh_token.nil?
29
28
  return @refresh_token
30
29
  end
31
- if File.exist?(refresh_token_filename)
32
- @refresh_token = cached_refresh_token
33
- else
34
- @refresh_token = nil
35
- end
30
+
31
+ @refresh_token = if File.exist?(refresh_token_filename)
32
+ cached_refresh_token
33
+ end
36
34
  end
37
35
 
38
36
  # @deprecation use access_token instead
@@ -70,6 +68,7 @@ module Brightbox
70
68
  # through the process.
71
69
  #
72
70
  password = options[:password] if options[:password]
71
+ one_time_password = options[:one_time_password] if options[:one_time_password]
73
72
 
74
73
  # To prevent refreshing tokens for the wrong client (using client_name
75
74
  # is pretty random) we set it specially
@@ -82,11 +81,15 @@ module Brightbox
82
81
  if refresh_token
83
82
  begin
84
83
  service = update_tokens_with_refresh_token
85
- rescue Excon::Errors::BadRequest, Excon::Errors::Unauthorized
84
+ rescue Fog::Brightbox::OAuth2::TwoFactorMissingError, Excon::Errors::BadRequest, Excon::Errors::Unauthorized
86
85
  service = update_tokens_with_user_credentials
87
86
  end
88
87
  else
89
- service = update_tokens_with_user_credentials(password)
88
+ begin
89
+ service = update_tokens_with_user_credentials(password: password, one_time_password: one_time_password)
90
+ rescue Fog::Brightbox::OAuth2::TwoFactorMissingError, Excon::Errors::BadRequest, Excon::Errors::Unauthorized
91
+ service = update_tokens_with_user_credentials(password: password)
92
+ end
90
93
  end
91
94
  else
92
95
  service = update_tokens_with_client_credentials
@@ -95,7 +98,6 @@ module Brightbox
95
98
  new_access_token = service.access_token
96
99
  new_refresh_token = service.refresh_token
97
100
  update_stored_tokens(new_access_token, new_refresh_token)
98
-
99
101
  rescue Excon::Errors::BadRequest, Excon::Errors::Unauthorized
100
102
  error "ERROR: Unable to reauthenticate!"
101
103
  ensure
@@ -115,7 +117,9 @@ module Brightbox
115
117
  # authenticate with the API.
116
118
  #
117
119
  def save_access_token(current_access_token)
118
- if access_token != current_access_token
120
+ if access_token == current_access_token
121
+ debug "Access token remains #{access_token}"
122
+ else
119
123
  @access_token = current_access_token
120
124
  debug "Attempting to save new access token: #{current_access_token}"
121
125
  debug "In memory access token: #{@access_token}"
@@ -124,8 +128,6 @@ module Brightbox
124
128
  persist_token(access_token_filename, current_access_token)
125
129
 
126
130
  current_access_token
127
- else
128
- debug "Access token remains #{access_token}"
129
131
  end
130
132
  end
131
133
 
@@ -133,7 +135,9 @@ module Brightbox
133
135
  # request a new access token when current one has expired.
134
136
  #
135
137
  def save_refresh_token(current_token)
136
- if refresh_token != current_token
138
+ if refresh_token == current_token
139
+ debug "Refresh token remains #{refresh_token}"
140
+ else
137
141
  @refresh_token = current_token
138
142
  debug "Attempting to save new refresh token: #{current_token}"
139
143
  debug "In memory refresh token: #{@refresh_token}"
@@ -142,8 +146,6 @@ module Brightbox
142
146
  persist_token(refresh_token_filename, current_token)
143
147
 
144
148
  current_token
145
- else
146
- debug "Refresh token remains #{refresh_token}"
147
149
  end
148
150
  end
149
151
 
@@ -177,32 +179,30 @@ module Brightbox
177
179
  connection
178
180
  end
179
181
 
180
- # This asks the user to input their password
181
- def prompt_for_password
182
- require "highline"
183
- highline = HighLine.new
184
- highline.say("Your API credentials have expired, enter your password to update them.")
185
- # FIXME: Capture interupts if user aborts
186
- highline.ask("Enter your password : ") { |q| q.echo = false }
187
- end
188
-
189
- def update_tokens_with_user_credentials(password = nil)
182
+ def update_tokens_with_user_credentials(password: nil, one_time_password: nil)
190
183
  user_application = Brightbox::Config::UserApplication.new(selected_config, client_name)
191
184
 
192
- password ||= gpg_password
193
- password ||= password_helper_password
194
- password ||= prompt_for_password
195
-
196
- password = extend_with_two_factor_pin(password)
185
+ password = discover_password(password: password, expired: true)
197
186
 
198
187
  # FIXME: options are required to work
199
188
  options = {
200
189
  :client_id => client_name,
201
190
  :email => selected_config["username"],
202
- :password => password
191
+ :password => password,
192
+ :one_time_password => one_time_password
203
193
  }
204
194
 
205
- user_application.fetch_refresh_token(options)
195
+ begin
196
+ user_application.fetch_refresh_token(options)
197
+ rescue Fog::Brightbox::OAuth2::TwoFactorMissingError
198
+ options = {
199
+ :client_id => client_name,
200
+ :email => selected_config["username"],
201
+ :password => password,
202
+ :one_time_password => discover_two_factor_pin
203
+ }
204
+ user_application.fetch_refresh_token(options)
205
+ end
206
206
  end
207
207
 
208
208
  def fetch_refresh_token(options)
@@ -210,7 +210,7 @@ module Brightbox
210
210
  client_config = config[client_name]
211
211
  user_application = Brightbox::Config::UserApplication.new(client_config, client_name)
212
212
  # replace this portion with code that actually fetches a token
213
- client_config['refresh_token'] = user_application.fetch_refresh_token(options)
213
+ client_config["refresh_token"] = user_application.fetch_refresh_token(options)
214
214
  save_refresh_token
215
215
  end
216
216
 
@@ -223,9 +223,7 @@ module Brightbox
223
223
  def persist_token(filename, token)
224
224
  token = "" if token.nil?
225
225
  # Write out a token file for this process
226
- File.open(filename + ".#{$PID}", "w") do |f|
227
- f.write token
228
- end
226
+ File.write(filename + ".#{$PID}", token)
229
227
  # Move process version into place
230
228
  debug "Saving #{token} to #{filename}"
231
229
  FileUtils.mv filename + ".#{$PID}", filename
@@ -258,10 +256,9 @@ module Brightbox
258
256
  FileUtils.rm(refresh_token_filename) if File.exist?(refresh_token_filename)
259
257
  end
260
258
 
261
- private
262
-
263
259
  def base_token_name
264
260
  return nil if client_name.nil?
261
+
265
262
  client_name.gsub("/", "_")
266
263
  end
267
264
  end
@@ -7,6 +7,7 @@ module Brightbox
7
7
 
8
8
  def cache_id(cid)
9
9
  return if cid.nil?
10
+
10
11
  unless File.exist?(cache_path)
11
12
  begin
12
13
  FileUtils.mkpath(cache_path)
@@ -8,11 +8,9 @@ module Brightbox
8
8
 
9
9
  # Is the currently selected config using user application details?
10
10
  def using_application?
11
- if client_name
12
- !config[client_name]["username"].nil?
13
- else
14
- raise NoSelectedClientError, NO_CLIENT_MESSAGE
15
- end
11
+ raise NoSelectedClientError, NO_CLIENT_MESSAGE unless client_name
12
+
13
+ !config[client_name]["username"].nil?
16
14
  end
17
15
 
18
16
  # Does this config have multiple clients defined within?
@@ -31,6 +29,7 @@ module Brightbox
31
29
  #
32
30
  def client_alias
33
31
  return nil if selected_config.nil?
32
+
34
33
  # FIXME: The 'alias' field is redundant because we are using the section
35
34
  # heading for the not ID value but we worry about it for now
36
35
  selected_config["alias"] || client_name
@@ -61,7 +60,7 @@ module Brightbox
61
60
  #
62
61
  def default_client
63
62
  @default_client ||= core_setting("default_client")
64
- rescue
63
+ rescue StandardError
65
64
  nil
66
65
  end
67
66
 
@@ -76,6 +75,7 @@ module Brightbox
76
75
  def determine_client(preferred_client = nil)
77
76
  return preferred_client unless preferred_client.nil?
78
77
  return default_client unless default_client.nil?
78
+
79
79
  section_names.first unless section_names.empty?
80
80
  nil
81
81
  end
@@ -85,8 +85,8 @@ module Brightbox
85
85
  # If the prefix is in the client ID (identifier not alias) be +true+
86
86
  def config_identifier_match_prefix?(prefix)
87
87
  client_id = selected_config["client_id"]
88
- !! /\A#{prefix}-.*/.match(client_id)
89
- rescue
88
+ !!/\A#{prefix}-.*/.match(client_id)
89
+ rescue StandardError
90
90
  raise NoSelectedClientError, NO_CLIENT_MESSAGE
91
91
  end
92
92
  end