linode-api4 5.46.0__tar.gz → 5.47.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 (381) hide show
  1. {linode_api4-5.46.0/linode_api4.egg-info → linode_api4-5.47.0}/PKG-INFO +1 -1
  2. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/vpc.py +8 -0
  3. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/login_client.py +47 -2
  4. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/linode.py +12 -0
  5. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/linode_interfaces.py +82 -0
  6. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/region.py +1 -0
  7. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/vpc.py +12 -1
  8. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/version.py +1 -1
  9. {linode_api4-5.46.0 → linode_api4-5.47.0/linode_api4.egg-info}/PKG-INFO +1 -1
  10. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4.egg-info/SOURCES.txt +1 -0
  11. linode_api4-5.47.0/test/fixtures/linode_instances_124_interfaces_999.json +27 -0
  12. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/vpcs.json +1 -0
  13. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/vpcs_123456.json +1 -0
  14. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/vpcs_123456_subnets.json +1 -0
  15. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/vpcs_123456_subnets_789.json +1 -0
  16. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/conftest.py +39 -2
  17. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/account/test_account.py +7 -2
  18. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/image/test_image.py +1 -3
  19. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/linode/interfaces/test_interfaces.py +122 -1
  20. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/linode/test_linode.py +82 -39
  21. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/networking/test_networking.py +2 -2
  22. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/sharegroups/test_sharegroups.py +5 -3
  23. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/vpc/test_vpc.py +31 -0
  24. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/linode_test.py +35 -0
  25. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/login_client_test.py +18 -0
  26. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/linode_interface_test.py +86 -0
  27. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/linode_test.py +16 -0
  28. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/vpc_test.py +41 -0
  29. {linode_api4-5.46.0 → linode_api4-5.47.0}/LICENSE +0 -0
  30. {linode_api4-5.46.0 → linode_api4-5.47.0}/MANIFEST.in +0 -0
  31. {linode_api4-5.46.0 → linode_api4-5.47.0}/README.rst +0 -0
  32. {linode_api4-5.46.0 → linode_api4-5.47.0}/examples/install-on-linode/app.py +0 -0
  33. {linode_api4-5.46.0 → linode_api4-5.47.0}/examples/install-on-linode/make_stackscript.py +0 -0
  34. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/__init__.py +0 -0
  35. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/common.py +0 -0
  36. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/errors.py +0 -0
  37. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/__init__.py +0 -0
  38. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/account.py +0 -0
  39. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/beta.py +0 -0
  40. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/database.py +0 -0
  41. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/domain.py +0 -0
  42. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/group.py +0 -0
  43. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/image.py +0 -0
  44. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/image_share_group.py +0 -0
  45. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/linode.py +0 -0
  46. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/lke.py +0 -0
  47. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/lke_tier.py +0 -0
  48. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/lock.py +0 -0
  49. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/longview.py +0 -0
  50. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/maintenance.py +0 -0
  51. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/monitor.py +0 -0
  52. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/monitor_api.py +0 -0
  53. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/networking.py +0 -0
  54. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/nodebalancer.py +0 -0
  55. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/object_storage.py +0 -0
  56. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/placement.py +0 -0
  57. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/polling.py +0 -0
  58. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/profile.py +0 -0
  59. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/region.py +0 -0
  60. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/support.py +0 -0
  61. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/tag.py +0 -0
  62. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/groups/volume.py +0 -0
  63. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/linode_client.py +0 -0
  64. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/__init__.py +0 -0
  65. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/account.py +0 -0
  66. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/base.py +0 -0
  67. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/beta.py +0 -0
  68. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/database.py +0 -0
  69. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/dbase.py +0 -0
  70. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/domain.py +0 -0
  71. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/filtering.py +0 -0
  72. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/image.py +0 -0
  73. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/image_share_group.py +0 -0
  74. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/lke.py +0 -0
  75. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/lock.py +0 -0
  76. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/longview.py +0 -0
  77. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/monitor.py +0 -0
  78. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/monitor_api.py +0 -0
  79. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/networking.py +0 -0
  80. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/nodebalancer.py +0 -0
  81. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/object_storage.py +0 -0
  82. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/placement.py +0 -0
  83. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/profile.py +0 -0
  84. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/serializable.py +0 -0
  85. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/support.py +0 -0
  86. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/tag.py +0 -0
  87. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/objects/volume.py +0 -0
  88. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/paginated_list.py +0 -0
  89. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/polling.py +0 -0
  90. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4/util.py +0 -0
  91. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4.egg-info/dependency_links.txt +0 -0
  92. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4.egg-info/requires.txt +0 -0
  93. {linode_api4-5.46.0 → linode_api4-5.47.0}/linode_api4.egg-info/top_level.txt +0 -0
  94. {linode_api4-5.46.0 → linode_api4-5.47.0}/pyproject.toml +0 -0
  95. {linode_api4-5.46.0 → linode_api4-5.47.0}/setup.cfg +0 -0
  96. {linode_api4-5.46.0 → linode_api4-5.47.0}/setup.py +0 -0
  97. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/__init__.py +0 -0
  98. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account.json +0 -0
  99. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_availability.json +0 -0
  100. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_availability_us-east.json +0 -0
  101. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_betas.json +0 -0
  102. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_betas_cool.json +0 -0
  103. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_child-accounts.json +0 -0
  104. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_child-accounts_123456.json +0 -0
  105. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_child-accounts_123456_token.json +0 -0
  106. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_events_123.json +0 -0
  107. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_invoices.json +0 -0
  108. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_invoices_123.json +0 -0
  109. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_invoices_123456_items.json +0 -0
  110. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_logins.json +0 -0
  111. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_logins_123.json +0 -0
  112. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_maintenance.json +0 -0
  113. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_notifications.json +0 -0
  114. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_oauth-clients_2737bf16b39ab5d7b4a1.json +0 -0
  115. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_payment-method_123.json +0 -0
  116. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_payment-methods.json +0 -0
  117. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_payments.json +0 -0
  118. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_promo-codes.json +0 -0
  119. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_service-transfers.json +0 -0
  120. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_service-transfers_12345.json +0 -0
  121. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_settings.json +0 -0
  122. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_transfer.json +0 -0
  123. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/account_users_test-user.json +0 -0
  124. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/betas.json +0 -0
  125. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/betas_active.json +0 -0
  126. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_engines.json +0 -0
  127. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_instances.json +0 -0
  128. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_mysql_config.json +0 -0
  129. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_mysql_instances.json +0 -0
  130. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_mysql_instances_123_credentials.json +0 -0
  131. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_mysql_instances_123_credentials_reset.json +0 -0
  132. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_mysql_instances_123_patch.json +0 -0
  133. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_mysql_instances_123_resume.json +0 -0
  134. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_mysql_instances_123_ssl.json +0 -0
  135. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_mysql_instances_123_suspend.json +0 -0
  136. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_postgresql_config.json +0 -0
  137. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_postgresql_instances.json +0 -0
  138. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_postgresql_instances_123_credentials.json +0 -0
  139. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_postgresql_instances_123_credentials_reset.json +0 -0
  140. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_postgresql_instances_123_patch.json +0 -0
  141. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_postgresql_instances_123_resume.json +0 -0
  142. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_postgresql_instances_123_ssl.json +0 -0
  143. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_postgresql_instances_123_suspend.json +0 -0
  144. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/databases_types.json +0 -0
  145. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/domains.json +0 -0
  146. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/domains_12345_clone.json +0 -0
  147. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/domains_12345_records.json +0 -0
  148. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/domains_12345_zone-file.json +0 -0
  149. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/domains_import.json +0 -0
  150. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images.json +0 -0
  151. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_private_1234_sharegroups.json +0 -0
  152. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_private_123_regions.json +0 -0
  153. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_private_1337.json +0 -0
  154. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_sharegroups.json +0 -0
  155. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_sharegroups_1234.json +0 -0
  156. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_sharegroups_1234_images.json +0 -0
  157. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_sharegroups_1234_images_shared_1.json +0 -0
  158. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_sharegroups_1234_members.json +0 -0
  159. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_sharegroups_1234_members_abc123.json +0 -0
  160. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_sharegroups_tokens.json +0 -0
  161. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_sharegroups_tokens_abc123.json +0 -0
  162. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_sharegroups_tokens_abc123_sharegroup.json +0 -0
  163. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_sharegroups_tokens_abc123_sharegroup_images.json +0 -0
  164. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/images_upload.json +0 -0
  165. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances.json +0 -0
  166. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_backups.json +0 -0
  167. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_configs.json +0 -0
  168. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_configs_456789.json +0 -0
  169. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_configs_456789_interfaces.json +0 -0
  170. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_123.json +0 -0
  171. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_123_put.json +0 -0
  172. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_321.json +0 -0
  173. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_456.json +0 -0
  174. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_disks.json +0 -0
  175. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_disks_12345_clone.json +0 -0
  176. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_firewalls.json +0 -0
  177. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_ips.json +0 -0
  178. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_nodebalancers.json +0 -0
  179. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_transfer.json +0 -0
  180. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_transfer_2023_4.json +0 -0
  181. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_123_volumes.json +0 -0
  182. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_124.json +0 -0
  183. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_124_interfaces.json +0 -0
  184. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_124_interfaces_123.json +0 -0
  185. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_124_interfaces_123_firewalls.json +0 -0
  186. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_124_interfaces_456.json +0 -0
  187. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_124_interfaces_789.json +0 -0
  188. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_124_interfaces_settings.json +0 -0
  189. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_instances_124_upgrade-interfaces.json +0 -0
  190. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_stackscripts_10079.json +0 -0
  191. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_types.json +0 -0
  192. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/linode_types_g6-nanode-1.json +0 -0
  193. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/lke_clusters.json +0 -0
  194. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/lke_clusters_18881.json +0 -0
  195. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/lke_clusters_18881_control__plane__acl.json +0 -0
  196. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/lke_clusters_18881_dashboard.json +0 -0
  197. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/lke_clusters_18881_nodes_123456.json +0 -0
  198. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/lke_clusters_18881_pools_456.json +0 -0
  199. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/lke_clusters_18882.json +0 -0
  200. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/lke_clusters_18882_pools_789.json +0 -0
  201. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/lke_tiers_standard_versions.json +0 -0
  202. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/lke_types.json +0 -0
  203. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/lke_versions.json +0 -0
  204. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/locks.json +0 -0
  205. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/locks_1.json +0 -0
  206. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/longview_clients.json +0 -0
  207. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/longview_plan.json +0 -0
  208. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/longview_subscriptions.json +0 -0
  209. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/maintenance_policies.json +0 -0
  210. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/mongodb.json +0 -0
  211. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_alert-channels.json +0 -0
  212. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_alert-definitions.json +0 -0
  213. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_dashboards.json +0 -0
  214. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_dashboards_1.json +0 -0
  215. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_services.json +0 -0
  216. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_services_dbaas.json +0 -0
  217. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_services_dbaas_alert-definitions.json +0 -0
  218. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_services_dbaas_alert-definitions_12345.json +0 -0
  219. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_services_dbaas_alert-definitions_12345_clone.json +0 -0
  220. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_services_dbaas_alert-definitions_12345_entities.json +0 -0
  221. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_services_dbaas_dashboards.json +0 -0
  222. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_services_dbaas_metric-definitions.json +0 -0
  223. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_services_dbaas_metrics.json +0 -0
  224. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_services_dbaas_token.json +0 -0
  225. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_services_linode_token.json +0 -0
  226. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_streams.json +0 -0
  227. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_streams_1_history.json +0 -0
  228. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_streams_2.json +0 -0
  229. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_streams_3.json +0 -0
  230. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_streams_destinations.json +0 -0
  231. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_streams_destinations_1_history.json +0 -0
  232. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/monitor_streams_destinations_2.json +0 -0
  233. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/network-transfer_prices.json +0 -0
  234. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls.json +0 -0
  235. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls_123.json +0 -0
  236. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls_123_devices.json +0 -0
  237. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls_123_devices_123.json +0 -0
  238. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls_123_devices_456.json +0 -0
  239. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls_123_history.json +0 -0
  240. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls_123_history_rules_2.json +0 -0
  241. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls_123_rules.json +0 -0
  242. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls_settings.json +0 -0
  243. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls_templates.json +0 -0
  244. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls_templates_public.json +0 -0
  245. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_firewalls_templates_vpc.json +0 -0
  246. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_ips_127.0.0.1.json +0 -0
  247. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_ipv6_pools.json +0 -0
  248. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_ipv6_ranges.json +0 -0
  249. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_ipv6_ranges_2600%3A3c01%3A%3A.json +0 -0
  250. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_reserved_ips.json +0 -0
  251. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_reserved_ips_types.json +0 -0
  252. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/networking_vlans.json +0 -0
  253. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/nodebalancers.json +0 -0
  254. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/nodebalancers_123456.json +0 -0
  255. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/nodebalancers_123456_configs.json +0 -0
  256. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/nodebalancers_123456_configs_65432_nodes.json +0 -0
  257. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/nodebalancers_12345_configs_4567_rebuild.json +0 -0
  258. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/nodebalancers_12345_firewalls.json +0 -0
  259. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/nodebalancers_12345_stats.json +0 -0
  260. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/nodebalancers_types.json +0 -0
  261. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_buckets.json +0 -0
  262. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_buckets_us-east-1.json +0 -0
  263. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket.json +0 -0
  264. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-acl.json +0 -0
  265. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-list.json +0 -0
  266. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-url.json +0 -0
  267. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_ssl.json +0 -0
  268. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_buckets_us-east_example-bucket_access.json +0 -0
  269. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_clusters.json +0 -0
  270. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_global-quotas.json +0 -0
  271. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_global-quotas_obj-access-keys-per-account.json +0 -0
  272. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_global-quotas_obj-access-keys-per-account_usage.json +0 -0
  273. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_keys.json +0 -0
  274. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_quotas.json +0 -0
  275. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_quotas_obj-objects-us-ord-1.json +0 -0
  276. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_quotas_obj-objects-us-ord-1_usage.json +0 -0
  277. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_transfer.json +0 -0
  278. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/object-storage_types.json +0 -0
  279. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/placement_groups.json +0 -0
  280. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/placement_groups_123.json +0 -0
  281. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/profile.json +0 -0
  282. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/profile_device_123.json +0 -0
  283. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/profile_devices.json +0 -0
  284. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/profile_logins.json +0 -0
  285. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/profile_logins_123.json +0 -0
  286. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/profile_preferences.json +0 -0
  287. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/profile_security-questions.json +0 -0
  288. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/profile_sshkeys.json +0 -0
  289. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/regions.json +0 -0
  290. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/regions_availability.json +0 -0
  291. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/regions_us-east_availability.json +0 -0
  292. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/regions_us-east_vpc-availability.json +0 -0
  293. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/regions_vpc-availability.json +0 -0
  294. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/support_tickets_123.json +0 -0
  295. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/tags.json +0 -0
  296. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/tags_nothing.json +0 -0
  297. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/tags_something.json +0 -0
  298. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/testmappedobj1.json +0 -0
  299. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/volumes.json +0 -0
  300. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/volumes_types.json +0 -0
  301. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/vpcs_123456_ips.json +0 -0
  302. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/vpcs_default-ranges.json +0 -0
  303. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/fixtures/vpcs_ips.json +0 -0
  304. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/__init__.py +0 -0
  305. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/filters/fixtures.py +0 -0
  306. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/filters/model_filters_test.py +0 -0
  307. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/helpers.py +0 -0
  308. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/linode_client/__init__.py +0 -0
  309. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/linode_client/test_errors.py +0 -0
  310. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/linode_client/test_linode_client.py +0 -0
  311. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/linode_client/test_retry.py +0 -0
  312. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/login_client/test_login_client.py +0 -0
  313. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/__init__.py +0 -0
  314. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/database/helpers.py +0 -0
  315. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/database/test_database.py +0 -0
  316. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/database/test_database_engine_config.py +0 -0
  317. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/domain/test_domain.py +0 -0
  318. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/firewall/test_firewall.py +0 -0
  319. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/firewall/test_firewall_templates.py +0 -0
  320. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/lke/test_lke.py +0 -0
  321. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/lock/__init__.py +0 -0
  322. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/lock/test_lock.py +0 -0
  323. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/longview/test_longview.py +0 -0
  324. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/maintenance/test_maintenance.py +0 -0
  325. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/monitor/test_monitor.py +0 -0
  326. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/monitor/test_monitor_logs.py +0 -0
  327. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/monitor_api/test_monitor_api.py +0 -0
  328. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/nodebalancer/test_nodebalancer.py +0 -0
  329. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/object_storage/test_obj.py +0 -0
  330. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/object_storage/test_obj_quotas.py +0 -0
  331. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/placement/test_placement.py +0 -0
  332. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/profile/test_profile.py +0 -0
  333. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/region/test_region.py +0 -0
  334. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/tag/test_tag.py +0 -0
  335. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/volume/test_blockstorage.py +0 -0
  336. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/integration/models/volume/test_volume.py +0 -0
  337. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/__init__.py +0 -0
  338. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/base.py +0 -0
  339. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/errors_test.py +0 -0
  340. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/fixtures.py +0 -0
  341. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/__init__.py +0 -0
  342. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/database_test.py +0 -0
  343. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/image_share_group_test.py +0 -0
  344. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/image_test.py +0 -0
  345. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/lke_test.py +0 -0
  346. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/lke_tier_test.py +0 -0
  347. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/lock_test.py +0 -0
  348. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/monitor_api_test.py +0 -0
  349. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/networking_test.py +0 -0
  350. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/object_storage_test.py +0 -0
  351. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/placement_test.py +0 -0
  352. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/polling_test.py +0 -0
  353. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/region_test.py +0 -0
  354. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/groups/vpc_test.py +0 -0
  355. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/linode_client_test.py +0 -0
  356. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/account_test.py +0 -0
  357. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/base_test.py +0 -0
  358. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/beta_test.py +0 -0
  359. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/database_test.py +0 -0
  360. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/domain_test.py +0 -0
  361. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/firewall_test.py +0 -0
  362. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/image_share_group_test.py +0 -0
  363. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/image_test.py +0 -0
  364. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/lke_test.py +0 -0
  365. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/lock_test.py +0 -0
  366. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/longview_test.py +0 -0
  367. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/mapped_object_test.py +0 -0
  368. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/monitor_test.py +0 -0
  369. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/networking_test.py +0 -0
  370. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/nodebalancers_test.py +0 -0
  371. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/object_storage_test.py +0 -0
  372. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/placement_test.py +0 -0
  373. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/profile_test.py +0 -0
  374. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/property_alias_test.py +0 -0
  375. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/region_test.py +0 -0
  376. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/serializable_test.py +0 -0
  377. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/support_test.py +0 -0
  378. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/tag_test.py +0 -0
  379. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/objects/volume_test.py +0 -0
  380. {linode_api4-5.46.0 → linode_api4-5.47.0}/test/unit/paginated_list_test.py +0 -0
  381. {linode_api4-5.46.0 → linode_api4-5.47.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.46.0
3
+ Version: 5.47.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
@@ -11,6 +11,7 @@ from linode_api4.objects import (
11
11
  VPCIPv6RangeOptions,
12
12
  )
13
13
  from linode_api4.objects.base import _flatten_request_body_recursive
14
+ from linode_api4.objects.vpc import VPCType
14
15
  from linode_api4.paginated_list import PaginatedList
15
16
  from linode_api4.util import drop_null_keys
16
17
 
@@ -44,6 +45,7 @@ class VPCGroup(Group):
44
45
  subnets: Optional[List[Dict[str, Any]]] = None,
45
46
  ipv6: Optional[List[Union[VPCIPv6RangeOptions, Dict[str, Any]]]] = None,
46
47
  ipv4: Optional[List[Union[VPCIPv4RangeOptions, Dict[str, Any]]]] = None,
48
+ vpc_type: Optional[Union[VPCType, str]] = None,
47
49
  **kwargs,
48
50
  ) -> VPC:
