149
149
except ImportError :
150
150
import configparser as ConfigParser
151
151
152
- try :
153
- import json
154
- except ImportError :
155
- import simplejson as json
152
+ import json
156
153
157
154
158
155
class DoManager :
@@ -224,7 +221,7 @@ def show_droplet(self, droplet_id):
224
221
return resp ['droplet' ]
225
222
226
223
def all_tags (self ):
227
- resp = self .send ('tags/ ' )
224
+ resp = self .send ('tags' )
228
225
return resp ['tags' ]
229
226
230
227
@@ -323,7 +320,7 @@ def __init__(self):
323
320
324
321
def read_settings (self ):
325
322
""" Reads the settings from the digital_ocean.ini file """
326
- config = ConfigParser .SafeConfigParser ()
323
+ config = ConfigParser .ConfigParser ()
327
324
config_path = os .path .join (os .path .dirname (os .path .realpath (__file__ )), 'digital_ocean.ini' )
328
325
config .read (config_path )
329
326
@@ -429,6 +426,21 @@ def load_from_digital_ocean(self, resource=None):
429
426
self .data ['tags' ] = self .manager .all_tags ()
430
427
self .cache_refreshed = True
431
428
429
+ def add_inventory_group (self , key ):
430
+ """ Method to create group dict """
431
+ host_dict = {'hosts' : [], 'vars' : {}}
432
+ self .inventory [key ] = host_dict
433
+ return
434
+
435
+ def add_host (self , group , host ):
436
+ """ Helper method to reduce host duplication """
437
+ if group not in self .inventory :
438
+ self .add_inventory_group (group )
439
+
440
+ if host not in self .inventory [group ]['hosts' ]:
441
+ self .inventory [group ]['hosts' ].append (host )
442
+ return
443
+
432
444
def build_inventory (self ):
433
445
""" Build Ansible inventory of droplets """
434
446
self .inventory = {
@@ -449,8 +461,9 @@ def build_inventory(self):
449
461
450
462
self .inventory ['all' ]['hosts' ].append (dest )
451
463
452
- self .inventory [droplet ['id' ]] = [dest ]
453
- self .inventory [droplet ['name' ]] = [dest ]
464
+ self .add_host (droplet ['id' ], dest )
465
+
466
+ self .add_host (droplet ['name' ], dest )
454
467
455
468
# groups that are always present
456
469
for group in ('digital_ocean' ,
@@ -459,24 +472,18 @@ def build_inventory(self):
459
472
'size_' + droplet ['size' ]['slug' ],
460
473
'distro_' + DigitalOceanInventory .to_safe (droplet ['image' ]['distribution' ]),
461
474
'status_' + droplet ['status' ]):
462
- if group not in self .inventory :
463
- self .inventory [group ] = {'hosts' : [], 'vars' : {}}
464
- self .inventory [group ]['hosts' ].append (dest )
475
+ self .add_host (group , dest )
465
476
466
477
# groups that are not always present
467
478
for group in (droplet ['image' ]['slug' ],
468
479
droplet ['image' ]['name' ]):
469
480
if group :
470
481
image = 'image_' + DigitalOceanInventory .to_safe (group )
471
- if image not in self .inventory :
472
- self .inventory [image ] = {'hosts' : [], 'vars' : {}}
473
- self .inventory [image ]['hosts' ].append (dest )
482
+ self .add_host (image , dest )
474
483
475
484
if droplet ['tags' ]:
476
485
for tag in droplet ['tags' ]:
477
- if tag not in self .inventory :
478
- self .inventory [tag ] = {'hosts' : [], 'vars' : {}}
479
- self .inventory [tag ]['hosts' ].append (dest )
486
+ self .add_host (tag , dest )
480
487
481
488
# hostvars
482
489
info = self .do_namespace (droplet )
@@ -541,4 +548,4 @@ def do_namespace(data):
541
548
542
549
###########################################################################
543
550
# Run the script
544
- DigitalOceanInventory ()
551
+ DigitalOceanInventory ()
0 commit comments