linode-api4 5.26.0__tar.gz → 5.28.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.
- {linode_api4-5.26.0/linode_api4.egg-info → linode_api4-5.28.0}/PKG-INFO +7 -7
- {linode_api4-5.26.0 → linode_api4-5.28.0}/README.rst +5 -5
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/account.py +6 -6
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/database.py +125 -9
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/lke.py +12 -3
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/networking.py +27 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/object_storage.py +40 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/database.py +26 -4
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/linode.py +18 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/lke.py +33 -11
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/networking.py +14 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/object_storage.py +52 -8
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/version.py +1 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0/linode_api4.egg-info}/PKG-INFO +7 -7
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4.egg-info/SOURCES.txt +9 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_types.json +32 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/lke_clusters.json +2 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/lke_clusters_18881.json +2 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/object-storage_buckets_us-east-1.json +3 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket.json +3 -1
- linode_api4-5.28.0/test/fixtures/object-storage_buckets_us-east_example-bucket_access.json +6 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/conftest.py +20 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/linode_client/test_linode_client.py +3 -3
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/account/test_account.py +1 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/database/test_database.py +119 -243
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/firewall/test_firewall.py +1 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/image/test_image.py +2 -2
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/linode/test_linode.py +49 -8
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/lke/test_lke.py +72 -2
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/networking/test_networking.py +61 -2
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/nodebalancer/test_nodebalancer.py +1 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/object_storage/test_obj.py +68 -7
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/volume/test_volume.py +1 -1
- linode_api4-5.28.0/test/unit/groups/database_test.py +192 -0
- linode_api4-5.28.0/test/unit/groups/image_test.py +37 -0
- linode_api4-5.28.0/test/unit/groups/linode_test.py +118 -0
- linode_api4-5.28.0/test/unit/groups/lke_test.py +43 -0
- linode_api4-5.28.0/test/unit/groups/placement_test.py +68 -0
- {linode_api4-5.26.0/test/unit/objects → linode_api4-5.28.0/test/unit/groups}/region_test.py +0 -36
- linode_api4-5.28.0/test/unit/groups/vpc_test.py +107 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/database_test.py +17 -6
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/image_test.py +2 -32
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/linode_test.py +16 -111
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/lke_test.py +73 -30
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/networking_test.py +26 -1
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/object_storage_test.py +27 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/placement_test.py +0 -42
- linode_api4-5.28.0/test/unit/objects/region_test.py +44 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/vpc_test.py +1 -50
- {linode_api4-5.26.0 → linode_api4-5.28.0}/LICENSE +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/MANIFEST.in +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/examples/install-on-linode/app.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/examples/install-on-linode/make_stackscript.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/__init__.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/common.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/errors.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/__init__.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/beta.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/domain.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/group.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/image.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/linode.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/longview.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/nodebalancer.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/placement.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/polling.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/profile.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/region.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/support.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/tag.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/volume.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/groups/vpc.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/linode_client.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/login_client.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/__init__.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/account.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/base.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/beta.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/dbase.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/domain.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/filtering.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/image.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/longview.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/nodebalancer.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/placement.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/profile.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/region.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/serializable.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/support.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/tag.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/volume.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/objects/vpc.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/paginated_list.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/polling.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4/util.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4.egg-info/dependency_links.txt +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4.egg-info/requires.txt +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/linode_api4.egg-info/top_level.txt +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/pyproject.toml +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/setup.cfg +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/setup.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/__init__.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_availability.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_availability_us-east.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_betas.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_betas_cool.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_child-accounts.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_child-accounts_123456.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_child-accounts_123456_token.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_events_123.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_invoices.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_invoices_123.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_invoices_123456_items.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_logins.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_logins_123.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_maintenance.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_notifications.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_oauth-clients_2737bf16b39ab5d7b4a1.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_payment-method_123.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_payment-methods.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_payments.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_promo-codes.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_service-transfers.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_service-transfers_12345.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_settings.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_transfer.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/account_users_test-user.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/betas.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/betas_active.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_engines.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_instances.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_mysql_instances.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_mysql_instances_123_backups.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_mysql_instances_123_backups_456_restore.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_mysql_instances_123_credentials.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_mysql_instances_123_credentials_reset.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_mysql_instances_123_patch.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_mysql_instances_123_ssl.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_postgresql_instances.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_postgresql_instances_123_backups.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_postgresql_instances_123_backups_456_restore.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_postgresql_instances_123_credentials.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_postgresql_instances_123_credentials_reset.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_postgresql_instances_123_patch.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_postgresql_instances_123_ssl.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/databases_types.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/domains.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/domains_12345_clone.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/domains_12345_records.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/domains_12345_zone-file.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/domains_import.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/images.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/images_private_123_regions.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/images_private_1337.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/images_upload.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_backups.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_configs.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_configs_456789.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_configs_456789_interfaces.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_123.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_123_put.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_321.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_456.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_disks.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_disks_12345_clone.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_firewalls.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_ips.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_nodebalancers.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_transfer.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_transfer_2023_4.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_instances_123_volumes.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_stackscripts_10079.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/linode_types_g6-nanode-1.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/lke_clusters_18881_control__plane__acl.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/lke_clusters_18881_dashboard.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/lke_clusters_18881_nodes_123456.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/lke_clusters_18881_pools_456.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/lke_types.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/lke_versions.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/longview_clients.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/longview_plan.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/longview_subscriptions.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/mongodb.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/network-transfer_prices.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/networking_firewalls.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/networking_firewalls_123.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/networking_firewalls_123_devices.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/networking_firewalls_123_devices_123.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/networking_firewalls_123_rules.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/networking_ips_127.0.0.1.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/networking_ipv6_pools.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/networking_ipv6_ranges.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/networking_ipv6_ranges_2600%3A3c01%3A%3A.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/networking_vlans.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/nodebalancers.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/nodebalancers_123456.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/nodebalancers_123456_configs.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/nodebalancers_123456_configs_65432_nodes.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/nodebalancers_12345_configs_4567_rebuild.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/nodebalancers_12345_firewalls.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/nodebalancers_12345_stats.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/nodebalancers_types.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/object-storage_buckets.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-acl.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-list.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-url.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_ssl.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/object-storage_clusters.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/object-storage_keys.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/object-storage_transfer.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/placement_groups.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/placement_groups_123.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/profile.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/profile_device_123.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/profile_devices.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/profile_logins.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/profile_logins_123.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/profile_preferences.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/profile_security-questions.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/profile_sshkeys.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/regions.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/regions_availability.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/regions_us-east_availability.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/support_tickets_123.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/tags.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/tags_nothing.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/tags_something.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/testmappedobj1.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/volumes.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/volumes_types.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/vpcs.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/vpcs_123456.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/vpcs_123456_ips.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/vpcs_123456_subnets.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/vpcs_123456_subnets_789.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/fixtures/vpcs_ips.json +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/__init__.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/helpers.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/linode_client/__init__.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/linode_client/test_errors.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/linode_client/test_retry.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/login_client/test_login_client.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/__init__.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/domain/test_domain.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/longview/test_longview.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/placement/test_placement.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/profile/test_profile.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/tag/test_tag.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/integration/models/vpc/test_vpc.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/__init__.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/base.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/errors_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/fixtures.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/groups/__init__.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/groups/object_storage_test.py +0 -0
- {linode_api4-5.26.0/test/unit/objects → linode_api4-5.28.0/test/unit/groups}/polling_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/linode_client_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/login_client_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/account_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/beta_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/domain_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/firewall_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/longview_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/mapped_object_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/nodebalancers_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/profile_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/serializable_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/support_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/tag_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/objects/volume_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/paginated_list_test.py +0 -0
- {linode_api4-5.26.0 → linode_api4-5.28.0}/test/unit/util_test.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: linode_api4
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.28.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
|
|
@@ -198,16 +198,16 @@ Running the tests
|
|
|
198
198
|
^^^^^^^^^^^^^^^^^
|
|
199
199
|
Run the tests locally using the make command. Run the entire test suite using command below::
|
|
200
200
|
|
|
201
|
-
make
|
|
201
|
+
make test-int
|
|
202
202
|
|
|
203
203
|
To run a specific package/suite, use the environment variable `TEST_SUITE` using directory names in `integration/...` folder ::
|
|
204
204
|
|
|
205
|
-
make TEST_SUITE="account"
|
|
206
|
-
make TEST_SUITE="linode_client"
|
|
205
|
+
make TEST_SUITE="account" test-int // Runs tests in `integration/models/account` directory
|
|
206
|
+
make TEST_SUITE="linode_client" test-int // Runs tests in `integration/linode_client` directory
|
|
207
207
|
|
|
208
|
-
Lastly to run a specific test case use environment variable `TEST_CASE` with `
|
|
208
|
+
Lastly to run a specific test case use environment variable `TEST_CASE` with `test-int` command::
|
|
209
209
|
|
|
210
|
-
make TEST_CASE=test_get_domain_record
|
|
210
|
+
make TEST_CASE=test_get_domain_record test-int
|
|
211
211
|
|
|
212
212
|
Documentation
|
|
213
213
|
-------------
|
|
@@ -148,16 +148,16 @@ Running the tests
|
|
|
148
148
|
^^^^^^^^^^^^^^^^^
|
|
149
149
|
Run the tests locally using the make command. Run the entire test suite using command below::
|
|
150
150
|
|
|
151
|
-
make
|
|
151
|
+
make test-int
|
|
152
152
|
|
|
153
153
|
To run a specific package/suite, use the environment variable `TEST_SUITE` using directory names in `integration/...` folder ::
|
|
154
154
|
|
|
155
|
-
make TEST_SUITE="account"
|
|
156
|
-
make TEST_SUITE="linode_client"
|
|
155
|
+
make TEST_SUITE="account" test-int // Runs tests in `integration/models/account` directory
|
|
156
|
+
make TEST_SUITE="linode_client" test-int // Runs tests in `integration/linode_client` directory
|
|
157
157
|
|
|
158
|
-
Lastly to run a specific test case use environment variable `TEST_CASE` with `
|
|
158
|
+
Lastly to run a specific test case use environment variable `TEST_CASE` with `test-int` command::
|
|
159
159
|
|
|
160
|
-
make TEST_CASE=test_get_domain_record
|
|
160
|
+
make TEST_CASE=test_get_domain_record test-int
|
|
161
161
|
|
|
162
162
|
Documentation
|
|
163
163
|
-------------
|
|
@@ -101,7 +101,7 @@ class AccountGroup(Group):
|
|
|
101
101
|
s = AccountSettings(self.client, result["managed"], result)
|
|
102
102
|
return s
|
|
103
103
|
|
|
104
|
-
def invoices(self):
|
|
104
|
+
def invoices(self, *filters):
|
|
105
105
|
"""
|
|
106
106
|
Returns Invoices issued to this account.
|
|
107
107
|
|
|
@@ -112,9 +112,9 @@ class AccountGroup(Group):
|
|
|
112
112
|
:returns: Invoices issued to this account.
|
|
113
113
|
:rtype: PaginatedList of Invoice
|
|
114
114
|
"""
|
|
115
|
-
return self.client._get_and_filter(Invoice)
|
|
115
|
+
return self.client._get_and_filter(Invoice, *filters)
|
|
116
116
|
|
|
117
|
-
def payments(self):
|
|
117
|
+
def payments(self, *filters):
|
|
118
118
|
"""
|
|
119
119
|
Returns a list of Payments made on this account.
|
|
120
120
|
|
|
@@ -123,7 +123,7 @@ class AccountGroup(Group):
|
|
|
123
123
|
:returns: A list of payments made on this account.
|
|
124
124
|
:rtype: PaginatedList of Payment
|
|
125
125
|
"""
|
|
126
|
-
return self.client._get_and_filter(Payment)
|
|
126
|
+
return self.client._get_and_filter(Payment, *filters)
|
|
127
127
|
|
|
128
128
|
def oauth_clients(self, *filters):
|
|
129
129
|
"""
|
|
@@ -337,7 +337,7 @@ class AccountGroup(Group):
|
|
|
337
337
|
json=resp,
|
|
338
338
|
)
|
|
339
339
|
|
|
340
|
-
def service_transfers(self):
|
|
340
|
+
def service_transfers(self, *filters):
|
|
341
341
|
"""
|
|
342
342
|
Returns a collection of all created and accepted Service Transfers for this account, regardless of the user that created or accepted the transfer.
|
|
343
343
|
|
|
@@ -347,7 +347,7 @@ class AccountGroup(Group):
|
|
|
347
347
|
:rtype: PaginatedList of ServiceTransfer
|
|
348
348
|
"""
|
|
349
349
|
|
|
350
|
-
return self.client._get_and_filter(ServiceTransfer)
|
|
350
|
+
return self.client._get_and_filter(ServiceTransfer, *filters)
|
|
351
351
|
|
|
352
352
|
def service_transfer_create(self, entities):
|
|
353
353
|
"""
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
from linode_api4.errors import UnexpectedResponseError
|
|
2
2
|
from linode_api4.groups import Group
|
|
3
3
|
from linode_api4.objects import (
|
|
4
|
-
Base,
|
|
5
4
|
Database,
|
|
6
5
|
DatabaseEngine,
|
|
7
6
|
DatabaseType,
|
|
8
7
|
MySQLDatabase,
|
|
9
8
|
PostgreSQLDatabase,
|
|
9
|
+
drop_null_keys,
|
|
10
10
|
)
|
|
11
|
+
from linode_api4.objects.base import _flatten_request_body_recursive
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
class DatabaseGroup(Group):
|
|
@@ -126,13 +127,71 @@ class DatabaseGroup(Group):
|
|
|
126
127
|
|
|
127
128
|
params = {
|
|
128
129
|
"label": label,
|
|
129
|
-
"region": region
|
|
130
|
-
"engine": engine
|
|
131
|
-
"type": ltype
|
|
130
|
+
"region": region,
|
|
131
|
+
"engine": engine,
|
|
132
|
+
"type": ltype,
|
|
132
133
|
}
|
|
133
134
|
params.update(kwargs)
|
|
134
135
|
|
|
135
|
-
result = self.client.post(
|
|
136
|
+
result = self.client.post(
|
|
137
|
+
"/databases/mysql/instances",
|
|
138
|
+
data=_flatten_request_body_recursive(drop_null_keys(params)),
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
if "id" not in result:
|
|
142
|
+
raise UnexpectedResponseError(
|
|
143
|
+
"Unexpected response when creating MySQL Database", json=result
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
d = MySQLDatabase(self.client, result["id"], result)
|
|
147
|
+
return d
|
|
148
|
+
|
|
149
|
+
def mysql_fork(self, source, restore_time, **kwargs):
|
|
150
|
+
"""
|
|
151
|
+
Forks an :any:`MySQLDatabase` on this account with
|
|
152
|
+
the given restore_time. label, region, engine, and ltype are optional.
|
|
153
|
+
For example::
|
|
154
|
+
|
|
155
|
+
client = LinodeClient(TOKEN)
|
|
156
|
+
|
|
157
|
+
db_to_fork = client.database.mysql_instances()[0]
|
|
158
|
+
|
|
159
|
+
new_fork = client.database.mysql_fork(
|
|
160
|
+
db_to_fork.id,
|
|
161
|
+
db_to_fork.updated,
|
|
162
|
+
label="new-fresh-label"
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
API Documentation: https://techdocs.akamai.com/linode-api/reference/post-databases-mysql-instances
|
|
166
|
+
|
|
167
|
+
:param source: The id of the source database
|
|
168
|
+
:type source: int
|
|
169
|
+
:param restore_time: The timestamp for the fork
|
|
170
|
+
:type restore_time: datetime
|
|
171
|
+
:param label: The name for this cluster
|
|
172
|
+
:type label: str
|
|
173
|
+
:param region: The region to deploy this cluster in
|
|
174
|
+
:type region: str | Region
|
|
175
|
+
:param engine: The engine to deploy this cluster with
|
|
176
|
+
:type engine: str | Engine
|
|
177
|
+
:param ltype: The Linode Type to use for this cluster
|
|
178
|
+
:type ltype: str | Type
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
params = {
|
|
182
|
+
"fork": {
|
|
183
|
+
"source": source,
|
|
184
|
+
"restore_time": restore_time.strftime("%Y-%m-%dT%H:%M:%S"),
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if "ltype" in kwargs:
|
|
188
|
+
params["type"] = kwargs["ltype"]
|
|
189
|
+
params.update(kwargs)
|
|
190
|
+
|
|
191
|
+
result = self.client.post(
|
|
192
|
+
"/databases/mysql/instances",
|
|
193
|
+
data=_flatten_request_body_recursive(drop_null_keys(params)),
|
|
194
|
+
)
|
|
136
195
|
|
|
137
196
|
if "id" not in result:
|
|
138
197
|
raise UnexpectedResponseError(
|
|
@@ -191,14 +250,71 @@ class DatabaseGroup(Group):
|
|
|
191
250
|
|
|
192
251
|
params = {
|
|
193
252
|
"label": label,
|
|
194
|
-
"region": region
|
|
195
|
-
"engine": engine
|
|
196
|
-
"type": ltype
|
|
253
|
+
"region": region,
|
|
254
|
+
"engine": engine,
|
|
255
|
+
"type": ltype,
|
|
256
|
+
}
|
|
257
|
+
params.update(kwargs)
|
|
258
|
+
|
|
259
|
+
result = self.client.post(
|
|
260
|
+
"/databases/postgresql/instances",
|
|
261
|
+
data=_flatten_request_body_recursive(drop_null_keys(params)),
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
if "id" not in result:
|
|
265
|
+
raise UnexpectedResponseError(
|
|
266
|
+
"Unexpected response when creating PostgreSQL Database",
|
|
267
|
+
json=result,
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
d = PostgreSQLDatabase(self.client, result["id"], result)
|
|
271
|
+
return d
|
|
272
|
+
|
|
273
|
+
def postgresql_fork(self, source, restore_time, **kwargs):
|
|
274
|
+
"""
|
|
275
|
+
Forks an :any:`PostgreSQLDatabase` on this account with
|
|
276
|
+
the given restore_time. label, region, engine, and ltype are optional.
|
|
277
|
+
For example::
|
|
278
|
+
|
|
279
|
+
client = LinodeClient(TOKEN)
|
|
280
|
+
|
|
281
|
+
db_to_fork = client.database.postgresql_instances()[0]
|
|
282
|
+
|
|
283
|
+
new_fork = client.database.postgresql_fork(
|
|
284
|
+
db_to_fork.id,
|
|
285
|
+
db_to_fork.updated,
|
|
286
|
+
label="new-fresh-label"
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
API Documentation: https://techdocs.akamai.com/linode-api/reference/post-databases-postgresql-instances
|
|
290
|
+
|
|
291
|
+
:param source: The id of the source database
|
|
292
|
+
:type source: int
|
|
293
|
+
:param restore_time: The timestamp for the fork
|
|
294
|
+
:type restore_time: datetime
|
|
295
|
+
:param label: The name for this cluster
|
|
296
|
+
:type label: str
|
|
297
|
+
:param region: The region to deploy this cluster in
|
|
298
|
+
:type region: str | Region
|
|
299
|
+
:param engine: The engine to deploy this cluster with
|
|
300
|
+
:type engine: str | Engine
|
|
301
|
+
:param ltype: The Linode Type to use for this cluster
|
|
302
|
+
:type ltype: str | Type
|
|
303
|
+
"""
|
|
304
|
+
|
|
305
|
+
params = {
|
|
306
|
+
"fork": {
|
|
307
|
+
"source": source,
|
|
308
|
+
"restore_time": restore_time.strftime("%Y-%m-%dT%H:%M:%S"),
|
|
309
|
+
}
|
|
197
310
|
}
|
|
311
|
+
if "ltype" in kwargs:
|
|
312
|
+
params["type"] = kwargs["ltype"]
|
|
198
313
|
params.update(kwargs)
|
|
199
314
|
|
|
200
315
|
result = self.client.post(
|
|
201
|
-
"/databases/postgresql/instances",
|
|
316
|
+
"/databases/postgresql/instances",
|
|
317
|
+
data=_flatten_request_body_recursive(drop_null_keys(params)),
|
|
202
318
|
)
|
|
203
319
|
|
|
204
320
|
if "id" not in result:
|
|
@@ -66,6 +66,7 @@ class LKEGroup(Group):
|
|
|
66
66
|
control_plane: Union[
|
|
67
67
|
LKEClusterControlPlaneOptions, Dict[str, Any]
|
|
68
68
|
] = None,
|
|
69
|
+
apl_enabled: bool = False,
|
|
69
70
|
**kwargs,
|
|
70
71
|
):
|
|
71
72
|
"""
|
|
@@ -100,8 +101,12 @@ class LKEGroup(Group):
|
|
|
100
101
|
formatted dicts.
|
|
101
102
|
:param kube_version: The version of Kubernetes to use
|
|
102
103
|
:type kube_version: KubeVersion or str
|
|
103
|
-
:param control_plane:
|
|
104
|
-
:type control_plane:
|
|
104
|
+
:param control_plane: The control plane configuration of this LKE cluster.
|
|
105
|
+
:type control_plane: Dict[str, Any] or LKEClusterControlPlaneRequest
|
|
106
|
+
:param apl_enabled: Whether this cluster should use APL.
|
|
107
|
+
NOTE: This endpoint is in beta and may only
|
|
108
|
+
function if base_url is set to `https://api.linode.com/v4beta`.
|
|
109
|
+
:type apl_enabled: bool
|
|
105
110
|
:param kwargs: Any other arguments to pass along to the API. See the API
|
|
106
111
|
docs for possible values.
|
|
107
112
|
|
|
@@ -120,9 +125,13 @@ class LKEGroup(Group):
|
|
|
120
125
|
}
|
|
121
126
|
params.update(kwargs)
|
|
122
127
|
|
|
128
|
+
# Prevent errors for users without access to APL
|
|
129
|
+
if apl_enabled:
|
|
130
|
+
params["apl_enabled"] = apl_enabled
|
|
131
|
+
|
|
123
132
|
result = self.client.post(
|
|
124
133
|
"/lke/clusters",
|
|
125
|
-
data=_flatten_request_body_recursive(
|
|
134
|
+
data=drop_null_keys(_flatten_request_body_recursive(params)),
|
|
126
135
|
)
|
|
127
136
|
|
|
128
137
|
if "id" not in result:
|
|
@@ -367,3 +367,30 @@ class NetworkingGroup(Group):
|
|
|
367
367
|
return self.client._get_and_filter(
|
|
368
368
|
NetworkTransferPrice, *filters, endpoint="/network-transfer/prices"
|
|
369
369
|
)
|
|
370
|
+
|
|
371
|
+
def delete_vlan(self, vlan, region):
|
|
372
|
+
"""
|
|
373
|
+
This operation deletes a VLAN.
|
|
374
|
+
You can't delete a VLAN if it's still attached to a Linode.
|
|
375
|
+
|
|
376
|
+
API Documentation: https://techdocs.akamai.com/linode-api/reference/delete-vlan
|
|
377
|
+
|
|
378
|
+
:param vlan: The label of the VLAN to be deleted.
|
|
379
|
+
:type vlan: str or VLAN
|
|
380
|
+
:param region: The VLAN's region.
|
|
381
|
+
:type region: str or Region
|
|
382
|
+
"""
|
|
383
|
+
if isinstance(region, Region):
|
|
384
|
+
region = region.id
|
|
385
|
+
|
|
386
|
+
if isinstance(vlan, VLAN):
|
|
387
|
+
vlan = vlan.label
|
|
388
|
+
resp = self.client.delete(
|
|
389
|
+
"/networking/vlans/{}/{}".format(region, vlan),
|
|
390
|
+
model=self,
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
if "error" in resp:
|
|
394
|
+
return False
|
|
395
|
+
|
|
396
|
+
return True
|
|
@@ -5,6 +5,11 @@ from urllib import parse
|
|
|
5
5
|
|
|
6
6
|
from deprecated import deprecated
|
|
7
7
|
|
|
8
|
+
from linode_api4 import (
|
|
9
|
+
ObjectStorageEndpoint,
|
|
10
|
+
ObjectStorageEndpointType,
|
|
11
|
+
PaginatedList,
|
|
12
|
+
)
|
|
8
13
|
from linode_api4.errors import UnexpectedResponseError
|
|
9
14
|
from linode_api4.groups import Group
|
|
10
15
|
from linode_api4.objects import (
|
|
@@ -272,6 +277,30 @@ class ObjectStorageGroup(Group):
|
|
|
272
277
|
|
|
273
278
|
return MappedObject(**result)
|
|
274
279
|
|
|
280
|
+
def endpoints(self, *filters) -> PaginatedList:
|
|
281
|
+
"""
|
|
282
|
+
Returns a paginated list of all Object Storage endpoints available in your account.
|
|
283
|
+
|
|
284
|
+
This is intended to be called from the :any:`LinodeClient`
|
|
285
|
+
class, like this::
|
|
286
|
+
|
|
287
|
+
endpoints = client.object_storage.endpoints()
|
|
288
|
+
|
|
289
|
+
API Documentation: https://techdocs.akamai.com/linode-api/reference/get-object-storage-endpoints
|
|
290
|
+
|
|
291
|
+
:param filters: Any number of filters to apply to this query.
|
|
292
|
+
See :doc:`Filtering Collections</linode_api4/objects/filtering>`
|
|
293
|
+
for more details on filtering.
|
|
294
|
+
|
|
295
|
+
:returns: A list of Object Storage Endpoints that matched the query.
|
|
296
|
+
:rtype: PaginatedList of ObjectStorageEndpoint
|
|
297
|
+
"""
|
|
298
|
+
return self.client._get_and_filter(
|
|
299
|
+
ObjectStorageEndpoint,
|
|
300
|
+
*filters,
|
|
301
|
+
endpoint="/object-storage/endpoints",
|
|
302
|
+
)
|
|
303
|
+
|
|
275
304
|
def buckets(self, *filters):
|
|
276
305
|
"""
|
|
277
306
|
Returns a paginated list of all Object Storage Buckets that you own.
|
|
@@ -299,6 +328,8 @@ class ObjectStorageGroup(Group):
|
|
|
299
328
|
label: str,
|
|
300
329
|
acl: ObjectStorageACL = ObjectStorageACL.PRIVATE,
|
|
301
330
|
cors_enabled=False,
|
|
331
|
+
s3_endpoint: Optional[str] = None,
|
|
332
|
+
endpoint_type: Optional[ObjectStorageEndpointType] = None,
|
|
302
333
|
):
|
|
303
334
|
"""
|
|
304
335
|
Creates an Object Storage Bucket in the specified cluster. Accounts with
|
|
@@ -320,6 +351,13 @@ class ObjectStorageGroup(Group):
|
|
|
320
351
|
should be created.
|
|
321
352
|
:type cluster: str
|
|
322
353
|
|
|
354
|
+
:param endpoint_type: The type of s3_endpoint available to the active user in this region.
|
|
355
|
+
:type endpoint_type: str
|
|
356
|
+
Enum: E0,E1,E2,E3
|
|
357
|
+
|
|
358
|
+
:param s3_endpoint: The active user's s3 endpoint URL, based on the endpoint_type and region.
|
|
359
|
+
:type s3_endpoint: str
|
|
360
|
+
|
|
323
361
|
:param cors_enabled: If true, the bucket will be created with CORS enabled for
|
|
324
362
|
all origins. For more fine-grained controls of CORS, use
|
|
325
363
|
the S3 API directly.
|
|
@@ -346,6 +384,8 @@ class ObjectStorageGroup(Group):
|
|
|
346
384
|
"label": label,
|
|
347
385
|
"acl": acl,
|
|
348
386
|
"cors_enabled": cors_enabled,
|
|
387
|
+
"s3_endpoint": s3_endpoint,
|
|
388
|
+
"endpoint_type": endpoint_type,
|
|
349
389
|
}
|
|
350
390
|
|
|
351
391
|
if self.is_cluster(cluster_or_region_id):
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from deprecated import deprecated
|
|
2
|
+
|
|
1
3
|
from linode_api4.objects import Base, DerivedBase, MappedObject, Property
|
|
2
4
|
|
|
3
5
|
|
|
@@ -63,6 +65,9 @@ class DatabaseEngine(Base):
|
|
|
63
65
|
Base.invalidate(self)
|
|
64
66
|
|
|
65
67
|
|
|
68
|
+
@deprecated(
|
|
69
|
+
reason="Backups are not supported for non-legacy database clusters."
|
|
70
|
+
)
|
|
66
71
|
class DatabaseBackup(DerivedBase):
|
|
67
72
|
"""
|
|
68
73
|
A generic Managed Database backup.
|
|
@@ -97,6 +102,9 @@ class DatabaseBackup(DerivedBase):
|
|
|
97
102
|
)
|
|
98
103
|
|
|
99
104
|
|
|
105
|
+
@deprecated(
|
|
106
|
+
reason="Backups are not supported for non-legacy database clusters."
|
|
107
|
+
)
|
|
100
108
|
class MySQLDatabaseBackup(DatabaseBackup):
|
|
101
109
|
"""
|
|
102
110
|
A backup for an accessible Managed MySQL Database.
|
|
@@ -107,6 +115,9 @@ class MySQLDatabaseBackup(DatabaseBackup):
|
|
|
107
115
|
api_endpoint = "/databases/mysql/instances/{database_id}/backups/{id}"
|
|
108
116
|
|
|
109
117
|
|
|
118
|
+
@deprecated(
|
|
119
|
+
reason="Backups are not supported for non-legacy database clusters."
|
|
120
|
+
)
|
|
110
121
|
class PostgreSQLDatabaseBackup(DatabaseBackup):
|
|
111
122
|
"""
|
|
112
123
|
A backup for an accessible Managed PostgreSQL Database.
|
|
@@ -131,7 +142,7 @@ class MySQLDatabase(Base):
|
|
|
131
142
|
"label": Property(mutable=True),
|
|
132
143
|
"allow_list": Property(mutable=True, unordered=True),
|
|
133
144
|
"backups": Property(derived_class=MySQLDatabaseBackup),
|
|
134
|
-
"cluster_size": Property(),
|
|
145
|
+
"cluster_size": Property(mutable=True),
|
|
135
146
|
"created": Property(is_datetime=True),
|
|
136
147
|
"encrypted": Property(),
|
|
137
148
|
"engine": Property(),
|
|
@@ -141,7 +152,9 @@ class MySQLDatabase(Base):
|
|
|
141
152
|
"replication_type": Property(),
|
|
142
153
|
"ssl_connection": Property(),
|
|
143
154
|
"status": Property(volatile=True),
|
|
144
|
-
"type": Property(),
|
|
155
|
+
"type": Property(mutable=True),
|
|
156
|
+
"fork": Property(),
|
|
157
|
+
"oldest_restore_time": Property(is_datetime=True),
|
|
145
158
|
"updated": Property(volatile=True, is_datetime=True),
|
|
146
159
|
"updates": Property(mutable=True),
|
|
147
160
|
"version": Property(),
|
|
@@ -219,6 +232,9 @@ class MySQLDatabase(Base):
|
|
|
219
232
|
"{}/patch".format(MySQLDatabase.api_endpoint), model=self
|
|
220
233
|
)
|
|
221
234
|
|
|
235
|
+
@deprecated(
|
|
236
|
+
reason="Backups are not supported for non-legacy database clusters."
|
|
237
|
+
)
|
|
222
238
|
def backup_create(self, label, **kwargs):
|
|
223
239
|
"""
|
|
224
240
|
Creates a snapshot backup of a Managed MySQL Database.
|
|
@@ -264,7 +280,7 @@ class PostgreSQLDatabase(Base):
|
|
|
264
280
|
"label": Property(mutable=True),
|
|
265
281
|
"allow_list": Property(mutable=True, unordered=True),
|
|
266
282
|
"backups": Property(derived_class=PostgreSQLDatabaseBackup),
|
|
267
|
-
"cluster_size": Property(),
|
|
283
|
+
"cluster_size": Property(mutable=True),
|
|
268
284
|
"created": Property(is_datetime=True),
|
|
269
285
|
"encrypted": Property(),
|
|
270
286
|
"engine": Property(),
|
|
@@ -275,7 +291,9 @@ class PostgreSQLDatabase(Base):
|
|
|
275
291
|
"replication_type": Property(),
|
|
276
292
|
"ssl_connection": Property(),
|
|
277
293
|
"status": Property(volatile=True),
|
|
278
|
-
"type": Property(),
|
|
294
|
+
"type": Property(mutable=True),
|
|
295
|
+
"fork": Property(),
|
|
296
|
+
"oldest_restore_time": Property(is_datetime=True),
|
|
279
297
|
"updated": Property(volatile=True, is_datetime=True),
|
|
280
298
|
"updates": Property(mutable=True),
|
|
281
299
|
"version": Property(),
|
|
@@ -354,6 +372,9 @@ class PostgreSQLDatabase(Base):
|
|
|
354
372
|
"{}/patch".format(PostgreSQLDatabase.api_endpoint), model=self
|
|
355
373
|
)
|
|
356
374
|
|
|
375
|
+
@deprecated(
|
|
376
|
+
reason="Backups are not supported for non-legacy database clusters."
|
|
377
|
+
)
|
|
357
378
|
def backup_create(self, label, **kwargs):
|
|
358
379
|
"""
|
|
359
380
|
Creates a snapshot backup of a Managed PostgreSQL Database.
|
|
@@ -414,6 +435,7 @@ class Database(Base):
|
|
|
414
435
|
"region": Property(),
|
|
415
436
|
"status": Property(),
|
|
416
437
|
"type": Property(),
|
|
438
|
+
"fork": Property(),
|
|
417
439
|
"updated": Property(),
|
|
418
440
|
"updates": Property(),
|
|
419
441
|
"version": Property(),
|
|
@@ -269,6 +269,7 @@ class Type(Base):
|
|
|
269
269
|
"vcpus": Property(),
|
|
270
270
|
"gpus": Property(),
|
|
271
271
|
"successor": Property(),
|
|
272
|
+
"accelerated_devices": Property(),
|
|
272
273
|
# type_class is populated from the 'class' attribute of the returned JSON
|
|
273
274
|
}
|
|
274
275
|
|
|
@@ -1638,6 +1639,22 @@ class Instance(Base):
|
|
|
1638
1639
|
for firewall in result["data"]
|
|
1639
1640
|
]
|
|
1640
1641
|
|
|
1642
|
+
def apply_firewalls(self):
|
|
1643
|
+
"""
|
|
1644
|
+
Reapply assigned firewalls to a Linode in case they were not applied successfully.
|
|
1645
|
+
|
|
1646
|
+
API Documentation: https://techdocs.akamai.com/linode-api/reference/post-apply-firewalls
|
|
1647
|
+
|
|
1648
|
+
:returns: Returns True if the operation was successful
|
|
1649
|
+
:rtype: bool
|
|
1650
|
+
"""
|
|
1651
|
+
|
|
1652
|
+
self._client.post(
|
|
1653
|
+
"{}/firewalls/apply".format(Instance.api_endpoint), model=self
|
|
1654
|
+
)
|
|
1655
|
+
|
|
1656
|
+
return True
|
|
1657
|
+
|
|
1641
1658
|
def nodebalancers(self):
|
|
1642
1659
|
"""
|
|
1643
1660
|
View a list of NodeBalancers that are assigned to this Linode and readable by the requesting User.
|
|
@@ -1919,7 +1936,7 @@ class StackScript(Base):
|
|
|
1919
1936
|
def _expand_placement_group_assignment(
|
|
1920
1937
|
pg: Union[
|
|
1921
1938
|
InstancePlacementGroupAssignment, "PlacementGroup", Dict[str, Any], int
|
|
1922
|
-
]
|
|
1939
|
+
],
|
|
1923
1940
|
) -> Optional[Dict[str, Any]]:
|
|
1924
1941
|
"""
|
|
1925
1942
|
Expands the placement group argument into a dict for use in an API request body.
|
|
@@ -14,6 +14,7 @@ from linode_api4.objects import (
|
|
|
14
14
|
Region,
|
|
15
15
|
Type,
|
|
16
16
|
)
|
|
17
|
+
from linode_api4.util import drop_null_keys
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
class LKEType(Base):
|
|
@@ -79,8 +80,6 @@ class LKEClusterControlPlaneACLOptions(JSONObject):
|
|
|
79
80
|
"""
|
|
80
81
|
LKEClusterControlPlaneACLOptions is used to set
|
|
81
82
|
the ACL configuration of an LKE cluster's control plane.
|
|
82
|
-
|
|
83
|
-
NOTE: Control Plane ACLs may not currently be available to all users.
|
|
84
83
|
"""
|
|
85
84
|
|
|
86
85
|
enabled: Optional[bool] = None
|
|
@@ -116,8 +115,6 @@ class LKEClusterControlPlaneACL(JSONObject):
|
|
|
116
115
|
"""
|
|
117
116
|
LKEClusterControlPlaneACL describes the ACL configuration of an LKE cluster's
|
|
118
117
|
control plane.
|
|
119
|
-
|
|
120
|
-
NOTE: Control Plane ACLs may not currently be available to all users.
|
|
121
118
|
"""
|
|
122
119
|
|
|
123
120
|
include_none_values = True
|
|
@@ -257,6 +254,7 @@ class LKECluster(Base):
|
|
|
257
254
|
"k8s_version": Property(slug_relationship=KubeVersion, mutable=True),
|
|
258
255
|
"pools": Property(derived_class=LKENodePool),
|
|
259
256
|
"control_plane": Property(mutable=True),
|
|
257
|
+
"apl_enabled": Property(),
|
|
260
258
|
}
|
|
261
259
|
|
|
262
260
|
def invalidate(self):
|
|
@@ -336,8 +334,6 @@ class LKECluster(Base):
|
|
|
336
334
|
"""
|
|
337
335
|
Gets the ACL configuration of this cluster's control plane.
|
|
338
336
|
|
|
339
|
-
NOTE: Control Plane ACLs may not currently be available to all users.
|
|
340
|
-
|
|
341
337
|
API Documentation: https://techdocs.akamai.com/linode-api/reference/get-lke-cluster-acl
|
|
342
338
|
|
|
343
339
|
:returns: The cluster's control plane ACL configuration.
|
|
@@ -353,6 +349,36 @@ class LKECluster(Base):
|
|
|
353
349
|
|
|
354
350
|
return LKEClusterControlPlaneACL.from_json(self._control_plane_acl)
|
|
355
351
|
|
|
352
|
+
@property
|
|
353
|
+
def apl_console_url(self) -> Optional[str]:
|
|
354
|
+
"""
|
|
355
|
+
Returns the URL of this cluster's APL installation if this cluster
|
|
356
|
+
is APL-enabled, else None.
|
|
357
|
+
|
|
358
|
+
:returns: The URL of the APL console for this cluster.
|
|
359
|
+
:rtype: str or None
|
|
360
|
+
"""
|
|
361
|
+
|
|
362
|
+
if not self.apl_enabled:
|
|
363
|
+
return None
|
|
364
|
+
|
|
365
|
+
return f"https://console.lke{self.id}.akamai-apl.net"
|
|
366
|
+
|
|
367
|
+
@property
|
|
368
|
+
def apl_health_check_url(self) -> Optional[str]:
|
|
369
|
+
"""
|
|
370
|
+
Returns the URL of this cluster's APL health check endpoint if this cluster
|
|
371
|
+
is APL-enabled, else None.
|
|
372
|
+
|
|
373
|
+
:returns: The URL of the APL console for this cluster.
|
|
374
|
+
:rtype: str or None
|
|
375
|
+
"""
|
|
376
|
+
|
|
377
|
+
if not self.apl_enabled:
|
|
378
|
+
return None
|
|
379
|
+
|
|
380
|
+
return f"https://auth.lke{self.id}.akamai-apl.net/ready"
|
|
381
|
+
|
|
356
382
|
def node_pool_create(
|
|
357
383
|
self,
|
|
358
384
|
node_type: Union[Type, str],
|
|
@@ -527,8 +553,6 @@ class LKECluster(Base):
|
|
|
527
553
|
"""
|
|
528
554
|
Updates the ACL configuration for this cluster's control plane.
|
|
529
555
|
|
|
530
|
-
NOTE: Control Plane ACLs may not currently be available to all users.
|
|
531
|
-
|
|
532
556
|
API Documentation: https://techdocs.akamai.com/linode-api/reference/put-lke-cluster-acl
|
|
533
557
|
|
|
534
558
|
:param acl: The ACL configuration to apply to this cluster.
|
|
@@ -543,7 +567,7 @@ class LKECluster(Base):
|
|
|
543
567
|
result = self._client.put(
|
|
544
568
|
f"{LKECluster.api_endpoint}/control_plane_acl",
|
|
545
569
|
model=self,
|
|
546
|
-
data={"acl": acl},
|
|
570
|
+
data={"acl": drop_null_keys(acl)},
|
|
547
571
|
)
|
|
548
572
|
|
|
549
573
|
acl = result.get("acl")
|
|
@@ -558,8 +582,6 @@ class LKECluster(Base):
|
|
|
558
582
|
This has the same effect as calling control_plane_acl_update with the `enabled` field
|
|
559
583
|
set to False. Access controls are disabled and all rules are deleted.
|
|
560
584
|
|
|
561
|
-
NOTE: Control Plane ACLs may not currently be available to all users.
|
|
562
|
-
|
|
563
585
|
API Documentation: https://techdocs.akamai.com/linode-api/reference/delete-lke-cluster-acl
|
|
564
586
|
"""
|
|
565
587
|
self._client.delete(
|
|
@@ -112,6 +112,20 @@ class IPAddress(Base):
|
|
|
112
112
|
|
|
113
113
|
return {"address": self.address, "linode_id": linode.id}
|
|
114
114
|
|
|
115
|
+
def delete(self):
|
|
116
|
+
"""
|
|
117
|
+
Override the delete() function from Base to use the correct endpoint.
|
|
118
|
+
"""
|
|
119
|
+
resp = self._client.delete(
|
|
120
|
+
"/linode/instances/{}/ips/{}".format(self.linode_id, self.address),
|
|
121
|
+
model=self,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
if "error" in resp:
|
|
125
|
+
return False
|
|
126
|
+
self.invalidate()
|
|
127
|
+
return True
|
|
128
|
+
|
|
115
129
|
|
|
116
130
|
@dataclass
|
|
117
131
|
class VPCIPAddress(JSONObject):
|