49
51
  """
@@ -61,6 +63,11 @@ class VPCGroup(Group):
61
63
  :type subnets: List[Dict[str, Any]]
62
64
  :param ipv6: The IPv6 address ranges for this VPC.
63
65
  :type ipv6: List[Union[VPCIPv6RangeOptions, Dict[str, Any]]]
66
+ :param vpc_type: The type of VPC to create. Defaults to ``regular`` on
67
+ the API side. Set to ``rdma`` to create a GPUDirect
68
+ RDMA VPC (requires the ``GPUDirect RDMA`` account
69
+ capability).
70
+ :type vpc_type: Optional[Union[VPCType, str]]
64
71
  :param ipv4: The IPv4 address ranges for this VPC. Note that IPv4 VPCs may not currently be available to all users.
65
72
  :type ipv4: List[Union[VPCIPv4RangeOptions, Dict[str, Any]]]
66
73
 
@@ -74,6 +81,7 @@ class VPCGroup(Group):
74
81
  "ipv4": ipv4,
75
82
  "ipv6": ipv6,
76
83
  "subnets": subnets,
84
+ "vpc_type": vpc_type,
77
85
  }
78
86
 
79
87
  if subnets is not None and len(subnets) > 0:
@@ -30,10 +30,11 @@ class OAuthScopes:
30
30
  Lists of OAuth Scopes are accepted when calling the :any:`generate_login_url`
31
31
  method of the :any:`LinodeLoginClient`.
32
32
 
33
- All contained enumerations of OAuth Scopes have two levels, "read_only" and
33
+ Most contained enumerations of OAuth Scopes have two levels, "read_only" and
34
34
  "read_write". "read_only" access grants you the ability to get resources and
35
35
  of that type, but not to change, create, or delete them. "read_write" access
36
- allows to full access to resources of the requested type. In the above
36
+ allows to full access to resources of the requested type. :any:`OAuthScopes.VPC`
37
+ is the exception and exposes only "read_write" and "all". In the above
37
38
  example, you are requesting access to view, modify, create, and delete
38
39
  Linodes, and to view Domains.
39
40
  """
