def create_server(self, name, image_ref, flavor_ref, **kwargs): """ Creates an instance of a server. name (Required): The name of the server. image_ref (Required): Reference to the image used to build the server. flavor_ref (Required): The flavor used to build the server. Following optional keyword arguments are accepted: adminPass: Sets the initial root password. key_name: Key name of keypair that was created earlier. meta: A dictionary of values to be used as metadata. personality: A list of dictionaries for files to be injected into the server. security_groups: A list of security group dicts. networks: A list of network dicts with UUID and fixed_ip. user_data: User data for instance. availability_zone: Availability zone in which to launch instance. accessIPv4: The IPv4 access address for the server. accessIPv6: The IPv6 access address for the server. min_count: Count of minimum number of instances to launch. max_count: Count of maximum number of instances to launch. disk_config: Determines if user or admin controls disk configuration. """ server = Element("server", xmlns=XMLNS_11, imageRef=image_ref, flavorRef=flavor_ref, name=name) for attr in ["adminPass", "accessIPv4", "accessIPv6", "key_name", "user_data", "availability_zone", "min_count", "max_count", "return_reservation_id"]: if attr in kwargs: server.add_attr(attr, kwargs[attr]) if 'disk_config' in kwargs: server.add_attr('xmlns:OS-DCF', "http://docs.openstack.org/" "compute/ext/disk_config/api/v1.1") server.add_attr('OS-DCF:diskConfig', kwargs['disk_config']) if 'security_groups' in kwargs: secgroups = Element("security_groups") server.append(secgroups) for secgroup in kwargs['security_groups']: s = Element("security_group", name=secgroup['name']) secgroups.append(s) if 'networks' in kwargs: networks = Element("networks") server.append(networks) for network in kwargs['networks']: s = Element("network", uuid=network['uuid'], fixed_ip=network['fixed_ip']) networks.append(s) if 'meta' in kwargs: metadata = Element("metadata") server.append(metadata) for k, v in kwargs['meta'].items(): meta = Element("meta", key=k) meta.append(Text(v)) metadata.append(meta) if 'personality' in kwargs: personality = Element('personality') server.append(personality) for k in kwargs['personality']: temp = Element('file', path=k['path']) temp.append(Text(k['contents'])) personality.append(temp) resp, body = self.post('servers', str(Document(server)), self.headers) server = self._parse_server(etree.fromstring(body)) return resp, server