linode-api4 5.48.0__tar.gz → 5.49.0__tar.gz

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 (383) hide show
  1. {linode_api4-5.48.0/linode_api4.egg-info → linode_api4-5.49.0}/PKG-INFO +2 -1
  2. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/linode.py +8 -0
  3. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/monitor.py +16 -0
  4. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/linode.py +34 -1
  5. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/monitor.py +18 -4
  6. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/region.py +1 -0
  7. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/version.py +1 -1
  8. {linode_api4-5.48.0 → linode_api4-5.49.0/linode_api4.egg-info}/PKG-INFO +2 -1
  9. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4.egg-info/SOURCES.txt +2 -0
  10. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4.egg-info/requires.txt +1 -0
  11. {linode_api4-5.48.0 → linode_api4-5.49.0}/pyproject.toml +1 -0
  12. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances.json +9 -3
  13. linode_api4-5.49.0/test/fixtures/linode_instances_123_clone.json +45 -0
  14. linode_api4-5.49.0/test/fixtures/monitor_streams_quotas.json +21 -0
  15. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/conftest.py +143 -34
  16. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/filters/fixtures.py +6 -1
  17. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/linode_client/test_linode_client.py +19 -6
  18. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/account/test_account.py +6 -1
  19. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/firewall/test_firewall.py +6 -2
  20. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/image/test_image.py +2 -2
  21. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/linode/test_linode.py +162 -17
  22. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/lke/test_lke.py +13 -5
  23. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/lock/test_lock.py +6 -2
  24. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/monitor/test_monitor_logs.py +22 -2
  25. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/networking/test_networking.py +3 -2
  26. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/nodebalancer/test_nodebalancer.py +7 -1
  27. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/placement/test_placement.py +2 -1
  28. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/sharegroups/test_sharegroups.py +6 -1
  29. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/volume/test_blockstorage.py +11 -2
  30. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/volume/test_volume.py +2 -2
  31. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/vpc/test_vpc.py +2 -1
  32. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/linode_client_test.py +15 -14
  33. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/linode_test.py +29 -0
  34. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/monitor_test.py +36 -0
  35. {linode_api4-5.48.0 → linode_api4-5.49.0}/LICENSE +0 -0
  36. {linode_api4-5.48.0 → linode_api4-5.49.0}/MANIFEST.in +0 -0
  37. {linode_api4-5.48.0 → linode_api4-5.49.0}/README.rst +0 -0
  38. {linode_api4-5.48.0 → linode_api4-5.49.0}/examples/install-on-linode/app.py +0 -0
  39. {linode_api4-5.48.0 → linode_api4-5.49.0}/examples/install-on-linode/make_stackscript.py +0 -0
  40. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/__init__.py +0 -0
  41. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/common.py +0 -0
  42. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/errors.py +0 -0
  43. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/__init__.py +0 -0
  44. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/account.py +0 -0
  45. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/beta.py +0 -0
  46. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/database.py +0 -0
  47. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/domain.py +0 -0
  48. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/group.py +0 -0
  49. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/image.py +0 -0
  50. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/image_share_group.py +0 -0
  51. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/lke.py +0 -0
  52. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/lke_tier.py +0 -0
  53. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/lock.py +0 -0
  54. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/longview.py +0 -0
  55. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/maintenance.py +0 -0
  56. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/monitor_api.py +0 -0
  57. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/networking.py +0 -0
  58. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/nodebalancer.py +0 -0
  59. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/object_storage.py +0 -0
  60. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/placement.py +0 -0
  61. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/polling.py +0 -0
  62. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/profile.py +0 -0
  63. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/region.py +0 -0
  64. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/support.py +0 -0
  65. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/tag.py +0 -0
  66. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/volume.py +0 -0
  67. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/groups/vpc.py +0 -0
  68. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/linode_client.py +0 -0
  69. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/login_client.py +0 -0
  70. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/__init__.py +0 -0
  71. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/account.py +0 -0
  72. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/base.py +0 -0
  73. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/beta.py +0 -0
  74. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/database.py +0 -0
  75. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/dbase.py +0 -0
  76. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/domain.py +0 -0
  77. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/filtering.py +0 -0
  78. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/image.py +0 -0
  79. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/image_share_group.py +0 -0
  80. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/linode_interfaces.py +0 -0
  81. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/lke.py +0 -0
  82. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/lock.py +0 -0
  83. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/longview.py +0 -0
  84. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/monitor_api.py +0 -0
  85. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/networking.py +0 -0
  86. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/nodebalancer.py +0 -0
  87. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/object_storage.py +0 -0
  88. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/placement.py +0 -0
  89. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/profile.py +0 -0
  90. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/serializable.py +0 -0
  91. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/support.py +0 -0
  92. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/tag.py +0 -0
  93. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/volume.py +0 -0
  94. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/objects/vpc.py +0 -0
  95. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/paginated_list.py +0 -0
  96. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/polling.py +0 -0
  97. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4/util.py +0 -0
  98. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4.egg-info/dependency_links.txt +0 -0
  99. {linode_api4-5.48.0 → linode_api4-5.49.0}/linode_api4.egg-info/top_level.txt +0 -0
  100. {linode_api4-5.48.0 → linode_api4-5.49.0}/setup.cfg +0 -0
  101. {linode_api4-5.48.0 → linode_api4-5.49.0}/setup.py +0 -0
  102. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/__init__.py +0 -0
  103. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account.json +0 -0
  104. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_availability.json +0 -0
  105. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_availability_us-east.json +0 -0
  106. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_betas.json +0 -0
  107. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_betas_cool.json +0 -0
  108. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_child-accounts.json +0 -0
  109. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_child-accounts_123456.json +0 -0
  110. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_child-accounts_123456_token.json +0 -0
  111. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_events_123.json +0 -0
  112. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_invoices.json +0 -0
  113. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_invoices_123.json +0 -0
  114. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_invoices_123456_items.json +0 -0
  115. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_logins.json +0 -0
  116. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_logins_123.json +0 -0
  117. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_maintenance.json +0 -0
  118. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_notifications.json +0 -0
  119. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_oauth-clients_2737bf16b39ab5d7b4a1.json +0 -0
  120. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_payment-method_123.json +0 -0
  121. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_payment-methods.json +0 -0
  122. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_payments.json +0 -0
  123. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_promo-codes.json +0 -0
  124. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_service-transfers.json +0 -0
  125. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_service-transfers_12345.json +0 -0
  126. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_settings.json +0 -0
  127. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_transfer.json +0 -0
  128. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/account_users_test-user.json +0 -0
  129. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/betas.json +0 -0
  130. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/betas_active.json +0 -0
  131. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_engines.json +0 -0
  132. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_instances.json +0 -0
  133. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_mysql_config.json +0 -0
  134. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_mysql_instances.json +0 -0
  135. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_mysql_instances_123_credentials.json +0 -0
  136. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_mysql_instances_123_credentials_reset.json +0 -0
  137. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_mysql_instances_123_patch.json +0 -0
  138. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_mysql_instances_123_resume.json +0 -0
  139. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_mysql_instances_123_ssl.json +0 -0
  140. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_mysql_instances_123_suspend.json +0 -0
  141. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_postgresql_config.json +0 -0
  142. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_postgresql_instances.json +0 -0
  143. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_postgresql_instances_123_credentials.json +0 -0
  144. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_postgresql_instances_123_credentials_reset.json +0 -0
  145. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_postgresql_instances_123_patch.json +0 -0
  146. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_postgresql_instances_123_resume.json +0 -0
  147. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_postgresql_instances_123_ssl.json +0 -0
  148. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_postgresql_instances_123_suspend.json +0 -0
  149. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/databases_types.json +0 -0
  150. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/domains.json +0 -0
  151. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/domains_12345_clone.json +0 -0
  152. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/domains_12345_records.json +0 -0
  153. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/domains_12345_zone-file.json +0 -0
  154. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/domains_import.json +0 -0
  155. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images.json +0 -0
  156. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_private_1234_sharegroups.json +0 -0
  157. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_private_123_regions.json +0 -0
  158. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_private_1337.json +0 -0
  159. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_sharegroups.json +0 -0
  160. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_sharegroups_1234.json +0 -0
  161. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_sharegroups_1234_images.json +0 -0
  162. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_sharegroups_1234_images_shared_1.json +0 -0
  163. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_sharegroups_1234_members.json +0 -0
  164. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_sharegroups_1234_members_abc123.json +0 -0
  165. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_sharegroups_tokens.json +0 -0
  166. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_sharegroups_tokens_abc123.json +0 -0
  167. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_sharegroups_tokens_abc123_sharegroup.json +0 -0
  168. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_sharegroups_tokens_abc123_sharegroup_images.json +0 -0
  169. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/images_upload.json +0 -0
  170. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_backups.json +0 -0
  171. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_configs.json +0 -0
  172. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_configs_456789.json +0 -0
  173. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_configs_456789_interfaces.json +0 -0
  174. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_123.json +0 -0
  175. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_123_put.json +0 -0
  176. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_321.json +0 -0
  177. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_456.json +0 -0
  178. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_disks.json +0 -0
  179. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_disks_12345_clone.json +0 -0
  180. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_firewalls.json +0 -0
  181. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_ips.json +0 -0
  182. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_nodebalancers.json +0 -0
  183. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_transfer.json +0 -0
  184. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_transfer_2023_4.json +0 -0
  185. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_123_volumes.json +0 -0
  186. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_124.json +0 -0
  187. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_124_interfaces.json +0 -0
  188. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_124_interfaces_123.json +0 -0
  189. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_124_interfaces_123_firewalls.json +0 -0
  190. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_124_interfaces_456.json +0 -0
  191. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_124_interfaces_789.json +0 -0
  192. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_124_interfaces_999.json +0 -0
  193. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_124_interfaces_settings.json +0 -0
  194. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_instances_124_upgrade-interfaces.json +0 -0
  195. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_stackscripts_10079.json +0 -0
  196. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_types.json +0 -0
  197. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/linode_types_g6-nanode-1.json +0 -0
  198. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/lke_clusters.json +0 -0
  199. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/lke_clusters_18881.json +0 -0
  200. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/lke_clusters_18881_control__plane__acl.json +0 -0
  201. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/lke_clusters_18881_dashboard.json +0 -0
  202. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/lke_clusters_18881_nodes_123456.json +0 -0
  203. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/lke_clusters_18881_pools_456.json +0 -0
  204. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/lke_clusters_18882.json +0 -0
  205. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/lke_clusters_18882_pools_789.json +0 -0
  206. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/lke_tiers_standard_versions.json +0 -0
  207. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/lke_types.json +0 -0
  208. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/lke_versions.json +0 -0
  209. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/locks.json +0 -0
  210. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/locks_1.json +0 -0
  211. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/longview_clients.json +0 -0
  212. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/longview_plan.json +0 -0
  213. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/longview_subscriptions.json +0 -0
  214. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/maintenance_policies.json +0 -0
  215. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/mongodb.json +0 -0
  216. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_alert-channels.json +0 -0
  217. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_alert-definitions.json +0 -0
  218. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_dashboards.json +0 -0
  219. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_dashboards_1.json +0 -0
  220. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_services.json +0 -0
  221. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_services_dbaas.json +0 -0
  222. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_services_dbaas_alert-definitions.json +0 -0
  223. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_services_dbaas_alert-definitions_12345.json +0 -0
  224. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_services_dbaas_alert-definitions_12345_clone.json +0 -0
  225. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_services_dbaas_alert-definitions_12345_entities.json +0 -0
  226. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_services_dbaas_dashboards.json +0 -0
  227. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_services_dbaas_metric-definitions.json +0 -0
  228. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_services_dbaas_metrics.json +0 -0
  229. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_services_dbaas_token.json +0 -0
  230. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_services_linode_token.json +0 -0
  231. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_streams.json +0 -0
  232. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_streams_1_history.json +0 -0
  233. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_streams_2.json +0 -0
  234. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_streams_3.json +0 -0
  235. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_streams_destinations.json +0 -0
  236. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_streams_destinations_1_history.json +0 -0
  237. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/monitor_streams_destinations_2.json +0 -0
  238. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/network-transfer_prices.json +0 -0
  239. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls.json +0 -0
  240. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls_123.json +0 -0
  241. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls_123_devices.json +0 -0
  242. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls_123_devices_123.json +0 -0
  243. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls_123_devices_456.json +0 -0
  244. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls_123_history.json +0 -0
  245. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls_123_history_rules_2.json +0 -0
  246. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls_123_rules.json +0 -0
  247. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls_settings.json +0 -0
  248. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls_templates.json +0 -0
  249. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls_templates_public.json +0 -0
  250. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_firewalls_templates_vpc.json +0 -0
  251. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_ips_127.0.0.1.json +0 -0
  252. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_ipv6_pools.json +0 -0
  253. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_ipv6_ranges.json +0 -0
  254. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_ipv6_ranges_2600%3A3c01%3A%3A.json +0 -0
  255. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_reserved_ips.json +0 -0
  256. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_reserved_ips_types.json +0 -0
  257. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/networking_vlans.json +0 -0
  258. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/nodebalancers.json +0 -0
  259. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/nodebalancers_123456.json +0 -0
  260. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/nodebalancers_123456_configs.json +0 -0
  261. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/nodebalancers_123456_configs_65432_nodes.json +0 -0
  262. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/nodebalancers_12345_configs_4567_rebuild.json +0 -0
  263. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/nodebalancers_12345_firewalls.json +0 -0
  264. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/nodebalancers_12345_stats.json +0 -0
  265. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/nodebalancers_types.json +0 -0
  266. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_buckets.json +0 -0
  267. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_buckets_us-east-1.json +0 -0
  268. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket.json +0 -0
  269. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-acl.json +0 -0
  270. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-list.json +0 -0
  271. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-url.json +0 -0
  272. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_ssl.json +0 -0
  273. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_buckets_us-east_example-bucket_access.json +0 -0
  274. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_clusters.json +0 -0
  275. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_global-quotas.json +0 -0
  276. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_global-quotas_obj-access-keys-per-account.json +0 -0
  277. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_global-quotas_obj-access-keys-per-account_usage.json +0 -0
  278. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_keys.json +0 -0
  279. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_quotas.json +0 -0
  280. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_quotas_obj-objects-us-ord-1.json +0 -0
  281. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_quotas_obj-objects-us-ord-1_usage.json +0 -0
  282. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_transfer.json +0 -0
  283. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/object-storage_types.json +0 -0
  284. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/placement_groups.json +0 -0
  285. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/placement_groups_123.json +0 -0
  286. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/profile.json +0 -0
  287. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/profile_device_123.json +0 -0
  288. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/profile_devices.json +0 -0
  289. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/profile_logins.json +0 -0
  290. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/profile_logins_123.json +0 -0
  291. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/profile_preferences.json +0 -0
  292. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/profile_security-questions.json +0 -0
  293. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/profile_sshkeys.json +0 -0
  294. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/regions.json +0 -0
  295. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/regions_availability.json +0 -0
  296. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/regions_us-east_availability.json +0 -0
  297. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/regions_us-east_vpc-availability.json +0 -0
  298. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/regions_vpc-availability.json +0 -0
  299. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/support_tickets_123.json +0 -0
  300. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/tags.json +0 -0
  301. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/tags_nothing.json +0 -0
  302. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/tags_something.json +0 -0
  303. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/testmappedobj1.json +0 -0
  304. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/volumes.json +0 -0
  305. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/volumes_types.json +0 -0
  306. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/vpcs.json +0 -0
  307. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/vpcs_123456.json +0 -0
  308. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/vpcs_123456_ips.json +0 -0
  309. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/vpcs_123456_subnets.json +0 -0
  310. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/vpcs_123456_subnets_789.json +0 -0
  311. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/vpcs_default-ranges.json +0 -0
  312. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/fixtures/vpcs_ips.json +0 -0
  313. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/__init__.py +0 -0
  314. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/filters/model_filters_test.py +0 -0
  315. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/helpers.py +0 -0
  316. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/linode_client/__init__.py +0 -0
  317. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/linode_client/test_errors.py +0 -0
  318. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/linode_client/test_retry.py +0 -0
  319. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/login_client/test_login_client.py +0 -0
  320. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/__init__.py +0 -0
  321. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/database/helpers.py +0 -0
  322. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/database/test_database.py +0 -0
  323. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/database/test_database_engine_config.py +0 -0
  324. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/domain/test_domain.py +0 -0
  325. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/firewall/test_firewall_templates.py +0 -0
  326. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/linode/interfaces/test_interfaces.py +0 -0
  327. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/lock/__init__.py +0 -0
  328. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/longview/test_longview.py +0 -0
  329. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/maintenance/test_maintenance.py +0 -0
  330. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/monitor/test_monitor.py +0 -0
  331. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/monitor_api/test_monitor_api.py +0 -0
  332. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/object_storage/test_obj.py +0 -0
  333. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/object_storage/test_obj_quotas.py +0 -0
  334. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/profile/test_profile.py +0 -0
  335. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/region/test_region.py +0 -0
  336. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/integration/models/tag/test_tag.py +0 -0
  337. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/__init__.py +0 -0
  338. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/base.py +0 -0
  339. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/errors_test.py +0 -0
  340. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/fixtures.py +0 -0
  341. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/__init__.py +0 -0
  342. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/database_test.py +0 -0
  343. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/image_share_group_test.py +0 -0
  344. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/image_test.py +0 -0
  345. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/linode_test.py +0 -0
  346. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/lke_test.py +0 -0
  347. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/lke_tier_test.py +0 -0
  348. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/lock_test.py +0 -0
  349. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/monitor_api_test.py +0 -0
  350. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/networking_test.py +0 -0
  351. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/object_storage_test.py +0 -0
  352. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/placement_test.py +0 -0
  353. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/polling_test.py +0 -0
  354. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/region_test.py +0 -0
  355. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/groups/vpc_test.py +0 -0
  356. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/login_client_test.py +0 -0
  357. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/account_test.py +0 -0
  358. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/base_test.py +0 -0
  359. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/beta_test.py +0 -0
  360. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/database_test.py +0 -0
  361. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/domain_test.py +0 -0
  362. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/firewall_test.py +0 -0
  363. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/image_share_group_test.py +0 -0
  364. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/image_test.py +0 -0
  365. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/linode_interface_test.py +0 -0
  366. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/lke_test.py +0 -0
  367. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/lock_test.py +0 -0
  368. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/longview_test.py +0 -0
  369. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/mapped_object_test.py +0 -0
  370. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/networking_test.py +0 -0
  371. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/nodebalancers_test.py +0 -0
  372. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/object_storage_test.py +0 -0
  373. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/placement_test.py +0 -0
  374. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/profile_test.py +0 -0
  375. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/property_alias_test.py +0 -0
  376. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/region_test.py +0 -0
  377. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/serializable_test.py +0 -0
  378. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/support_test.py +0 -0
  379. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/tag_test.py +0 -0
  380. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/volume_test.py +0 -0
  381. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/objects/vpc_test.py +0 -0
  382. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/paginated_list_test.py +0 -0
  383. {linode_api4-5.48.0 → linode_api4-5.49.0}/test/unit/util_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: linode_api4
