In the more recent versions you have to use 'use_cloud_init=True' in the api, which isn't described in most documentation yet. Maybe thats the reason it isn't working?
Here's a working snippet:
vm = api.vms.get(name=vm_name)
action = params.Action(
use_cloud_init=True,
vm=params.VM(
initialization=params.Initialization(
regenerate_ssh_keys=True,
host_name=vm_fqdn,
nic_configurations=params.GuestNicsConfiguration(
nic_configuration=[
params.GuestNicConfiguration(
name="eth0",
boot_protocol="static",
on_boot=True,
ip=params.IP(
address=vm_address,
netmask=vm_netmask,
gateway=vm_gateway,
),
),
],
),
),
),
)
vm.start(action)