@@ -254,6 +255,47 @@ class OAuthScopes:
254
255
  return "longview:*"
255
256
  return "longview:{}".format(self.name)
256
257
 
258
+ class Images(Enum):
259
+ """
260
+ Access to Images
261
+ """
262
+
263
+ read_only = 0
264
+ read_write = 1
265
+ all = 2
266
+
267
+ def __repr__(self):
268
+ if self.name == "all":
269
+ return "images:*"
270
+ return "images:{}".format(self.name)
271
+
272
+ class Databases(Enum):
273
+ """
274
+ Access to Managed Databases
275
+ """
276
+
277
+ read_only = 0
278
+ read_write = 1
279
+ all = 2
280
+
281
+ def __repr__(self):
282
+ if self.name == "all":
283
+ return "databases:*"
284
+ return "databases:{}".format(self.name)
285
+
286
+ class VPC(Enum):
287
+ """
288
+ Access to VPCs and subnets
289
+ """
290
+
291
+ read_write = 1
292
+ all = 2
293
+
294
+ def __repr__(self):
295
+ if self.name == "all":
296
+ return "vpc:*"
297
+ return "vpc:{}".format(self.name)
298
+
257
299
  _scope_families = {
258
300
  "linodes": Linodes,
259
301
  "domains": Domains,
@@ -271,6 +313,9 @@ class OAuthScopes:
271
313
  "object_storage": ObjectStorage,
272
314
  "nodebalancers": NodeBalancers,
273
315
  "longview": Longview,
316
+ "images": Images,
317
+ "databases": Databases,
318
+ "vpc": VPC,
274
319
  }