3
- Version: 5.48.0
3
+ Version: 5.49.0
4
4
  Summary: The official Python SDK for Linode API v4
5
5
  Author-email: Linode <devs@linode.com>
6
6
  License: BSD-3-Clause
@@ -34,6 +34,7 @@ Requires-Dist: linode_api4[test-shared]; extra == "unit-test"
34
34
  Requires-Dist: mock>=5.0.0; extra == "unit-test"
35
35
  Provides-Extra: int-test
36
36
  Requires-Dist: linode_api4[test-shared]; extra == "int-test"
37
+ Requires-Dist: cryptography; extra == "int-test"
37
38
  Provides-Extra: lint
38
39
  Requires-Dist: black>=23.1.0; extra == "lint"
39
40
  Requires-Dist: isort>=5.12.0; extra == "lint"
@@ -18,6 +18,7 @@ from linode_api4.objects.base import _flatten_request_body_recursive
18
18
  from linode_api4.objects.filtering import Filter
19
19
  from linode_api4.objects.linode import (
20
20
  Backup,
21
+ InstanceACLPAlertsOptions,
21
22
  InstancePlacementGroupAssignment,
22
23
  InterfaceGeneration,
23
24
  NetworkInterface,
@@ -167,6 +168,9 @@ class LinodeGroup(Group):
167
168
  boot_size: Optional[int] = None,
168
169
  authorized_users: Optional[List[str]] = None,
169
170
  ipv4: Optional[List[str]] = None,
171
+ alerts: Optional[
172
+ Union[Dict[str, Any], InstanceACLPAlertsOptions]
173
+ ] = None,
170
174
  **kwargs,
171
175
  ):
