
On reflection, I think I'll take my comments on the network objects a little further - I don't think that a separate object is needed here at all, and believe that the configuration should be folded into the server (as network.eth0.vlan, network.eth0.dhcp, etc.). My logic is that API objects should only exist where something exists with state which is persistent and independent of other objects. server, drives, and ownership of resources such as static IPs or VLANs all fulfill this. Network configuration does not - essentially this is just configuration of a network interface on a server. As such, it's much simpler to fold the configuration into the server object itself, rather than splitting it out into a separate "configuration object" and linking to it from the main "server object". Richard Davies wrote, commenting on the network section:
[45a73b80-c957-4ae1-97c6-b70652eba1d1]
Again, maybe a 'name'?
category = network content.vlan = 4095 content.dhcp = true content.subnet = 192.168.0.0 content.netmask = 255.255.0.0 content.gateway = 192.168.0.1
Once again, I'd take the 'content' prefix off all of these.
The keys you list here work when the network interface is on a private VLAN, but are the wrong set when it is on the public internet.
On the public internet, the cloud vendor, not the user, defines most of these parameters and need to be able to control the customer VM from "stealing" IPs from other customers.
The customer has access to a defined set of static IPs which they have purchased or alternatively a free dynamic IP assigned at boot, and all they should be able to specify is which of these they want on this particular interface, and whether they want to receive a DHCP for it.
For instance, ElasticHosts currently specifies as:
ip = <specified static IP address or 'auto' to assign dynamically at boot> dhcp = <ip address to send by dhcp or 'auto'; no dhcp if not present>
Given that the customer will have a set of static IPs which they have purchased (common concept across Amazon, ElasticHosts, GoGrid, etc.), the API also needs an ability for them to list what these are!
av.com.cisco.cdp = true