Merge pull request #14471 from willdurand/contrib-do-inventory
[contrib] Add option to define group vars in DigitalOcean dynamic inventory script
This commit is contained in:
commit
d026bc5e17
2 changed files with 23 additions and 9 deletions
|
@ -26,3 +26,9 @@ cache_max_age = 300
|
||||||
# Use the private network IP address instead of the public when available.
|
# Use the private network IP address instead of the public when available.
|
||||||
#
|
#
|
||||||
use_private_network = False
|
use_private_network = False
|
||||||
|
|
||||||
|
# Pass variables to every group, e.g.:
|
||||||
|
#
|
||||||
|
# group_variables = { 'ansible_user': 'root' }
|
||||||
|
#
|
||||||
|
group_variables = {}
|
||||||
|
|
|
@ -137,6 +137,7 @@ import re
|
||||||
import argparse
|
import argparse
|
||||||
from time import time
|
from time import time
|
||||||
import ConfigParser
|
import ConfigParser
|
||||||
|
import ast
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import json
|
import json
|
||||||
|
@ -168,6 +169,7 @@ class DigitalOceanInventory(object):
|
||||||
self.cache_path = '.'
|
self.cache_path = '.'
|
||||||
self.cache_max_age = 0
|
self.cache_max_age = 0
|
||||||
self.use_private_network = False
|
self.use_private_network = False
|
||||||
|
self.group_variables = {}
|
||||||
|
|
||||||
# Read settings, environment variables, and CLI arguments
|
# Read settings, environment variables, and CLI arguments
|
||||||
self.read_settings()
|
self.read_settings()
|
||||||
|
@ -261,6 +263,10 @@ or environment variables (DO_API_TOKEN)''')
|
||||||
if config.has_option('digital_ocean', 'use_private_network'):
|
if config.has_option('digital_ocean', 'use_private_network'):
|
||||||
self.use_private_network = config.get('digital_ocean', 'use_private_network')
|
self.use_private_network = config.get('digital_ocean', 'use_private_network')
|
||||||
|
|
||||||
|
# Group variables
|
||||||
|
if config.has_option('digital_ocean', 'group_variables'):
|
||||||
|
self.group_variables = ast.literal_eval(config.get('digital_ocean', 'group_variables'))
|
||||||
|
|
||||||
def read_environment(self):
|
def read_environment(self):
|
||||||
''' Reads the settings from environment variables '''
|
''' Reads the settings from environment variables '''
|
||||||
# Setup credentials
|
# Setup credentials
|
||||||
|
@ -359,22 +365,24 @@ or environment variables (DO_API_TOKEN)''')
|
||||||
else:
|
else:
|
||||||
dest = droplet['ip_address']
|
dest = droplet['ip_address']
|
||||||
|
|
||||||
self.inventory[droplet['id']] = [dest]
|
dest = { 'hosts': [ dest ], 'vars': self.group_variables }
|
||||||
self.push(self.inventory, droplet['name'], dest)
|
|
||||||
self.push(self.inventory, 'region_' + droplet['region']['slug'], dest)
|
self.inventory[droplet['id']] = dest
|
||||||
self.push(self.inventory, 'image_' + str(droplet['image']['id']), dest)
|
self.inventory[droplet['name']] = dest
|
||||||
self.push(self.inventory, 'size_' + droplet['size']['slug'], dest)
|
self.inventory['region_' + droplet['region']['slug']] = dest
|
||||||
|
self.inventory['image_' + str(droplet['image']['id'])] = dest
|
||||||
|
self.inventory['size_' + droplet['size']['slug']] = dest
|
||||||
|
|
||||||
image_slug = droplet['image']['slug']
|
image_slug = droplet['image']['slug']
|
||||||
if image_slug:
|
if image_slug:
|
||||||
self.push(self.inventory, 'image_' + self.to_safe(image_slug), dest)
|
self.inventory['image_' + self.to_safe(image_slug)] = dest
|
||||||
else:
|
else:
|
||||||
image_name = droplet['image']['name']
|
image_name = droplet['image']['name']
|
||||||
if image_name:
|
if image_name:
|
||||||
self.push(self.inventory, 'image_' + self.to_safe(image_name), dest)
|
self.inventory['image_' + self.to_safe(image_name)] = dest
|
||||||
|
|
||||||
self.push(self.inventory, 'distro_' + self.to_safe(droplet['image']['distribution']), dest)
|
self.inventory['distro_' + self.to_safe(droplet['image']['distribution'])] = dest
|
||||||
self.push(self.inventory, 'status_' + droplet['status'], dest)
|
self.inventory['status_' + droplet['status']] = dest
|
||||||
|
|
||||||
|
|
||||||
def load_droplet_variables_for_host(self):
|
def load_droplet_variables_for_host(self):
|
||||||
|
|
Loading…
Reference in a new issue