172
176
  """
@@ -359,6 +363,9 @@ class LinodeGroup(Group):
359
363
  :param ipv4: A list of reserved IPv4 addresses to assign to this Instance.
360
364
  NOTE: Reserved IP feature may not currently be available to all users.
361
365
  :type ipv4: list[str]
366
+ :param alerts: ACLP alerts available to define during instance creation.
367
+ This is v4beta only and may not be available to all users.
368
+ :type alerts: dict[str, Any] or InstanceACLPAlertsOptions
362
369
 
363
370
  :returns: A new Instance object
364
371
  :rtype: Instance
@@ -385,6 +392,7 @@ class LinodeGroup(Group):
385
392
  "image": image,
386
393
  "root_pass": root_pass,
387
394
  "authorized_keys": load_and_validate_keys(authorized_keys),
395
+ "alerts": alerts,
388
396
  "authorized_users": authorized_users,
389
397
  # These will automatically be flattened below
390
398
  "firewall_id": firewall,
@@ -22,6 +22,7 @@ from linode_api4.objects.monitor import (
22
22
  AkamaiObjectStorageLogsDestinationDetails,
23
23
  CustomHTTPSLogsDestinationDetails,
24
24
  LogsStreamDetails,
25
+ LogsStreamQuota,
25
26
  )
26
27
 
27
28
  __all__ = [
@@ -625,3 +626,18 @@ class MonitorGroup(Group):
625
626
  )
626
627
 
627
628
  return LogsStream(self.client, result["id"], result)
629
+
630
+ def stream_quotas(self) -> PaginatedList:
631
+ """
632
+ Retrieve quota definitions available for the authenticated account's streams.
633
+
634
+ This reads from ``/monitor/streams/quotas`` on the API v4 endpoint.
635
+
636
+ API Documentation: TODO
637
+
638
+ :returns: A paginated list of stream quota definitions.
639
+ :rtype: PaginatedList[LogsStreamQuota]
640
+ """
641
+ return self.client._get_objects(
642
+ "/monitor/streams/quotas", LogsStreamQuota
643
+ )
@@ -790,6 +790,31 @@ class UpgradeInterfacesResult(JSONObject):
790
790
  )
791
791
 
792
792
 
793
+ @dataclass
794
+ class InstanceAlerts(JSONObject):
795
+ """
796
+ Represents both legacy and ACLP alerts for a Linode Instance.
797
+ """
798
+
799
+ cpu: int = 0
800
+ io: int = 0
801
+ network_in: int = 0
802
+ network_out: int = 0
803
+ transfer_quota: int = 0
804
+ system_alerts: Optional[List[int]] = None
805
+ user_alerts: Optional[List[int]] = None
806
+
807
+
808
+ @dataclass
809
+ class InstanceACLPAlertsOptions(JSONObject):
810
+ """
811
+ Represents the ACLP alerts available to define during instance creation and cloning.
812
+ """
813
+
814
+ system_alerts: Optional[List[int]] = None
815
+ user_alerts: Optional[List[int]] = None
816
+
817
+
793
818
  @dataclass
794
819
  class InstanceBackupSchedule(JSONObject):
795
820
  """
