After digging through the source code, I believe I've tracked the problem down to the following call in _tasks.py in Shade:
class ServerCreate(task_manager.Task):
def main(self, client):
return client.nova_client.servers.create(**self.args)
This appears to be calling the following method from servers.py in novaclient:
def create(self, name, image, flavor, meta=None ... and a bunch more parameters with default values)
I can only assume that self.args is only expanding into two values instead of the expected minimum 4.
I don't know where the value of self.args comes from, however. I'm definitely passing a "name", "flavor", and "image" to the os_server module.
Rich