275
320
 
276
321
  @staticmethod
@@ -2115,10 +2115,22 @@ class Instance(Base):
2115
2115
  :param vpc: The VPC-specific configuration of the new interface.
2116
2116
  If set, the new instance will be a VPC interface.
2117
2117
 
2118
+ .. note::
2119
+ RDMA VPC interfaces (``rdma_vpc``) cannot be added via this
2120
+ endpoint. They may only be specified at instance creation time via
2121
+ :func:`linode_api4.LinodeGroup.instance_create`.
2122
+
2118
2123
  :returns: The newly created Linode Interface.
2119
2124
  :rtype: LinodeInterface
2120
2125
  """
2121
2126
 
2127
+ if kwargs.get("rdma_vpc") is not None:
2128
+ raise ValueError(
2129
+ "RDMA VPC interfaces (rdma_vpc) cannot be added via "
2130
+ "interface_create(). They may only be specified at instance "
2131
+ "creation time via LinodeGroup.instance_create()."
2132
+ )
2133
+
2122
2134
  params = {
2123
2135
  "firewall_id": firewall,
2124
2136
  "default_route": default_route,
@@ -187,6 +187,47 @@ class LinodeInterfaceVLANOptions(JSONObject):
187
187
  ipam_address: Optional[str] = None
188
188
 
189
189
 
190
+ @dataclass
191
+ class LinodeInterfaceRDMAVPCIPv4AddressOptions(JSONObject):
192
+ """
193
+ Options accepted for a single address when creating or updating the IPv4
194
+ configuration of an RDMA VPC Linode Interface.
195
+
196
+ Only one address is supported per RDMA VPC interface, and it must be
197
+ marked as primary.
198
+ """
199
+
200
+ address: Optional[str] = None
201
+ primary: Optional[bool] = None
202
+
203
+
204
+ @dataclass
205
+ class LinodeInterfaceRDMAVPCIPv4Options(JSONObject):
206
+ """
207
+ Options accepted when creating or updating the IPv4 configuration of an
208
+ RDMA VPC Linode Interface.
209
+
210
+ The ``addresses`` list MUST contain exactly one element. If omitted, the
211
+ API defaults to a single primary ``auto`` address.
212
+ """
213
+
214
+ addresses: Optional[List[LinodeInterfaceRDMAVPCIPv4AddressOptions]] = None
215
+
216
+
217
+ @dataclass
218
+ class LinodeInterfaceRDMAVPCOptions(JSONObject):
219
+ """
220
+ RDMA-VPC-exclusive options accepted when creating or updating a Linode
221
+ Interface.
222
+
223
+ Used for GPUDirect RDMA interfaces. Default routes and NAT 1:1 addresses
224
+ are not supported on RDMA VPC interfaces.
225
+ """
226
+
227
+ subnet_id: int = 0
228
+ ipv4: Optional[LinodeInterfaceRDMAVPCIPv4Options] = None
229
+
230
+
190
231
  @dataclass
191
232
  class LinodeInterfaceOptions(JSONObject):
192
233
  """
