@@ -102,6 +102,42 @@ def get_object(cls, api_token, droplet_id):
102102 droplet .load ()
103103 return droplet
104104
105+ @classmethod
106+ def create_multiple (* args , ** kwargs ):
107+ api = BaseAPI (token = kwargs .get ("token" ))
108+
109+ data = {
110+ "names" : kwargs .get ("names" ),
111+ "size" : kwargs .get ("size_slug" ) or kwargs .get ("size" ),
112+ "image" : kwargs .get ("image" ),
113+ "region" : kwargs .get ("region" ),
114+ "backups" : bool (kwargs .get ("backups" )),
115+ "ipv6" : bool (kwargs .get ("ipv6" )),
116+ "private_networking" : bool (kwargs .get ("private_networking" )),
117+ }
118+
119+ if kwargs .get ("ssh_keys" ):
120+ data ["ssh_keys" ] = Droplet .__get_ssh_keys_id_or_fingerprint (
121+ kwargs ["ssh_keys" ], kwargs .get ("token" ),
122+ kwargs ["names" ][0 ])
123+
124+ if kwargs .get ("user_data" ):
125+ data ["user_data" ] = kwargs ["user_data" ]
126+
127+ droplets = []
128+
129+ data = api .get_data ("droplets" , type = POST , params = data )
130+
131+ if data :
132+ action_ids = [data ["links" ]["actions" ][0 ]["id" ]]
133+ for droplet_json in data ["droplets" ]:
134+ droplet_json ["token" ] = kwargs ["token" ]
135+ droplet = Droplet (** droplet_json )
136+ droplet .action_ids = action_ids
137+ droplets .append (droplet )
138+
139+ return droplets
140+
105141 def __check_actions_in_data (self , data ):
106142 # reloading actions if actions is provided.
107143 if u"actions" in data :
@@ -429,14 +465,15 @@ def change_kernel(self, kernel, return_dict=True):
429465 return_dict
430466 )
431467
432- def __get_ssh_keys_id_or_fingerprint (self ):
468+ @staticmethod
469+ def __get_ssh_keys_id_or_fingerprint (ssh_keys , token , name ):
433470 """
434471 Check and return a list of SSH key IDs or fingerprints according
435472 to DigitalOcean's API. This method is used to check and create a
436473 droplet with the correct SSH keys.
437474 """
438475 ssh_keys_id = list ()
439- for ssh_key in self . ssh_keys :
476+ for ssh_key in ssh_keys :
440477 if type (ssh_key ) in [int , type (2 ** 64 )]:
441478 ssh_keys_id .append (int (ssh_key ))
442479
@@ -457,12 +494,12 @@ def __get_ssh_keys_id_or_fingerprint(self):
457494
458495 else :
459496 key = SSHKey ()
460- key .token = self . token
497+ key .token = token
461498 results = key .load_by_pub_key (ssh_key )
462499
463500 if results is None :
464501 key .public_key = ssh_key
465- key .name = "SSH Key %s" % self . name
502+ key .name = "SSH Key %s" % name
466503 key .create ()
467504 else :
468505 key = results
@@ -490,12 +527,16 @@ def create(self, *args, **kwargs):
490527 if not self .size_slug and self .size :
491528 self .size_slug = self .size
492529
530+ ssh_keys_id = Droplet .__get_ssh_keys_id_or_fingerprint (self .ssh_keys ,
531+ self .token ,
532+ self .name )
533+
493534 data = {
494535 "name" : self .name ,
495536 "size" : self .size_slug ,
496537 "image" : self .image ,
497538 "region" : self .region ,
498- "ssh_keys" : self . __get_ssh_keys_id_or_fingerprint () ,
539+ "ssh_keys" : ssh_keys_id ,
499540 "backups" : bool (self .backups ),
500541 "ipv6" : bool (self .ipv6 ),
501542 "private_networking" : bool (self .private_networking ),
0 commit comments