summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorTom Berger <tom.berger@gmail.com>2014-10-28 09:35:21 +0100
committerAbhijit Menon-Sen <ams@2ndQuadrant.com>2015-08-11 15:17:32 +0200
commit804489f7340c6637dde15f1867c85dd296ccecb1 (patch)
tree0a9c95825869552bc9770b21b825af03f5df95c0 /contrib
parentFixing bug related to listify changes (diff)
downloadansible-804489f7340c6637dde15f1867c85dd296ccecb1.tar.xz
ansible-804489f7340c6637dde15f1867c85dd296ccecb1.zip
Cache the results for the RackSpace dynamic inventory.
Diffstat (limited to 'contrib')
-rwxr-xr-xcontrib/inventory/rax.py31
1 files changed, 28 insertions, 3 deletions
diff --git a/contrib/inventory/rax.py b/contrib/inventory/rax.py
index 10b72d322b..41eb9ed317 100755
--- a/contrib/inventory/rax.py
+++ b/contrib/inventory/rax.py
@@ -167,6 +167,10 @@ except ImportError:
print('pyrax is required for this module')
sys.exit(1)
+from tempfile import gettempdir
+from time import time
+
+
NON_CALLABLES = (basestring, bool, dict, int, list, type(None))
@@ -214,7 +218,7 @@ def host(regions, hostname):
print(json.dumps(hostvars, sort_keys=True, indent=4))
-def _list(regions):
+def _list_into_cache(regions):
groups = collections.defaultdict(list)
hostvars = collections.defaultdict(dict)
images = {}
@@ -334,7 +338,25 @@ def _list(regions):
if hostvars:
groups['_meta'] = {'hostvars': hostvars}
- print(json.dumps(groups, sort_keys=True, indent=4))
+
+ with open(get_cache_file_path(), 'w') as cache_file:
+ json.dump(groups, cache_file)
+
+
+def get_cache_file_path():
+ return os.path.join(gettempdir(), 'ansible-rax.cache')
+
+
+def _list(regions, refresh_cache=True):
+ if (not os.path.exists(get_cache_file_path()) or
+ refresh_cache or
+ (time() - os.stat(get_cache_file_path())[-1]) > 600):
+ # Cache file doesn't exist or older than 10m or refresh cache requested
+ _list_into_cache(regions)
+
+ with open(get_cache_file_path(), 'r') as cache_file:
+ groups = json.load(cache_file)
+ print(json.dumps(groups, sort_keys=True, indent=4))
def parse_args():
@@ -344,6 +366,9 @@ def parse_args():
group.add_argument('--list', action='store_true',
help='List active servers')
group.add_argument('--host', help='List details about the specific host')
+ parser.add_argument('--refresh-cache', action='store_true', default=False,
+ help=('Force refresh of cache, making API requests to'
+ 'RackSpace (default: False - use cache files)'))
return parser.parse_args()
@@ -410,7 +435,7 @@ def main():
args = parse_args()
regions = setup()
if args.list:
- _list(regions)
+ _list(regions, refresh_cache=args.refresh_cache)
elif args.host:
host(regions, args.host)
sys.exit(0)