@@ -842,7 +867,7 @@ class Instance(Base):
842
867
  "created": Property(is_datetime=True),
843
868
  "updated": Property(volatile=True, is_datetime=True),
844
869
  "region": Property(slug_relationship=Region),
845
- "alerts": Property(mutable=True),
870
+ "alerts": Property(mutable=True, json_object=InstanceAlerts),
846
871
  "image": Property(slug_relationship=Image),
847
872
  "disks": Property(derived_class=Disk),
848
873
  "configs": Property(derived_class=Config),
@@ -1949,6 +1974,9 @@ class Instance(Base):
1949
1974
  Dict[str, Any],
1950
1975
  int,
1951
1976
  ] = None,
1977
+ alerts: Optional[
1978
+ Union[Dict[str, Any], InstanceACLPAlertsOptions]
1979
+ ] = None,
1952
1980
  ):
1953
1981
  """
1954
1982
  Clones this linode into a new linode or into a new linode in the given region
@@ -1987,6 +2015,10 @@ class Instance(Base):
1987
2015
  :param placement_group: Information about the placement group to create this instance under.
1988
2016
  :type placement_group: Union[InstancePlacementGroupAssignment, PlacementGroup, Dict[str, Any], int]
1989
2017
 
2018
+ :param alerts: ACLP monitor alert definitions associated with the cloned Instance.
2019
+ This is under v4beta and may not be available to all users.
2020
+ :type alerts: dict[str, Any] or InstanceACLPAlertsOptions
2021
+
1990
2022
  :returns: The cloned Instance.
1991
2023
  :rtype: Instance
1992
2024
  """
