Skip to content

Commit c98a3f2

Browse files
committed
Update digital_ocean.py script from Ansible repository.
1 parent deabf0f commit c98a3f2

File tree

1 file changed

+25
-18
lines changed

1 file changed

+25
-18
lines changed

dynamic-inventory/digitalocean/digital_ocean.py

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,7 @@
149149
except ImportError:
150150
import configparser as ConfigParser
151151

152-
try:
153-
import json
154-
except ImportError:
155-
import simplejson as json
152+
import json
156153

157154

158155
class DoManager:
@@ -224,7 +221,7 @@ def show_droplet(self, droplet_id):
224221
return resp['droplet']
225222

226223
def all_tags(self):
227-
resp = self.send('tags/')
224+
resp = self.send('tags')
228225
return resp['tags']
229226

230227

@@ -323,7 +320,7 @@ def __init__(self):
323320

324321
def read_settings(self):
325322
""" Reads the settings from the digital_ocean.ini file """
326-
config = ConfigParser.SafeConfigParser()
323+
config = ConfigParser.ConfigParser()
327324
config_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'digital_ocean.ini')
328325
config.read(config_path)
329326

@@ -429,6 +426,21 @@ def load_from_digital_ocean(self, resource=None):
429426
self.data['tags'] = self.manager.all_tags()
430427
self.cache_refreshed = True
431428

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+
432444
def build_inventory(self):
433445
""" Build Ansible inventory of droplets """
434446
self.inventory = {
@@ -449,8 +461,9 @@ def build_inventory(self):
449461

450462
self.inventory['all']['hosts'].append(dest)
451463

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)
454467

455468
# groups that are always present
456469
for group in ('digital_ocean',
@@ -459,24 +472,18 @@ def build_inventory(self):
459472
'size_' + droplet['size']['slug'],
460473
'distro_' + DigitalOceanInventory.to_safe(droplet['image']['distribution']),
461474
'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)
465476

466477
# groups that are not always present
467478
for group in (droplet['image']['slug'],
468479
droplet['image']['name']):
469480
if group:
470481
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)
474483

475484
if droplet['tags']:
476485
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)
480487

481488
# hostvars
482489
info = self.do_namespace(droplet)
@@ -541,4 +548,4 @@ def do_namespace(data):
541548

542549
###########################################################################
543550
# Run the script
544-
DigitalOceanInventory()
551+
DigitalOceanInventory()

0 commit comments

Comments
 (0)