@@ -204,6 +245,7 @@ class LinodeInterfaceOptions(JSONObject):
204
245
  vpc: Optional[LinodeInterfaceVPCOptions] = None
205
246
  public: Optional[LinodeInterfacePublicOptions] = None
206
247
  vlan: Optional[LinodeInterfaceVLANOptions] = None
248
+ rdma_vpc: Optional[LinodeInterfaceRDMAVPCOptions] = None
207
249
 
208
250
 
209
251
  # Interface GET Response
@@ -409,6 +451,45 @@ class LinodeInterfaceVLAN(JSONObject):
409
451
  ipam_address: Optional[str] = None
410
452
 
411
453
 
454
+ @dataclass
455
+ class LinodeInterfaceRDMAVPCIPv4Address(JSONObject):
456
+ """
457
+ A single address under the IPv4 configuration of an RDMA VPC Linode Interface.
458
+ """
459
+
460
+ put_class = LinodeInterfaceRDMAVPCIPv4AddressOptions
461
+
462
+ address: str = ""
463
+ primary: bool = False
464
+
465
+
466
+ @dataclass
467
+ class LinodeInterfaceRDMAVPCIPv4(JSONObject):
468
+ """
469
+ The IPv4 configuration of an RDMA VPC Linode Interface.
470
+ """
471
+
472
+ put_class = LinodeInterfaceRDMAVPCIPv4Options
473
+
474
+ addresses: List[LinodeInterfaceRDMAVPCIPv4Address] = field(
475
+ default_factory=list
476
+ )
477
+
478
+
479
+ @dataclass
480
+ class LinodeInterfaceRDMAVPC(JSONObject):
481
+ """
482
+ RDMA VPC-specific configuration field for a Linode Interface.
483
+ """
484
+
485
+ put_class = LinodeInterfaceRDMAVPCOptions
486
+
487
+ vpc_id: int = 0
488
+ subnet_id: int = 0
489
+
490
+ ipv4: Optional[LinodeInterfaceRDMAVPCIPv4] = None
491
+
492
+
412
493
  class LinodeInterface(DerivedBase):