@@ -2017,6 +2049,7 @@ class Instance(Base):
2017
2049
  "label": label,
2018
2050
  "group": group,
2019
2051
  "with_backups": with_backups,
2052
+ "alerts": alerts,
2020
2053
  "placement_group": _expand_placement_group_assignment(
2021
2054
  placement_group
2022
2055
  ),
@@ -40,6 +40,7 @@ __all__ = [
40
40
  "LogsStreamStatus",
41
41
  "LogsStreamDetails",
42
42
  "LogsStreamDestination",
43
+ "LogsStreamQuota",
43
44
  ]
44
45
 
45
46
 
@@ -276,8 +277,8 @@ class MonitorDashboard(Base):
276
277
  "id": Property(identifier=True),
277
278
  "created": Property(is_datetime=True),
278
279
  "label": Property(),
279
- "service_type": Property(ServiceType),
280
- "type": Property(DashboardType),
280
+ "service_type": Property(),
281
+ "type": Property(),
281
282
  "group_by": Property(),
282
283
  "widgets": Property(json_object=DashboardWidget),
283
284
  "updated": Property(is_datetime=True),
@@ -294,7 +295,7 @@ class MonitorService(Base):
294
295
  api_endpoint = "/monitor/services/{service_type}"
295
296
  id_attribute = "service_type"
296
297
  properties = {
297
- "service_type": Property(ServiceType),
298
+ "service_type": Property(),
298
299
  "label": Property(),
299
300
  "alert": Property(json_object=ServiceAlert),
300
301
  }
@@ -495,7 +496,7 @@ class AlertDefinition(DerivedBase):
495
496
  "entity_ids": Property(mutable=True),
496
497
  "description": Property(mutable=True),
497
498
  "service_class": Property(alias_of="class"),
498
- "scope": Property(AlertScope),
499
+ "scope": Property(),
499
500
  "regions": Property(mutable=True),
500
501
  "entities": Property(json_object=AlertEntities),
501
502
  "channel_ids": Property(mutable=True),
@@ -904,3 +905,16 @@ class LogsStream(Base):
904
905
  "{}/history".format(LogsStream.api_endpoint.format(id=self.id)),
905
906
  LogsStreamHistory,
906
907
  )
908
+
909
+
910
+ @dataclass
911
+ class LogsStreamQuota(JSONObject):
912
+ """
913
+ Represents a quota definition for logs streams.
914
+ """
915
+
916
+ quota_id: str = ""
917
+ quota_name: str = ""
918
+ quota_limit: int = 0
919
+ quota_type: str = ""
920
+ description: str = ""
@@ -68,6 +68,7 @@ class Capability(StrEnum):
68
68
  prefixlists = "Cloud Firewall Prefix Lists"
69
69
  current_prefixlists = "Cloud Firewall Prefix List Current References"
70
70
  gpudirect_rdma = "GPUDirect RDMA"
71
+ premium_nodebalancers = "Premium NodeBalancers"
71
72
 
72
73
 
73
74
  @dataclass
@@ -2,4 +2,4 @@
2
2
  The version of this linode_api4 package.
