linode-api4 5.41.0__tar.gz → 5.42.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.41.0/linode_api4.egg-info → linode_api4-5.42.0}/PKG-INFO +4 -3
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/linode.py +97 -52
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/lke.py +8 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/util.py +8 -1
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/version.py +1 -1
- {linode_api4-5.41.0 → linode_api4-5.42.0/linode_api4.egg-info}/PKG-INFO +4 -3
- {linode_api4-5.41.0 → linode_api4-5.42.0}/pyproject.toml +4 -3
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/database/test_database.py +7 -1
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/database/test_database_engine_config.py +1 -1
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/linode/test_linode.py +9 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/lke/test_lke.py +15 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/volume/test_blockstorage.py +27 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/linode_test.py +41 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/LICENSE +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/MANIFEST.in +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/README.rst +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/examples/install-on-linode/app.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/examples/install-on-linode/make_stackscript.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/__init__.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/common.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/errors.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/__init__.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/account.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/beta.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/database.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/domain.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/group.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/image.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/image_share_group.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/linode.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/lke.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/lke_tier.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/lock.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/longview.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/maintenance.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/monitor.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/monitor_api.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/networking.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/nodebalancer.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/object_storage.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/placement.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/polling.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/profile.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/region.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/support.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/tag.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/volume.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/groups/vpc.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/linode_client.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/login_client.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/__init__.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/account.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/base.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/beta.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/database.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/dbase.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/domain.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/filtering.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/image.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/image_share_group.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/linode_interfaces.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/lock.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/longview.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/monitor.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/monitor_api.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/networking.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/nodebalancer.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/object_storage.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/placement.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/profile.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/region.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/serializable.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/support.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/tag.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/volume.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/objects/vpc.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/paginated_list.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4/polling.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4.egg-info/SOURCES.txt +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4.egg-info/dependency_links.txt +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4.egg-info/requires.txt +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/linode_api4.egg-info/top_level.txt +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/setup.cfg +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/setup.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/__init__.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_availability.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_availability_us-east.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_betas.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_betas_cool.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_child-accounts.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_child-accounts_123456.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_child-accounts_123456_token.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_events_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_invoices.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_invoices_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_invoices_123456_items.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_logins.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_logins_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_maintenance.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_notifications.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_oauth-clients_2737bf16b39ab5d7b4a1.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_payment-method_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_payment-methods.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_payments.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_promo-codes.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_service-transfers.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_service-transfers_12345.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_settings.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_transfer.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/account_users_test-user.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/betas.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/betas_active.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_engines.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_instances.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_mysql_config.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_mysql_instances.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_mysql_instances_123_credentials.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_mysql_instances_123_credentials_reset.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_mysql_instances_123_patch.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_mysql_instances_123_resume.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_mysql_instances_123_ssl.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_mysql_instances_123_suspend.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_postgresql_config.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_postgresql_instances.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_postgresql_instances_123_credentials.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_postgresql_instances_123_credentials_reset.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_postgresql_instances_123_patch.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_postgresql_instances_123_resume.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_postgresql_instances_123_ssl.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_postgresql_instances_123_suspend.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/databases_types.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/domains.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/domains_12345_clone.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/domains_12345_records.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/domains_12345_zone-file.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/domains_import.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_private_1234_sharegroups.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_private_123_regions.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_private_1337.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_sharegroups.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_sharegroups_1234.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_sharegroups_1234_images.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_sharegroups_1234_images_shared_1.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_sharegroups_1234_members.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_sharegroups_1234_members_abc123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_sharegroups_tokens.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_sharegroups_tokens_abc123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_sharegroups_tokens_abc123_sharegroup.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_sharegroups_tokens_abc123_sharegroup_images.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/images_upload.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_backups.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_configs.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_configs_456789.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_configs_456789_interfaces.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_123_put.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_321.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_configs_456789_interfaces_456.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_disks.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_disks_12345_clone.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_firewalls.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_ips.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_nodebalancers.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_transfer.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_transfer_2023_4.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_123_volumes.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_124.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_124_interfaces.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_124_interfaces_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_124_interfaces_123_firewalls.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_124_interfaces_456.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_124_interfaces_789.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_124_interfaces_settings.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_instances_124_upgrade-interfaces.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_stackscripts_10079.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_types.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/linode_types_g6-nanode-1.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/lke_clusters.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/lke_clusters_18881.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/lke_clusters_18881_control__plane__acl.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/lke_clusters_18881_dashboard.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/lke_clusters_18881_nodes_123456.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/lke_clusters_18881_pools_456.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/lke_clusters_18882.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/lke_clusters_18882_pools_789.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/lke_tiers_standard_versions.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/lke_types.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/lke_versions.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/locks.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/locks_1.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/longview_clients.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/longview_plan.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/longview_subscriptions.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/maintenance_policies.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/mongodb.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_alert-definitions.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_dashboards.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_dashboards_1.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_services.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_services_dbaas.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_services_dbaas_alert-definitions.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_services_dbaas_alert-definitions_12345.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_services_dbaas_dashboards.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_services_dbaas_metric-definitions.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_services_dbaas_metrics.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_services_dbaas_token.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/monitor_services_linode_token.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/network-transfer_prices.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls_123_devices.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls_123_devices_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls_123_devices_456.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls_123_history.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls_123_history_rules_2.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls_123_rules.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls_settings.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls_templates.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls_templates_public.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_firewalls_templates_vpc.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_ips_127.0.0.1.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_ipv6_pools.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_ipv6_ranges.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_ipv6_ranges_2600%3A3c01%3A%3A.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/networking_vlans.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/nodebalancers.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/nodebalancers_123456.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/nodebalancers_123456_configs.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/nodebalancers_123456_configs_65432_nodes.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/nodebalancers_12345_configs_4567_rebuild.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/nodebalancers_12345_firewalls.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/nodebalancers_12345_stats.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/nodebalancers_types.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_buckets.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_buckets_us-east-1.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-acl.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-list.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_object-url.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_buckets_us-east-1_example-bucket_ssl.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_buckets_us-east_example-bucket_access.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_clusters.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_keys.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_quotas.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_quotas_obj-objects-us-ord-1.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_quotas_obj-objects-us-ord-1_usage.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_transfer.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/object-storage_types.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/placement_groups.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/placement_groups_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/profile.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/profile_device_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/profile_devices.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/profile_logins.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/profile_logins_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/profile_preferences.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/profile_security-questions.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/profile_sshkeys.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/regions.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/regions_availability.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/regions_us-east_availability.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/regions_us-east_vpc-availability.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/regions_vpc-availability.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/support_tickets_123.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/tags.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/tags_nothing.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/tags_something.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/testmappedobj1.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/volumes.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/volumes_types.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/vpcs.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/vpcs_123456.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/vpcs_123456_ips.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/vpcs_123456_subnets.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/vpcs_123456_subnets_789.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/fixtures/vpcs_ips.json +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/__init__.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/conftest.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/filters/fixtures.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/filters/model_filters_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/helpers.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/linode_client/__init__.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/linode_client/test_errors.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/linode_client/test_linode_client.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/linode_client/test_retry.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/login_client/test_login_client.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/__init__.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/account/test_account.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/database/helpers.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/domain/test_domain.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/firewall/test_firewall.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/firewall/test_firewall_templates.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/image/test_image.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/linode/interfaces/test_interfaces.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/lock/__init__.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/lock/test_lock.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/longview/test_longview.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/maintenance/test_maintenance.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/monitor/test_monitor.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/monitor_api/test_monitor_api.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/networking/test_networking.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/nodebalancer/test_nodebalancer.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/object_storage/test_obj.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/object_storage/test_obj_quotas.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/placement/test_placement.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/profile/test_profile.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/region/test_region.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/sharegroups/test_sharegroups.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/tag/test_tag.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/volume/test_volume.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/vpc/test_vpc.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/__init__.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/base.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/errors_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/fixtures.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/__init__.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/database_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/image_share_group_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/image_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/linode_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/lke_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/lke_tier_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/lock_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/monitor_api_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/networking_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/object_storage_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/placement_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/polling_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/region_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/groups/vpc_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/linode_client_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/login_client_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/account_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/base_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/beta_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/database_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/domain_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/firewall_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/image_share_group_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/image_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/linode_interface_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/lke_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/lock_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/longview_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/mapped_object_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/monitor_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/networking_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/nodebalancers_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/object_storage_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/placement_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/profile_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/property_alias_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/region_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/serializable_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/support_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/tag_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/volume_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/objects/vpc_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.0}/test/unit/paginated_list_test.py +0 -0
- {linode_api4-5.41.0 → linode_api4-5.42.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.
|
|
3
|
+
Version: 5.42.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
|
|
@@ -14,11 +14,12 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
14
14
|
Classifier: License :: OSI Approved :: BSD License
|
|
15
15
|
Classifier: Programming Language :: Python
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
-
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Requires-Python: >=3.10
|
|
22
23
|
Description-Content-Type: text/x-rst
|
|
23
24
|
License-File: LICENSE
|
|
24
25
|
Requires-Dist: requests
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import copy
|
|
2
4
|
import string
|
|
3
5
|
import sys
|
|
@@ -40,7 +42,11 @@ from linode_api4.objects.region import Region
|
|
|
40
42
|
from linode_api4.objects.serializable import JSONObject, StrEnum
|
|
41
43
|
from linode_api4.objects.vpc import VPC, VPCSubnet
|
|
42
44
|
from linode_api4.paginated_list import PaginatedList
|
|
43
|
-
from linode_api4.util import
|
|
45
|
+
from linode_api4.util import (
|
|
46
|
+
drop_null_keys,
|
|
47
|
+
generate_device_suffixes,
|
|
48
|
+
normalize_as_list,
|
|
49
|
+
)
|
|
44
50
|
|
|
45
51
|
PASSWORD_CHARS = string.ascii_letters + string.digits + string.punctuation
|
|
46
52
|
MIN_DEVICE_LIMIT = 8
|
|
@@ -1246,14 +1252,14 @@ class Instance(Base):
|
|
|
1246
1252
|
# create derived objects
|
|
1247
1253
|
def config_create(
|
|
1248
1254
|
self,
|
|
1249
|
-
kernel=None,
|
|
1250
|
-
label=None,
|
|
1251
|
-
devices
|
|
1252
|
-
disks
|
|
1253
|
-
volumes
|
|
1254
|
-
interfaces
|
|
1255
|
+
kernel: Kernel | str | None = None,
|
|
1256
|
+
label: str | None = None,
|
|
1257
|
+
devices: "Disk | Volume | dict[str, Any] | list[Disk | Volume | dict[str, Any]] | None" = None,
|
|
1258
|
+
disks: Disk | int | list[Disk | int] | None = None,
|
|
1259
|
+
volumes: "Volume | int | list[Volume | int] | None" = None,
|
|
1260
|
+
interfaces: list[ConfigInterface | dict[str, Any]] | None = None,
|
|
1255
1261
|
**kwargs,
|
|
1256
|
-
):
|
|
1262
|
+
) -> Config:
|
|
1257
1263
|
"""
|
|
1258
1264
|
Creates a Linode Config with the given attributes.
|
|
1259
1265
|
|
|
@@ -1263,10 +1269,13 @@ class Instance(Base):
|
|
|
1263
1269
|
:param label: The config label
|
|
1264
1270
|
:param disks: The list of disks, starting at sda, to map to this config.
|
|
1265
1271
|
:param volumes: The volumes, starting after the last disk, to map to this
|
|
1266
|
-
|
|
1272
|
+
config.
|
|
1267
1273
|
:param devices: A list of devices to assign to this config, in device
|
|
1268
|
-
|
|
1269
|
-
|
|
1274
|
+
index order, a raw device mapping dict to pass directly to the API
|
|
1275
|
+
(e.g. ``{"sda": {"disk_id": 123}, "sdb": Volume(...)}``), or
|
|
1276
|
+
a single Disk or Volume.
|
|
1277
|
+
If this is given, you may not include disks or volumes.
|
|
1278
|
+
:param interfaces: A list of ConfigInterface objects or dicts to assign to this config.
|
|
1270
1279
|
:param **kwargs: Any other arguments accepted by the api.
|
|
1271
1280
|
|
|
1272
1281
|
:returns: A new Linode Config
|
|
@@ -1274,6 +1283,8 @@ class Instance(Base):
|
|
|
1274
1283
|
# needed here to avoid circular imports
|
|
1275
1284
|
from .volume import Volume # pylint: disable=import-outside-toplevel
|
|
1276
1285
|
|
|
1286
|
+
interfaces = [] if interfaces is None else interfaces
|
|
1287
|
+
|
|
1277
1288
|
hypervisor_prefix = "sd" if self.hypervisor == "kvm" else "xvd"
|
|
1278
1289
|
|
|
1279
1290
|
device_limit = int(
|
|
@@ -1288,52 +1299,83 @@ class Instance(Base):
|
|
|
1288
1299
|
for suffix in generate_device_suffixes(device_limit)
|
|
1289
1300
|
]
|
|
1290
1301
|
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1302
|
+
def _flatten_device(device: Disk | Volume | dict | None):
|
|
1303
|
+
if device is None:
|
|
1304
|
+
return None
|
|
1305
|
+
elif isinstance(device, Disk):
|
|
1306
|
+
return {"disk_id": device.id}
|
|
1307
|
+
elif isinstance(device, Volume):
|
|
1308
|
+
return {"volume_id": device.id}
|
|
1309
|
+
elif isinstance(device, dict):
|
|
1310
|
+
return device
|
|
1311
|
+
|
|
1312
|
+
raise TypeError("Disk, Volume, or dict expected!")
|
|
1313
|
+
|
|
1314
|
+
def _device_entry(device: Disk | Volume | int, key: str):
|
|
1315
|
+
if isinstance(device, (Disk, Volume)):
|
|
1316
|
+
return _flatten_device(device)
|
|
1317
|
+
|
|
1318
|
+
try:
|
|
1319
|
+
device_id = int(device)
|
|
1320
|
+
except (TypeError, ValueError):
|
|
1321
|
+
raise TypeError(
|
|
1322
|
+
"Disk, Volume, or integer ID expected!"
|
|
1323
|
+
) from None
|
|
1324
|
+
|
|
1325
|
+
return {key: device_id}
|
|
1326
|
+
|
|
1327
|
+
def _build_devices():
|
|
1328
|
+
# Devices is a dict, flatten and pass through
|
|
1329
|
+
if isinstance(devices, dict):
|
|
1330
|
+
return {
|
|
1331
|
+
k: (
|
|
1332
|
+
_flatten_device(v)
|
|
1333
|
+
if isinstance(v, (Disk, Volume))
|
|
1334
|
+
else v
|
|
1335
|
+
)
|
|
1336
|
+
for k, v in devices.items()
|
|
1337
|
+
}
|
|
1294
1338
|
|
|
1339
|
+
device_list = []
|
|
1340
|
+
|
|
1341
|
+
if devices:
|
|
1342
|
+
device_list += [
|
|
1343
|
+
_flatten_device(device)
|
|
1344
|
+
for device in normalize_as_list(devices)
|
|
1345
|
+
]
|
|
1346
|
+
|
|
1347
|
+
if disks:
|
|
1348
|
+
device_list += [
|
|
1349
|
+
_device_entry(disk, "disk_id") if disk is not None else None
|
|
1350
|
+
for disk in normalize_as_list(disks)
|
|
1351
|
+
]
|
|
1352
|
+
|
|
1353
|
+
if volumes:
|
|
1354
|
+
device_list += [
|
|
1355
|
+
(
|
|
1356
|
+
_device_entry(volume, "volume_id")
|
|
1357
|
+
if volume is not None
|
|
1358
|
+
else None
|
|
1359
|
+
)
|
|
1360
|
+
for volume in normalize_as_list(volumes)
|
|
1361
|
+
]
|
|
1362
|
+
|
|
1363
|
+
return {
|
|
1364
|
+
device_names[i]: device for i, device in enumerate(device_list)
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
# This validation is enforced for backwards compatibility but isn't
|
|
1368
|
+
# technically needed anymore
|
|
1295
1369
|
if devices and (disks or volumes):
|
|
1296
1370
|
raise ValueError(
|
|
1297
1371
|
'You may not call config_create with "devices" and '
|
|
1298
1372
|
'either of "disks" or "volumes" specified!'
|
|
1299
1373
|
)
|
|
1300
1374
|
|
|
1301
|
-
|
|
1302
|
-
if not isinstance(disks, list):
|
|
1303
|
-
disks = [disks]
|
|
1304
|
-
if not isinstance(volumes, list):
|
|
1305
|
-
volumes = [volumes]
|
|
1306
|
-
|
|
1307
|
-
devices = []
|
|
1308
|
-
|
|
1309
|
-
for d in disks:
|
|
1310
|
-
if d is None:
|
|
1311
|
-
devices.append(None)
|
|
1312
|
-
elif isinstance(d, Disk):
|
|
1313
|
-
devices.append(d)
|
|
1314
|
-
else:
|
|
1315
|
-
devices.append(Disk(self._client, int(d), self.id))
|
|
1316
|
-
|
|
1317
|
-
for v in volumes:
|
|
1318
|
-
if v is None:
|
|
1319
|
-
devices.append(None)
|
|
1320
|
-
elif isinstance(v, Volume):
|
|
1321
|
-
devices.append(v)
|
|
1322
|
-
else:
|
|
1323
|
-
devices.append(Volume(self._client, int(v)))
|
|
1324
|
-
|
|
1325
|
-
if not devices:
|
|
1326
|
-
raise ValueError("Must include at least one disk or volume!")
|
|
1375
|
+
device_map = _build_devices()
|
|
1327
1376
|
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
pass
|
|
1331
|
-
elif isinstance(d, Disk):
|
|
1332
|
-
device_map[device_names[i]] = {"disk_id": d.id}
|
|
1333
|
-
elif isinstance(d, Volume):
|
|
1334
|
-
device_map[device_names[i]] = {"volume_id": d.id}
|
|
1335
|
-
else:
|
|
1336
|
-
raise TypeError("Disk or Volume expected!")
|
|
1377
|
+
if len(device_map) < 1:
|
|
1378
|
+
raise ValueError("Must include at least one disk or volume!")
|
|
1337
1379
|
|
|
1338
1380
|
param_interfaces = []
|
|
1339
1381
|
for interface in interfaces:
|
|
@@ -1845,8 +1887,8 @@ class Instance(Base):
|
|
|
1845
1887
|
to_linode=None,
|
|
1846
1888
|
region=None,
|
|
1847
1889
|
instance_type=None,
|
|
1848
|
-
configs=
|
|
1849
|
-
disks=
|
|
1890
|
+
configs=None,
|
|
1891
|
+
disks=None,
|
|
1850
1892
|
label=None,
|
|
1851
1893
|
group=None,
|
|
1852
1894
|
with_backups=None,
|
|
@@ -1902,7 +1944,10 @@ class Instance(Base):
|
|
|
1902
1944
|
'You may only specify one of "to_linode" and "region"'
|
|
1903
1945
|
)
|
|
1904
1946
|
|
|
1905
|
-
if
|
|
1947
|
+
configs = [] if configs is None else configs
|
|
1948
|
+
disks = [] if disks is None else disks
|
|
1949
|
+
|
|
1950
|
+
if region and not instance_type:
|
|
1906
1951
|
raise ValueError('Specifying a region requires a "service" as well')
|
|
1907
1952
|
|
|
1908
1953
|
if not isinstance(configs, list) and not isinstance(
|
|
@@ -8,6 +8,7 @@ from linode_api4.objects import (
|
|
|
8
8
|
Base,
|
|
9
9
|
DerivedBase,
|
|
10
10
|
Instance,
|
|
11
|
+
InstanceDiskEncryptionType,
|
|
11
12
|
JSONObject,
|
|
12
13
|
MappedObject,
|
|
13
14
|
Property,
|
|
@@ -422,6 +423,9 @@ class LKECluster(Base):
|
|
|
422
423
|
] = None,
|
|
423
424
|
update_strategy: Optional[str] = None,
|
|
424
425
|
label: str = None,
|
|
426
|
+
disk_encryption: Optional[
|
|
427
|
+
Union[str, InstanceDiskEncryptionType]
|
|
428
|
+
] = None,
|
|
425
429
|
**kwargs,
|
|
426
430
|
):
|
|
427
431
|
"""
|
|
@@ -443,6 +447,9 @@ class LKECluster(Base):
|
|
|
443
447
|
:param update_strategy: The strategy to use when updating this node pool.
|
|
444
448
|
NOTE: This field is specific to enterprise clusters.
|
|
445
449
|
:type update_strategy: str
|
|
450
|
+
:param disk_encryption: Local disk encryption setting for this LKE node pool.
|
|
451
|
+
One of 'enabled' or 'disabled'. Defaults to 'disabled'.
|
|
452
|
+
:type disk_encryption: str or InstanceDiskEncryptionType
|
|
446
453
|
:param kwargs: Any other arguments to pass to the API. See the API docs
|
|
447
454
|
for possible values.
|
|
448
455
|
|
|
@@ -459,6 +466,7 @@ class LKECluster(Base):
|
|
|
459
466
|
"taints": taints,
|
|
460
467
|
"k8s_version": k8s_version,
|
|
461
468
|
"update_strategy": update_strategy,
|
|
469
|
+
"disk_encryption": disk_encryption,
|
|
462
470
|
}
|
|
463
471
|
params.update(kwargs)
|
|
464
472
|
|
|
@@ -3,7 +3,7 @@ Contains various utility functions.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import string
|
|
6
|
-
from typing import Any, Dict
|
|
6
|
+
from typing import Any, Dict, List, Tuple, Union
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def drop_null_keys(data: Dict[Any, Any], recursive=True) -> Dict[Any, Any]:
|
|
@@ -30,6 +30,13 @@ def drop_null_keys(data: Dict[Any, Any], recursive=True) -> Dict[Any, Any]:
|
|
|
30
30
|
return recursive_helper(data)
|
|
31
31
|
|
|
32
32
|
|
|
33
|
+
def normalize_as_list(value: Any) -> Union[List, Tuple]:
|
|
34
|
+
"""
|
|
35
|
+
Returns the value wrapped in a list if it isn't already a list or tuple.
|
|
36
|
+
"""
|
|
37
|
+
return value if isinstance(value, (list, tuple)) else [value]
|
|
38
|
+
|
|
39
|
+
|
|
33
40
|
def generate_device_suffixes(n: int) -> list[str]:
|
|
34
41
|
"""
|
|
35
42
|
Generate n alphabetical suffixes starting with a, b, c, etc.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: linode_api4
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.42.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
|
|
@@ -14,11 +14,12 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
14
14
|
Classifier: License :: OSI Approved :: BSD License
|
|
15
15
|
Classifier: Programming Language :: Python
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
-
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Requires-Python: >=3.10
|
|
22
23
|
Description-Content-Type: text/x-rst
|
|
23
24
|
License-File: LICENSE
|
|
24
25
|
Requires-Dist: requests
|
|
@@ -8,7 +8,7 @@ name = "linode_api4"
|
|
|
8
8
|
authors = [{ name = "Linode", email = "devs@linode.com" }]
|
|
9
9
|
description = "The official Python SDK for Linode API v4"
|
|
10
10
|
readme = "README.rst"
|
|
11
|
-
requires-python = ">=3.
|
|
11
|
+
requires-python = ">=3.10"
|
|
12
12
|
keywords = [
|
|
13
13
|
"akamai",
|
|
14
14
|
"Akamai Connected Cloud",
|
|
@@ -25,10 +25,11 @@ classifiers = [
|
|
|
25
25
|
"License :: OSI Approved :: BSD License",
|
|
26
26
|
"Programming Language :: Python",
|
|
27
27
|
"Programming Language :: Python :: 3",
|
|
28
|
-
"Programming Language :: Python :: 3.9",
|
|
29
28
|
"Programming Language :: Python :: 3.10",
|
|
30
29
|
"Programming Language :: Python :: 3.11",
|
|
31
30
|
"Programming Language :: Python :: 3.12",
|
|
31
|
+
"Programming Language :: Python :: 3.13",
|
|
32
|
+
"Programming Language :: Python :: 3.14",
|
|
32
33
|
]
|
|
33
34
|
dependencies = ["requests", "polling", "deprecated"]
|
|
34
35
|
dynamic = ["version"]
|
|
@@ -78,7 +79,7 @@ line_length = 80
|
|
|
78
79
|
|
|
79
80
|
[tool.black]
|
|
80
81
|
line-length = 80
|
|
81
|
-
target-version = ["
|
|
82
|
+
target-version = ["py310", "py311", "py312", "py313", "py314"]
|
|
82
83
|
|
|
83
84
|
[tool.autoflake]
|
|
84
85
|
expand-star-imports = true
|
|
@@ -230,6 +230,9 @@ def test_update_sql_db(test_linode_client, test_create_sql_db):
|
|
|
230
230
|
|
|
231
231
|
assert res
|
|
232
232
|
assert database.allow_list == new_allow_list
|
|
233
|
+
# Label assertion is commented out because the API updates
|
|
234
|
+
# the label intermittently, causing test failures. The issue
|
|
235
|
+
# is tracked in TPT-4268.
|
|
233
236
|
# assert database.label == label
|
|
234
237
|
assert database.updates.day_of_week == 2
|
|
235
238
|
|
|
@@ -354,7 +357,10 @@ def test_update_postgres_db(test_linode_client, test_create_postgres_db):
|
|
|
354
357
|
|
|
355
358
|
assert res
|
|
356
359
|
assert database.allow_list == new_allow_list
|
|
357
|
-
|
|
360
|
+
# Label assertion is commented out because the API updates
|
|
361
|
+
# the label intermittently, causing test failures. The issue
|
|
362
|
+
# is tracked in TPT-4268.
|
|
363
|
+
# assert database.label == label
|
|
358
364
|
assert database.updates.day_of_week == 2
|
|
359
365
|
|
|
360
366
|
|
|
@@ -100,7 +100,7 @@ def test_get_mysql_config(test_linode_client):
|
|
|
100
100
|
assert isinstance(brp, dict)
|
|
101
101
|
assert brp["type"] == "integer"
|
|
102
102
|
assert brp["minimum"] == 600
|
|
103
|
-
assert brp["maximum"] ==
|
|
103
|
+
assert brp["maximum"] == 9007199254740991
|
|
104
104
|
assert brp["requires_restart"] is False
|
|
105
105
|
|
|
106
106
|
# mysql sub-keys
|
|
@@ -790,6 +790,15 @@ def test_get_config(test_linode_client, create_linode):
|
|
|
790
790
|
assert config.id == linode.configs[0].id
|
|
791
791
|
|
|
792
792
|
|
|
793
|
+
def test_config_create_without_devices_raises_error(create_linode):
|
|
794
|
+
linode = create_linode
|
|
795
|
+
|
|
796
|
+
with pytest.raises(ValueError) as err:
|
|
797
|
+
linode.config_create(label="test-config-no-devices")
|
|
798
|
+
|
|
799
|
+
assert "Must include at least one disk or volume!" in str(err.value)
|
|
800
|
+
|
|
801
|
+
|
|
793
802
|
def test_get_linode_types(test_linode_client):
|
|
794
803
|
types = test_linode_client.linode.types()
|
|
795
804
|
|
|
@@ -211,6 +211,21 @@ def test_get_lke_pool(test_linode_client, lke_cluster):
|
|
|
211
211
|
)
|
|
212
212
|
|
|
213
213
|
|
|
214
|
+
def test_node_pool_create_with_disk_encryption(test_linode_client, lke_cluster):
|
|
215
|
+
node_type = test_linode_client.linode.types()[1]
|
|
216
|
+
|
|
217
|
+
pool = lke_cluster.node_pool_create(
|
|
218
|
+
node_type,
|
|
219
|
+
1,
|
|
220
|
+
disk_encryption=InstanceDiskEncryptionType.enabled,
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
try:
|
|
224
|
+
assert pool.disk_encryption == InstanceDiskEncryptionType.enabled
|
|
225
|
+
finally:
|
|
226
|
+
pool.delete()
|
|
227
|
+
|
|
228
|
+
|
|
214
229
|
def test_cluster_dashboard_url_view(lke_cluster):
|
|
215
230
|
cluster = lke_cluster
|
|
216
231
|
|
{linode_api4-5.41.0 → linode_api4-5.42.0}/test/integration/models/volume/test_blockstorage.py
RENAMED
|
@@ -38,3 +38,30 @@ def test_config_create_with_extended_volume_limit(test_linode_client):
|
|
|
38
38
|
linode.delete()
|
|
39
39
|
for v in volumes:
|
|
40
40
|
retry_sending_request(3, v.delete)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def test_config_create_with_device_map(test_linode_client):
|
|
44
|
+
client = test_linode_client
|
|
45
|
+
|
|
46
|
+
region = get_region(client, {"Linodes", "Block Storage"}, site_type="core")
|
|
47
|
+
label = get_test_label()
|
|
48
|
+
|
|
49
|
+
linode, _ = client.linode.instance_create(
|
|
50
|
+
"g6-standard-6",
|
|
51
|
+
region,
|
|
52
|
+
image="linode/debian12",
|
|
53
|
+
label=label,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
disk_id = linode.disks[0].id
|
|
57
|
+
devices = {
|
|
58
|
+
"sdl": {"disk_id": disk_id},
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
config = linode.config_create(label=f"{label}-config", devices=devices)
|
|
62
|
+
|
|
63
|
+
result_devices = config._raw_json["devices"]
|
|
64
|
+
assert result_devices["sdl"] is not None
|
|
65
|
+
assert result_devices["sdl"]["disk_id"] == disk_id
|
|
66
|
+
|
|
67
|
+
linode.delete()
|
|
@@ -459,6 +459,47 @@ class LinodeTest(ClientBaseCase):
|
|
|
459
459
|
assert disk.id == 12345
|
|
460
460
|
assert disk.disk_encryption == InstanceDiskEncryptionType.disabled
|
|
461
461
|
|
|
462
|
+
def test_create_config_with_device_map(self):
|
|
463
|
+
"""
|
|
464
|
+
Tests that config_create passes through a raw device map unchanged.
|
|
465
|
+
"""
|
|
466
|
+
linode = Instance(self.client, 123)
|
|
467
|
+
devices = {
|
|
468
|
+
"sda": {"disk_id": 111},
|
|
469
|
+
"sdb": {"volume_id": 222},
|
|
470
|
+
"sdc": None,
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
with self.mock_post(
|
|
474
|
+
{"id": 456, "devices": devices, "interfaces": []}
|
|
475
|
+
) as m:
|
|
476
|
+
config = linode.config_create(label="test-config", devices=devices)
|
|
477
|
+
|
|
478
|
+
self.assertEqual(m.call_url, "/linode/instances/123/configs")
|
|
479
|
+
self.assertEqual(
|
|
480
|
+
m.call_data,
|
|
481
|
+
{
|
|
482
|
+
"label": "test-config",
|
|
483
|
+
"devices": devices,
|
|
484
|
+
"interfaces": [],
|
|
485
|
+
},
|
|
486
|
+
)
|
|
487
|
+
|
|
488
|
+
self.assertEqual(config.id, 456)
|
|
489
|
+
|
|
490
|
+
def test_create_config_without_devices_raises_error(self):
|
|
491
|
+
"""
|
|
492
|
+
Tests that config_create raises ValueError when no devices, disks, or volumes are specified.
|
|
493
|
+
"""
|
|
494
|
+
linode = Instance(self.client, 123)
|
|
495
|
+
|
|
496
|
+
with self.assertRaises(ValueError) as context:
|
|
497
|
+
linode.config_create(label="test-config")
|
|
498
|
+
|
|
499
|
+
assert "Must include at least one disk or volume!" in str(
|
|
500
|
+
context.exception
|
|
501
|
+
)
|
|
502
|
+
|
|
462
503
|
def test_get_placement_group(self):
|
|
463
504
|
"""
|
|
464
505
|
Tests that you can get the placement group for a Linode
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|