The goal is to nail down some of the fundamentals of how the provider is used, add support for a few more of the essential resources, while expanding functionality for some of the existing ones.
This issue serves as a high-level outline/overview of the milestone, with individual issues to be spun out as sub-issues here, and added to the Alpha Phase milestone.
Below is an initial draft proposal of changes for the alpha phase, so it may change, and we welcome feedback and discussion.
Overarching
[ ] Support for multiple data centers — Deprecate the data_center provider option, and add a data_center_id property to relevant resources and data sources, initially this should be optional with a warning if not set, but later it will become required. This is not a insignificant refactor, but shouldn't be super painful as internally everything already uses a globally provided Data Center. I believe the sooner we start showing deprecation warnings for anyone using the data_center provider option, or not setting data_center_id on resources that require it, the better.
[ ] Deprecate the organization provider option which accepts a org sub-domain, in favor of a new organization_id provider option, and error if neither option is provided. This should make the provider more stable, as the sub-domain is freely editable by org admins at any time.
[ ] Support for multiple organizations — Add optional organization_id property to relevant resources and data sources, similar to what we're planning with data_center_id, but while keeping the provider level organization_id as the default if the resource definition itself does not specify a organization_id.
Resources
[ ] Address Lists
[x] Basic management
[ ] Add optional organization_id property.
[ ] Inline entries management via the bulk update API endpoint to avoid needing to make separate API calls for each entry, as some lists have hundreds of entries.
[x] Address List Entries
[ ] Disk Backup Policies
[ ] Basic management
[ ] Can be assigned to either a virtual machine or to a specific disk.
[ ] File Storage Volumes
[x] Basic management
[ ] Add optional data_center_id property, showing a warning if not set.
[ ] Add optional organization_id property.
[ ] DNS Zones
[ ] Basic management
[ ] Add optional organization_id property.
[ ] DNS Records
[ ] Basic management
[ ] IP Addresses
[x] Basic management
[ ] Add optional data_center_id property
[ ] Showing a warning if neither network_id or data_center_id is set, as it then falls back to the globally set data center in the provider options.
[ ] Add optional organization_id property.
[ ] Load Balancers
[x] Basic management
[ ] Support managing backend weights
[ ] Add optional data_center_id property, showing a warning if not set.
[ ] Add optional organization_id property.
[x] Load Balancer Rules
[x] Basic management
[x] Support for assigning to Load Balancers
[ ] SSH Keys (for an organization)
[ ] Basic management — Requires a new get by ID/Fingerprint Core API endpoint as we only have a create, list and delete endpoints right now.
[ ] Add optional organization_id property.
[ ] Security Groups
[x] Basic management
[ ] Add optional organization_id property.
[ ] Deprecate/remove in-line rule management feature to align with the load balancer resource, and to make things simpler when migrating to the v6 provider.
[x] Security Group Rules
[x] Basic management
[x] Assignment to security groups
[ ] Tags
[ ] Basic management
[ ] Add optional organization_id property.
[ ] Virtual Machines
[x] Basic management
[x] Specify Disk Template and options for it
[x] Specify network speed profile
Note: These changes could do with some discussion around our non-buildspec based API endpoint. Possibly we would want to enhance said API endpoint with the same kind of features as listed here, which may make implementation here simpler.
[ ] Shutdown/Start VMs
[ ] Add optional data_center_id property, showing a warning if not set.
[ ] Add optional organization_id property.
[ ] Add vcpu_count and memory_in_gb read-only properties.
[ ] Custom disks and disk sizes
[x] Is supported
[ ] Update disk properties to more closely match the disks property on the Build Virtual Machine API endpoint.
[ ] SSH Key management, with options for:
All org keys
Specific org keys by ID or Fingerprint
All keys of org users
All keys of specific users by User ID
[ ] IP address changes
[ ] Deprecate ip_address_ids in favor of boolean assign_ipv4_address and assign_ipv6_address optional attributes which both default to true.
[ ] Add extra_ip_address_ids, which are used together with the katapult_ip resource to add/manage multiple IPs on a VM. To have full exact control of all IPs, the assign_ipv4_address and assign_ipv6_address properties need to both be set to false.
[ ] Make sure old and new IP related properties conflict with the network_interfaces property planned in #147, as using network_interfaces fully takes over all network/IP management.
Data Sources
[ ] Data Centers
[x] Get by id
[x] Get by permalink
[ ] Get list
[ ] Disk Backup Policies
[ ] Get list (global for org, for VM, or for Disk)
[ ] Get by id
[x] Disk Templates
[ ] DNS Zones
[ ] Get list
[ ] Get by id
[ ] Get by name
[ ] DNS Records
[ ] Get list
[ ] Get by id
[ ] Get by name
[x] File Storage Volumes
[x] IP Addresses
[x] Load Balancers
[x] Load Balancer Rules
[x] Network Speed Profiles
[x] Security Groups
[x] Security Group Rules
[ ] SSH Keys (for an organization)
[ ] Get list
[ ] Get by id (requires new API endpoint)
[ ] Get by fingerprint (requires new API endpoint)
[ ] Tags
[ ] Get list
[ ] Get by id
[ ] Get by name (requires an update to the API)
[ ] Virtual Machines
[ ] Add vcpu_count and memory_in_gb read-only properties.
The goal is to nail down some of the fundamentals of how the provider is used, add support for a few more of the essential resources, while expanding functionality for some of the existing ones.
This issue serves as a high-level outline/overview of the milestone, with individual issues to be spun out as sub-issues here, and added to the Alpha Phase milestone.
Below is an initial draft proposal of changes for the alpha phase, so it may change, and we welcome feedback and discussion.
Overarching
data_center
provider option, and add adata_center_id
property to relevant resources and data sources, initially this should be optional with a warning if not set, but later it will become required. This is not a insignificant refactor, but shouldn't be super painful as internally everything already uses a globally provided Data Center. I believe the sooner we start showing deprecation warnings for anyone using thedata_center
provider option, or not settingdata_center_id
on resources that require it, the better.organization
provider option which accepts a org sub-domain, in favor of a neworganization_id
provider option, and error if neither option is provided. This should make the provider more stable, as the sub-domain is freely editable by org admins at any time.organization_id
property to relevant resources and data sources, similar to what we're planning withdata_center_id
, but while keeping the provider levelorganization_id
as the default if the resource definition itself does not specify aorganization_id
.Resources
organization_id
property.data_center_id
property, showing a warning if not set.organization_id
property.organization_id
property.data_center_id
propertynetwork_id
ordata_center_id
is set, as it then falls back to the globally set data center in the provider options.organization_id
property.data_center_id
property, showing a warning if not set.organization_id
property.organization_id
property.organization_id
property.organization_id
property.data_center_id
property, showing a warning if not set.organization_id
property.vcpu_count
andmemory_in_gb
read-only properties.disks
property on the Build Virtual Machine API endpoint.ip_address_ids
in favor of booleanassign_ipv4_address
andassign_ipv6_address
optional attributes which both default totrue
.extra_ip_address_ids
, which are used together with thekatapult_ip
resource to add/manage multiple IPs on a VM. To have full exact control of all IPs, theassign_ipv4_address
andassign_ipv6_address
properties need to both be set tofalse
.network_interfaces
property planned in #147, as usingnetwork_interfaces
fully takes over all network/IP management.Data Sources
id
id
id
name
id
name
id
(requires new API endpoint)fingerprint
(requires new API endpoint)id
name
(requires an update to the API)vcpu_count
andmemory_in_gb
read-only properties.