413
494
  """
414
495
  A Linode's network interface.
@@ -449,6 +530,7 @@ class LinodeInterface(DerivedBase):
449
530
  "public": Property(mutable=True, json_object=LinodeInterfacePublic),
450
531
  "vlan": Property(mutable=True, json_object=LinodeInterfaceVLAN),
451
532
  "vpc": Property(mutable=True, json_object=LinodeInterfaceVPC),
533
+ "rdma_vpc": Property(mutable=True, json_object=LinodeInterfaceRDMAVPC),
452
534
  }
453
535
 
454
536
  def firewalls(self, *filters) -> List[Firewall]:
@@ -67,6 +67,7 @@ class Capability(StrEnum):
67
67
  ruleset = "Cloud Firewall Rule Set"
68
68
  prefixlists = "Cloud Firewall Prefix Lists"
69
69
  current_prefixlists = "Cloud Firewall Prefix List Current References"
70
+ gpudirect_rdma = "GPUDirect RDMA"
70
71
 
71
72
 
72
73
  @dataclass
@@ -5,11 +5,20 @@ from linode_api4.errors import UnexpectedResponseError
5
5
  from linode_api4.objects import Base, DerivedBase, Property, Region
6
6
  from linode_api4.objects.base import _flatten_request_body_recursive
7
7
  from linode_api4.objects.networking import VPCIPAddress
8
- from linode_api4.objects.serializable import JSONObject
8
+ from linode_api4.objects.serializable import JSONObject, StrEnum
9
9
  from linode_api4.paginated_list import PaginatedList
10
10
  from linode_api4.util import drop_null_keys
11
11
 
12
12
 
13
+ class VPCType(StrEnum):
14
+ """
15
+ VPCType represents the supported VPC types.
16
+ """
17
+
18
+ regular = "regular"
19
+ rdma = "rdma"
20
+
21
+
13
22
  @dataclass
14
23
  class VPCIPv4DefaultRange(JSONObject):
15
24
  """
@@ -119,6 +128,7 @@ class VPCSubnet(DerivedBase):
119
128
  "ipv6": Property(json_object=VPCSubnetIPv6Range, unordered=True),
120
129
  "linodes": Property(json_object=VPCSubnetLinode, unordered=True),
121
130
  "databases": Property(json_object=VPCSubnetDatabase, unordered=True),
131
+ "vpc_type": Property(),
122
132
  "created": Property(is_datetime=True),
123
133
  "updated": Property(is_datetime=True),
124
134
  }
@@ -144,6 +154,7 @@ class VPC(Base):
144
154
  ),
145
155
  "ipv6": Property(json_object=VPCIPv6Range, unordered=True),
146
156
  "subnets": Property(derived_class=VPCSubnet),
157
+ "vpc_type": Property(),
147
158
  "created": Property(is_datetime=True),
148
159
  "updated": Property(is_datetime=True),
149
160
  }
@@ -2,4 +2,4 @@
2
2
  The version of this linode_api4 package.