3
3
  """
4
4
 
5
- __version__ = "v5.48.0"
5
+ __version__ = "v5.49.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: linode_api4
3
- Version: 5.48.0
3
+ Version: 5.49.0
4
4
  Summary: The official Python SDK for Linode API v4
5
5
  Author-email: Linode <devs@linode.com>
6
6
  License: BSD-3-Clause
@@ -34,6 +34,7 @@ Requires-Dist: linode_api4[test-shared]; extra == "unit-test"
34
34
  Requires-Dist: mock>=5.0.0; extra == "unit-test"
35
35
  Provides-Extra: int-test
36
36
  Requires-Dist: linode_api4[test-shared]; extra == "int-test"
37
+ Requires-Dist: cryptography; extra == "int-test"
37
38
  Provides-Extra: lint
38
39
  Requires-Dist: black>=23.1.0; extra == "lint"
39
40
  Requires-Dist: isort>=5.12.0; extra == "lint"
@@ -144,6 +144,7 @@ test/fixtures/images_sharegroups_tokens_abc123_sharegroup_images.json
144
144
  test/fixtures/images_upload.json
145
145
  test/fixtures/linode_instances.json
146
146
  test/fixtures/linode_instances_123_backups.json
147
+ test/fixtures/linode_instances_123_clone.json
147
148
  test/fixtures/linode_instances_123_configs.json
148
149
  test/fixtures/linode_instances_123_configs_456789.json
149
150
  test/fixtures/linode_instances_123_configs_456789_interfaces.json
@@ -211,6 +212,7 @@ test/fixtures/monitor_streams_3.json
211
212
  test/fixtures/monitor_streams_destinations.json
212
213
  test/fixtures/monitor_streams_destinations_1_history.json
213
214
  test/fixtures/monitor_streams_destinations_2.json
215
+ test/fixtures/monitor_streams_quotas.json
214
216
  test/fixtures/network-transfer_prices.json
215
217
  test/fixtures/networking_firewalls.json
216
218
  test/fixtures/networking_firewalls_123.json
@@ -15,6 +15,7 @@ sphinxcontrib-fulltoc>=1.2.0
15
15
 
16
16
  [int-test]
17
17
  linode_api4[test-shared]
18
+ cryptography
18
19
 
19
20
  [lint]
20
21
  black>=23.1.0
@@ -46,6 +46,7 @@ unit-test = [
46
46
  ]
47
47
  int-test = [
48
48
  "linode_api4[test-shared]",
49
+ "cryptography",
49
50
  ]
50
51
  lint = [
51
52
  "black>=23.1.0",
@@ -14,7 +14,9 @@
14
14
  "network_out": 5,
15
15
  "cpu": 90,
16
16
  "transfer_quota": 80,
17
- "io": 5000
17
+ "io": 5000,
18
+ "system_alerts": [123,456],
19
+ "user_alerts": [555]
18
20
  },
19
21
  "label": "linode123",
20
22
  "backups": {
@@ -66,7 +68,9 @@
66
68
  "network_out": 5,
67
69
  "cpu": 90,
68
70
  "transfer_quota": 80,
69
- "io": 5000
71
+ "io": 5000,
72
+ "system_alerts": [123,456],
73
+ "user_alerts": [555]
70
74
  },
71
75
  "label": "linode456",
72
76
  "backups": {
@@ -106,7 +110,9 @@
106
110
  "network_out": 5,
107
111
  "cpu": 90,
108
112
  "transfer_quota": 80,
109
- "io": 5000
113
+ "io": 5000,
114
+ "system_alerts": [123,456],
115
+ "user_alerts": [555]
110
116
  },
111
117
  "group": "test",
112
118
  "hypervisor": "kvm",
@@ -0,0 +1,45 @@
1
+ {
2
+ "id": 124,
3
+ "status": "running",
4
+ "type": "g6-standard-1",
5
+ "alerts": {
6
+ "network_in": 5,
7
+ "network_out": 5,
8
+ "cpu": 90,
9
+ "transfer_quota": 80,
10
+ "io": 5000,
11
+ "system_alerts": [123,456],
12
+ "user_alerts": [555]
13
+ },
14
+ "group": "test",
15
+ "hypervisor": "kvm",
16
+ "label": "linode124",
17
+ "backups": {
18
+ "enabled": true,
19
+ "schedule": {
20
+ "window": "W02",
21
+ "day": "Scheduling"
22
+ }
23
+ },
24
+ "specs": {
25
+ "memory": 2048,
26
+ "disk": 30720,
27
+ "vcpus": 1,
28
+ "transfer": 2000
29
+ },
30
+ "ipv6": "1235:abcd::1234:abcd:89ef:67cd/64",
31
+ "created": "2017-01-01T00:00:00",
32
+ "region": "us-east-1",
33
+ "ipv4": [
34
+ "124.45.67.89"
35
+ ],
36
+ "updated": "2017-01-01T00:00:00",
37
+ "image": "linode/ubuntu24.04",
38
+ "tags": ["something"],
39
+ "host_uuid": "3b3ddd59d9a78bb8de041391075df44de62bfec8",
40
+ "watchdog_enabled": true,
41
+ "disk_encryption": "disabled",
42
+ "lke_cluster_id": null,
43
+ "placement_group": null,
44
+ "interface_generation": "linode"
45
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "data": [
3
+ {
4
+ "quota_id": "aclp_audit_logs_streams",
5
+ "quota_name": "Number of Audit Logs Streams",
6
+ "description": "Current number of audit logs streams per account",
7
+ "quota_limit": 5,
8
+ "quota_type": "logs_streams_aclp_audit_logs_streams"
9
+ },
10
+ {
11
+ "quota_id": "aclp_lke_audit_logs_streams",
12
+ "quota_name": "Number of LKE Audit Logs Streams",
13
+ "description": "Current number of LKE audit logs streams per account",
14
+ "quota_limit": 10,
15
+ "quota_type": "logs_streams_aclp_lke_audit_logs_streams"
16
+ }
17
+ ],
18
+ "results": 2,
19
+ "page": 1,
20
+ "pages": 1
21
+ }
@@ -2,7 +2,6 @@ import ipaddress
2
2
  import logging
3
3
  import os
4
4
  import random
5
- import subprocess
6
5
  import time
7
6
  from test.integration.helpers import (
8
7
  get_test_label,
@@ -14,6 +13,8 @@ from typing import Optional, Set
14
13
 
15
14
  import pytest
16
15
  import requests
16
+ from cryptography.hazmat.primitives import serialization
17
+ from cryptography.hazmat.primitives.asymmetric import ed25519
17
18
  from requests.exceptions import ConnectionError, RequestException
18
19
 
19
20
  from linode_api4 import (
@@ -32,7 +33,7 @@ from linode_api4 import (
32
33
  )
33
34
  from linode_api4.errors import ApiError
34
35
  from linode_api4.linode_client import LinodeClient, MonitorClient
35
- from linode_api4.objects import Region
36
+ from linode_api4.objects import Capability, Region
36
37
 
37
38
  ENV_TOKEN_NAME = "LINODE_TOKEN"
38
39
  ENV_API_URL_NAME = "LINODE_API_URL"
@@ -42,10 +43,10 @@ RUN_LONG_TESTS = "RUN_LONG_TESTS"
42
43
  SKIP_E2E_FIREWALL = "SKIP_E2E_FIREWALL"
43
44
 
44
45
  ALL_ACCOUNT_AVAILABILITIES = {
45
- "Linodes",
46
- "NodeBalancers",
47
- "Block Storage",
48
- "Kubernetes",
46
+ Capability.linodes,
47
+ Capability.nodebalancers,
48
+ Capability.block_storage,
49
+ Capability.lke,
49
50
  }
50
51
 
51
52
  logger = logging.getLogger(__name__)
@@ -61,7 +62,7 @@ def get_api_url():
61
62
 
62
63
  def get_regions(
63
64
  client: LinodeClient,
64
- capabilities: Optional[Set[str]] = None,
65
+ capabilities: Optional[Set[Capability]] = None,
65
66
  site_type: Optional[str] = None,
66
67
  ):
67
68
  region_override = os.environ.get(ENV_REGION_OVERRIDE)
@@ -115,7 +116,9 @@ def get_regions(
115
116
 
116
117
 
117
118
  def get_region(
118
- client: LinodeClient, capabilities: Set[str] = None, site_type: str = "core"
119
+ client: LinodeClient,
120
+ capabilities: Optional[Set[Capability]] = None,
121
+ site_type: str = "core",
119
122
  ):
120
123
  return random.choice(get_regions(client, capabilities, site_type))
121
124
 
@@ -223,7 +226,11 @@ def e2e_test_firewall(test_linode_client):
223
226
  def create_linode(test_linode_client, e2e_test_firewall):
224
227
  client = test_linode_client
225
228
 
226
- region = get_region(client, {"Linodes", "Cloud Firewall"}, site_type="core")
229
+ region = get_region(
230
+ client,
231
+ {Capability.linodes, Capability.firewall},
232
+ site_type="core",
233
+ )
227
234
  label = get_test_label(length=8)
228
235
 
229
236
  linode_instance = client.linode.instance_create(
@@ -244,7 +251,11 @@ def create_linode(test_linode_client, e2e_test_firewall):
244
251
  def create_linode_for_pass_reset(test_linode_client, e2e_test_firewall):
245
252
  client = test_linode_client
246
253
 
247
- region = get_region(client, {"Linodes", "Cloud Firewall"}, site_type="core")
254
+ region = get_region(
255
+ client,
256
+ {Capability.linodes, Capability.firewall},
257
+ site_type="core",
258
+ )
248
259
  label = get_test_label(length=8)
249
260
  password = "aComplex@Password123"
250
261
 
@@ -263,17 +274,28 @@ def create_linode_for_pass_reset(test_linode_client, e2e_test_firewall):
263
274
 
264
275
 
265
276
  @pytest.fixture(scope="session")
266
- def ssh_key_gen(tmp_path_factory):
267
- key_path = tmp_path_factory.mktemp("ssh-key-gen") / "sdk-sshkey"
268
-
269
- subprocess.run(
270
- ["ssh-keygen", "-q", "-t", "rsa", "-f", str(key_path), "-N", ""],
271
- check=True,
277
+ def ssh_key_gen():
278
+ key = ed25519.Ed25519PrivateKey.generate()
279
+
280
+ pub_key = (
281
+ key.public_key()
282
+ .public_bytes(
283
+ encoding=serialization.Encoding.OpenSSH,
284
+ format=serialization.PublicFormat.OpenSSH,
285
+ )
286
+ .decode()
287
+ .rstrip()
288
+ )
289
+ priv_key = (
290
+ key.private_bytes(
291
+ encoding=serialization.Encoding.PEM,
292
+ format=serialization.PrivateFormat.OpenSSH,
293
+ encryption_algorithm=serialization.NoEncryption(),
294
+ )
295
+ .decode()
296
+ .rstrip()
272
297
  )
273
298
 
274
- pub_key = key_path.with_suffix(".pub").read_text().rstrip()
275
- priv_key = key_path.read_text().rstrip()
276
-
277
299
  yield pub_key, priv_key
278
300
 
279
301
 
@@ -337,7 +359,11 @@ def test_domain(test_linode_client):
337
359
  @pytest.fixture(scope="session")
338
360
  def test_volume(test_linode_client):
339
361
  client = test_linode_client
340
- region = get_region(client, {"Linodes", "Cloud Firewall"}, site_type="core")
362
+ region = get_region(
363
+ client,
364
+ {Capability.linodes, Capability.firewall},
365
+ site_type="core",
366
+ )
341
367
  label = get_test_label(length=8)
342
368
 
343
369
  volume = client.volume_create(label=label, region=region)
@@ -356,7 +382,7 @@ def test_volume(test_linode_client):
356
382
  @pytest.fixture(scope="session")
357
383
  def test_volume_with_encryption(test_linode_client):
358
384
  client = test_linode_client
359
- region = get_region(client, {"Block Storage Encryption"})
385
+ region = get_region(client, {Capability.blockstorage_encryption})
360
386
  label = get_test_label(length=8)
361
387
 
362
388
  volume = client.volume_create(
@@ -388,7 +414,8 @@ def test_nodebalancer(test_linode_client):
388
414
  label = get_test_label(length=8)
389
415
 
390
416
  nodebalancer = client.nodebalancer_create(
391
- region=get_region(client, capabilities={"NodeBalancers"}), label=label
417
+ region=get_region(client, capabilities={Capability.nodebalancers}),
418
+ label=label,
392
419
  )
393
420
 
394
421
  yield nodebalancer
@@ -475,11 +502,11 @@ def create_vpc(test_linode_client):
475
502
  region=get_region(
476
503
  test_linode_client,
477
504
  {
478
- "VPCs",
479
- "VPC IPv6 Stack",
480
- "Linode Interfaces",
481
- "Custom VPC IPv4 Ranges",
482
- "Linodes",
505
+ Capability.vpcs,
506
+ Capability.vpc_ipv6_stack,
507
+ Capability.linode_interfaces,
508
+ Capability.vpc_custom_ipv4_ranges,
509
+ Capability.linodes,
483
510
  },
484
511
  ),
485
512
  description="test description",
@@ -497,7 +524,12 @@ def create_vpc_with_rdma_type(test_linode_client):
497
524
 
498
525
  # GPUDirect RDMA capability not available for now
499
526
  region = get_region(
500
- test_linode_client, {"VPCs", "VPC IPv6 Stack", "Linode Interfaces"}
527
+ test_linode_client,
528
+ {
529
+ Capability.vpcs,
530
+ Capability.vpc_ipv6_stack,
531
+ Capability.linode_interfaces,
532
+ },
501
533
  )
502
534
 
503
535
  vpc = client.vpcs.create(
@@ -567,7 +599,10 @@ def create_vpc_with_ipv4(test_linode_client):
567
599
 
568
600
  vpc = client.vpcs.create(
569
601
  label=get_test_label(length=10),
570
- region=get_region(client, {"VPCs", "Custom VPC IPv4 Ranges"}),
602
+ region=get_region(
603
+ client,
604
+ {Capability.vpcs, Capability.vpc_custom_ipv4_ranges},
605
+ ),
571
606
  description="integration test vpc with ipv4",
572
607
  ipv4=[{"range": "10.0.0.0/8"}],
573
608
  )
@@ -587,13 +622,13 @@ def create_multiple_vpcs(test_linode_client):
587
622
 
588
623
  vpc_1 = client.vpcs.create(
589
624
  label,
590
- get_region(test_linode_client, {"VPCs"}),
625
+ get_region(test_linode_client, {Capability.vpcs}),
591
626
  description="test description",
592
627
  )
593
628
 
594
629
  vpc_2 = client.vpcs.create(
595
630
  label_2,
596
- get_region(test_linode_client, {"VPCs"}),
631
+ get_region(test_linode_client, {Capability.vpcs}),
597
632
  description="test description",
598
633
  )
599
634
 
@@ -612,7 +647,7 @@ def create_placement_group(test_linode_client):
612
647
 
613
648
  pg = client.placement.group_create(
614
649
  label,
615
- get_region(test_linode_client, {"Placement Group"}),
650
+ get_region(test_linode_client, {Capability.placement_group}),
616
651
  PlacementGroupType.anti_affinity_local,
617
652
  PlacementGroupPolicy.flexible,
618
653
  )
@@ -652,7 +687,11 @@ def pytest_configure(config):
652
687
  @pytest.fixture(scope="session")
653
688
  def linode_for_vlan_tests(test_linode_client, e2e_test_firewall):
654
689
  client = test_linode_client
655
- region = get_region(client, {"Linodes", "Vlans"}, site_type="core")
690
+ region = get_region(
691
+ client,
692
+ {Capability.linodes, Capability.vlans},
693
+ site_type="core",
694
+ )
656
695
  label = get_test_label(length=8)
657
696
 
658
697
  linode_instance = client.linode.instance_create(
@@ -808,10 +847,80 @@ def test_monitor_client(get_monitor_token_for_db_entities):
808
847
  return client, entity_ids
809
848
 
810
849
 
850
+ def get_alert_channels_list(test_linode_client):
851
+ channels = list(test_linode_client.monitor.alert_channels())
852
+ if len(channels) == 0:
853
+ pytest.fail(
854
+ "No alert channels available for testing. Please create an alert channel and try again."
855
+ )
856
+
857
+ return channels
858
+
859
+
860
+ @pytest.fixture(scope="session")
861
+ def create_alert_service_definition(test_linode_client):
862
+ rule_criteria = {
863
+ "rules": [
864
+ {
865
+ "aggregate_function": "min",
866
+ "dimension_filters": [
867
+ {
868
+ "dimension_label": "node_type",
869
+ "label": "Node Type",
870
+ "operator": "eq",
871
+ "value": "primary",
872
+ }
873
+ ],
874
+ "label": "Memory Usage",
875
+ "metric": "memory_usage",
876
+ "operator": "eq",
877
+ "threshold": 95,
878
+ "unit": "percent",
879
+ }
880
+ ]
881
+ }
882
+ trigger_conditions = {
883
+ "criteria_condition": "ALL",
884
+ "evaluation_period_seconds": 300,
885
+ "polling_interval_seconds": 900,
886
+ "trigger_occurrences": 3,
887
+ }
888
+ alert = test_linode_client.monitor.create_alert_definition(
889
+ service_type="dbaas",
890
+ label=get_test_label() + "-service-definition",
891
+ severity=1,
892
+ description="description",
893
+ channel_ids=[get_alert_channels_list(test_linode_client)[0].id],
894
+ rule_criteria=rule_criteria,
895
+ trigger_conditions=trigger_conditions,
896
+ )
897
+
898
+ yield alert
899
+
900
+ alert.delete()
901
+
902
+
903
+ def get_system_alerts(client: LinodeClient):
904
+ alerts = client.monitor.alert_definitions()
905
+ system_alerts = []
906
+ for alert in alerts.lists[0]:
907
+ if alert.type == "system":
908
+ system_alerts.append(alert)
909
+ if len(system_alerts) == 0:
910
+ raise Exception(
911
+ "No system alert definitions found. Cannot run tests dependent on system alert definitions."
912
+ )
913
+ return system_alerts
914
+
915
+
811
916
  @pytest.fixture
812
917
  def create_reserved_ip(test_linode_client):
813
918
  client = test_linode_client
814
- region = get_region(client, {"Linodes", "Cloud Firewall"}, site_type="core")
919
+ region = get_region(
920
+ client,
921
+ {Capability.linodes, Capability.firewall},
922
+ site_type="core",
923
+ )
815
924
  reserved_ip = client.networking.reserved_ip_create(
816
925
  region=region, tags=["test"]
817
926
  )