3
3
  """
4
4
 
5
- __version__ = "v5.46.0"
5
+ __version__ = "v5.47.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: linode_api4
3
- Version: 5.46.0
3
+ Version: 5.47.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
@@ -165,6 +165,7 @@ test/fixtures/linode_instances_124_interfaces_123.json
165
165
  test/fixtures/linode_instances_124_interfaces_123_firewalls.json
166
166
  test/fixtures/linode_instances_124_interfaces_456.json
167
167
  test/fixtures/linode_instances_124_interfaces_789.json
168
+ test/fixtures/linode_instances_124_interfaces_999.json
168
169
  test/fixtures/linode_instances_124_interfaces_settings.json
169
170
  test/fixtures/linode_instances_124_upgrade-interfaces.json
170
171
  test/fixtures/linode_stackscripts_10079.json
@@ -0,0 +1,27 @@
1
+ {
2
+ "id": 999,
3
+ "mac_address": "22:00:f2:9e:d3:48",
4
+ "created": "2026-03-12T09:54:34",
5
+ "updated": "2026-03-12T09:54:35",
6
+ "default_route": {
7
+ "ipv4": false,
8
+ "ipv6": false
9
+ },
10
+ "version": 1,
11
+ "public": null,
12
+ "vpc": null,
13
+ "vlan": null,
14
+ "rdma_vpc": {
15
+ "vpc_id": 7,
16
+ "subnet_id": 8,
17
+ "ipv4": {
18
+ "addresses": [
19
+ {
20
+ "address": "10.0.0.2",
21
+ "primary": true
22
+ }
23
+ ]
24
+ }
25
+ }
26
+ }
27
+
@@ -5,6 +5,7 @@
5
5
  "id": 123456,
6
6
  "description": "A very real VPC.",
7
7
  "region": "us-southeast",
8
+ "vpc_type": "regular",
8
9
  "ipv4": [
9
10
  {
10
11
  "range": "10.0.0.0/8"
@@ -3,6 +3,7 @@
3
3
  "id": 123456,
4
4
  "description": "A very real VPC.",
5
5
  "region": "us-southeast",
6
+ "vpc_type": "regular",
6
7
  "ipv4": [
7
8
  {
8
9
  "range": "10.0.0.0/8"
@@ -35,6 +35,7 @@
35
35
  ]
36
36
  }
37
37
  ],
38
+ "vpc_type": "regular",
38
39
  "created": "2018-01-01T00:01:01",
39
40
  "updated": "2018-01-01T00:01:01"
40
41
  }
@@ -7,6 +7,7 @@
7
7
  "range": "fd71:1140:a9d0::/52"
8
8
  }
9
9
  ],
10
+ "vpc_type": "regular",
10
11
  "linodes": [
11
12
  {
12
13
  "id": 12345,
@@ -286,6 +286,7 @@ def test_linode_client():
286
286
  token,
287
287
  base_url=api_url,
288
288
  ca_path=api_ca_file,
289
+ retry_statuses=[504],
289
290
  )
290
291
  return client
291
292
 
@@ -316,7 +317,7 @@ def test_domain(test_linode_client):
316
317
  domain.invalidate()
317
318
  return domain.status == "active"
318
319
 
319
- wait_for_condition(3, 30, get_domain_status)
320
+ wait_for_condition(3, 45, get_domain_status)
320
321
 
321
322
  # Create a SRV record
322
323
  domain.record_create(
@@ -467,7 +468,6 @@ def test_oauth_client(test_linode_client):
467
468
  @pytest.fixture(scope="session")
468
469
  def create_vpc(test_linode_client):
469
470
  client = test_linode_client
470
-
471
471
  label = get_test_label(length=10)
472
472
 
473
473
  vpc = client.vpcs.create(
@@ -479,6 +479,7 @@ def create_vpc(test_linode_client):
479
479
  "VPC IPv6 Stack",
480
480
  "Linode Interfaces",
481
481
  "Custom VPC IPv4 Ranges",
482
+ "Linodes",
482
483
  },
483
484
  ),
484
485
  description="test description",
@@ -489,6 +490,27 @@ def create_vpc(test_linode_client):
489
490
  vpc.delete()
490
491
 
491
492
 
493
+ @pytest.fixture
494
+ def create_vpc_with_rdma_type(test_linode_client):
495
+ client = test_linode_client
496
+ label = get_test_label(length=10)
497
+
498
+ # GPUDirect RDMA capability not available for now
499
+ region = get_region(
500
+ test_linode_client, {"VPCs", "VPC IPv6 Stack", "Linode Interfaces"}
501
+ )
502
+
503
+ vpc = client.vpcs.create(
504
+ label=label,
505
+ region=region,
506
+ description="test description",
507
+ vpc_type="rdma",
508
+ )
509
+ yield vpc
510
+
511
+ vpc.delete()
512
+
513
+
492
514
  @pytest.fixture(scope="session")
493
515
  def create_vpc_with_subnet(test_linode_client, create_vpc):
494
516
  subnet = create_vpc.subnet_create(
@@ -524,6 +546,21 @@ def create_vpc_with_subnet_and_linode(
524
546
  instance.delete()
525
547
 
526
548
 
549
+ @pytest.fixture
550
+ def create_vpc_with_subnet_and_rdma_type(create_vpc_with_rdma_type):
551
+ vpc_rdma = create_vpc_with_rdma_type
552
+ label = get_test_label(length=10)
553
+
554
+ subnet_rdma = vpc_rdma.subnet_create(
555
+ label=label,
556
+ ipv4="10.0.0.0/24",
557
+ )
558
+
559
+ yield vpc_rdma, subnet_rdma
560
+
561
+ subnet_rdma.delete()
562
+
563
+
527
564
  @pytest.fixture
528
565
  def create_vpc_with_ipv4(test_linode_client):
529
566
  client = test_linode_client
@@ -39,6 +39,9 @@ def test_get_account(test_linode_client):
39
39
  assert account_get.tax_id == account.tax_id
40
40
 
41
41
 
42
+ @pytest.mark.skip(
43
+ reason="Test fails for E2E test user with [504] Server Timeout due to enormous amount of logins. More details: ARB-7420"
44
+ )
42
45
  def test_get_login(test_linode_client):
43
46
  client = test_linode_client
44
47
  login = retry_sending_request(3, client.load, Login(client, "", {}), "")
@@ -91,6 +94,8 @@ def test_update_maintenance_policy(test_linode_client):
91
94
  assert updated.maintenance_policy == original_policy
92
95
 
93
96
 
97
+ # May fail due to multiple events occurring on the test user in the same time
98
+ @pytest.mark.flaky(reruns=2, reruns_delay=5)
94
99
  @pytest.mark.smoke
95
100
  def test_latest_get_event(test_linode_client, e2e_test_firewall):
96
101
  client = test_linode_client
@@ -115,7 +120,7 @@ def test_latest_get_event(test_linode_client, e2e_test_firewall):
115
120
  wait_for_condition(5, 150, get_linode_status)
116
121
 
117
122
  events = client.load(Event, "")
118
- latest_events = events._raw_json.get("data")[:15]
123
+ latest_events = events._raw_json.get("data")[:50]
119
124
 
120
125
  linode.delete()
121
126
 
@@ -123,7 +128,7 @@ def test_latest_get_event(test_linode_client, e2e_test_firewall):
123
128
  if label == event["entity"]["label"]:
124
129
  break
125
130
  else:
126
- assert False, f"Linode '{label}' not found in the last 15 events"
131
+ assert False, f"Linode '{label}' not found in the last 50 events"
127
132
 
128
133
 
129
134
  def test_get_user(test_linode_client):
@@ -43,12 +43,10 @@ def image_upload_url(test_linode_client):
43
43
 
44
44
  region = get_image_upload_regions(test_linode_client)[0]
45
45
 
46
- test_linode_client.image_create_upload(
46
+ image, _ = test_linode_client.image_create_upload(
47
47
  label, region.id, "integration test image upload"
48
48
  )
49
49
 
50
- image = test_linode_client.images()[0]
51
-
52
50
  yield image
53
51
 
54
52
  image.delete()
@@ -1,6 +1,7 @@
1
1
  import copy
2
2
  import ipaddress
3
- from test.integration.helpers import get_test_label
3
+ import os
4
+ from test.integration.helpers import get_test_label, wait_for_condition
4
5
 
5
6
  import pytest
6
7
 
@@ -16,6 +17,9 @@ from linode_api4 import (
16
17
  LinodeInterfacePublicIPv6Options,
17
18
  LinodeInterfacePublicIPv6RangeOptions,
18
19
  LinodeInterfacePublicOptions,
20
+ LinodeInterfaceRDMAVPCIPv4AddressOptions,
21
+ LinodeInterfaceRDMAVPCIPv4Options,
22
+ LinodeInterfaceRDMAVPCOptions,
19
23
  LinodeInterfaceVLANOptions,
20
24
  LinodeInterfaceVPCIPv4AddressOptions,
21
25
  LinodeInterfaceVPCIPv4Options,
@@ -43,6 +47,22 @@ def build_interface_public_ipv4(firewall, ip_address):
43
47
  )
44
48
 
45
49
 
50
+ def build_interface_rdma_vpc_ipv4(subnet_id: int):
51
+ return LinodeInterfaceOptions(
52
+ firewall_id=-1,
53
+ rdma_vpc=LinodeInterfaceRDMAVPCOptions(
54
+ subnet_id=subnet_id,
55
+ ipv4=LinodeInterfaceRDMAVPCIPv4Options(
56
+ addresses=[
57
+ LinodeInterfaceRDMAVPCIPv4AddressOptions(
58
+ address="auto", primary=True
59
+ )
60
+ ]
61
+ ),
62
+ ),
63
+ )
64
+
65
+
46
66
  def create_linode_with_legacy_config(
47
67
  client, ip_address, label, firewall, authorized_key
48
68
  ):
@@ -75,6 +95,22 @@ def create_linode_with_standard_interfaces(
75
95
  return linode
76
96
 
77
97
 
98
+ def create_multiple_rdma_interfaces(amount: int, subnet_id: int):
99
+ """
100
+ Creates multiple VPC RDMA interfaces that may be needed for RDMA Linode instance
101
+
102
+ Note:
103
+ At least 8 separate VPC RDMA interfaces need to be created for a single RDMA linode instance
104
+ """
105
+ interfaces = list()
106
+
107
+ for _ in range(amount):
108
+ rdma_iface = build_interface_rdma_vpc_ipv4(subnet_id)
109
+ interfaces.append(rdma_iface)
110
+
111
+ return interfaces
112
+
113
+
78
114
  def test_linode_create_with_linode_interfaces(
79
115
  create_vpc_with_subnet,
80
116
  linode_with_linode_interfaces,
@@ -458,3 +494,88 @@ def test_linode_interfaces_with_reserved_ips(
458
494
  assert reserved_ips_list[0].reserved == True
459
495
  assert reserved_ips_list[0].linode_id is None
460
496
  assert reserved_ips_list[0].assigned_entity is None
497
+
498
+
499
+ @pytest.mark.skipif(
500
+ os.getenv("RUN_RDMA_TESTS", "").strip().lower() not in {"yes", "true"},
501
+ reason="Linode with RDMA interfaces requires manual infra changes; set RUN_RDMA_TESTS=yes to enable",
502
+ )
503
+ def test_linode_interfaces_with_rdma_vpc_type(
504
+ request,
505
+ test_linode_client,
506
+ ):
507
+ client = test_linode_client
508
+ region = "us-rno-1"
509
+
510
+ # Create a regular VPC with a subnet in us-rno-1
511
+ vpc = client.vpcs.create(
512
+ label=get_test_label(length=10),
513
+ region=region,
514
+ description="test description",
515
+ ipv6=[{"range": "auto"}],
516
+ )
517
+ request.addfinalizer(vpc.delete)
518
+ subnet = vpc.subnet_create(
519
+ label="test-subnet",
520
+ ipv4="10.0.0.0/24",
521
+ ipv6=[{"range": "auto"}],
522
+ )
523
+ request.addfinalizer(subnet.delete)
524
+
525
+ # Create an RDMA VPC with a subnet in us-rno-1
526
+ vpc_rdma = client.vpcs.create(
527
+ label=get_test_label(length=10),
528
+ region=region,
529
+ description="test description",
530
+ vpc_type="rdma",
531
+ )
532
+ request.addfinalizer(vpc_rdma.delete)
533
+ subnet_rdma = vpc_rdma.subnet_create(
534
+ label=get_test_label(length=10),
535
+ ipv4="10.0.0.0/24",
536
+ )
537
+ request.addfinalizer(subnet_rdma.delete)
538
+
539
+ # Include RDMA VPC interfaces
540
+ multi_ifaces = create_multiple_rdma_interfaces(8, subnet_rdma.id)
541
+
542
+ # Include (at least one) regular interface
543
+ multi_ifaces.append(
544
+ LinodeInterfaceOptions(
545
+ firewall_id=-1,
546
+ default_route=LinodeInterfaceDefaultRouteOptions(
547
+ ipv4=True,
548
+ ),
549
+ vpc=LinodeInterfaceVPCOptions(
550
+ subnet_id=subnet.id,
551
+ ipv4=LinodeInterfaceVPCIPv4Options(
552
+ addresses=[
553
+ LinodeInterfaceVPCIPv4AddressOptions(
554
+ address="auto",
555
+ primary=True,
556
+ )
557
+ ],
558
+ ),
559
+ ),
560
+ ),
561
+ )
562
+
563
+ instance = client.linode.instance_create(
564
+ label="python-test-rdma-" + get_test_label(),
565
+ root_pass="aComplex@Password123",
566
+ image="linode/ubuntu24.04",
567
+ region=vpc.region,
568
+ ltype="g3-gpu-rtxpro6000-blackwell-rdma-8",
569
+ interface_generation=InterfaceGeneration.LINODE,
570
+ interfaces=multi_ifaces,
571
+ booted=False,
572
+ )
573
+ request.addfinalizer(instance.delete)
574
+
575
+ def get_linode_status():
576
+ instance.invalidate()
577
+ return instance.status == "offline"
578
+
579
+ wait_for_condition(5, 180, get_linode_status)
580
+
581
+ assert len(instance.linode_interfaces) == len(multi_ifaces)