summaryrefslogtreecommitdiffstats
path: root/inventory
diff options
context:
space:
mode:
Diffstat (limited to 'inventory')
-rwxr-xr-xinventory/multi_ec2.py26
-rw-r--r--inventory/multi_ec2.yaml.example3
-rw-r--r--inventory/openshift-ansible-inventory.spec13
3 files changed, 37 insertions, 5 deletions
diff --git a/inventory/multi_ec2.py b/inventory/multi_ec2.py
index 35ac6c7a8..063a80300 100755
--- a/inventory/multi_ec2.py
+++ b/inventory/multi_ec2.py
@@ -11,9 +11,12 @@ import yaml
import os
import subprocess
import json
+import errno
+import fcntl
CONFIG_FILE_NAME = 'multi_ec2.yaml'
+DEFAULT_CACHE_PATH = os.path.expanduser('~/.ansible/tmp/multi_ec2_inventory.cache')
class MultiEc2(object):
'''
@@ -27,7 +30,6 @@ class MultiEc2(object):
self.config = None
self.all_ec2_results = {}
self.result = {}
- self.cache_path = os.path.expanduser('~/.ansible/tmp/multi_ec2_inventory.cache')
self.file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)))
same_dir_config_file = os.path.join(self.file_path, CONFIG_FILE_NAME)
@@ -48,10 +50,12 @@ class MultiEc2(object):
self.config = self.load_yaml_config()
elif os.environ.has_key("AWS_ACCESS_KEY_ID") and \
os.environ.has_key("AWS_SECRET_ACCESS_KEY"):
+ # Build a default config
self.config = {}
self.config['accounts'] = [
{
'name': 'default',
+ 'cache_location': DEFAULT_CACHE_PATH,
'provider': 'aws/hosts/ec2.py',
'env_vars': {
'AWS_ACCESS_KEY_ID': os.environ["AWS_ACCESS_KEY_ID"],
@@ -64,6 +68,11 @@ class MultiEc2(object):
else:
raise RuntimeError("Could not find valid ec2 credentials in the environment.")
+ # Set the default cache path but if its defined we'll assign it.
+ self.cache_path = DEFAULT_CACHE_PATH
+ if self.config.has_key('cache_location'):
+ self.cache_path = self.config['cache_location']
+
if self.args.refresh_cache:
self.get_inventory()
self.write_to_cache()
@@ -222,9 +231,22 @@ class MultiEc2(object):
def write_to_cache(self):
''' Writes data in JSON format to a file '''
+ # if it does not exist, try and create it.
+ if not os.path.isfile(self.cache_path):
+ path = os.path.dirname(self.cache_path)
+ try:
+ os.makedirs(path)
+ except OSError as exc:
+ if exc.errno != errno.EEXIST or not os.path.isdir(path):
+ raise
+
json_data = MultiEc2.json_format_dict(self.result, True)
with open(self.cache_path, 'w') as cache:
- cache.write(json_data)
+ try:
+ fcntl.flock(cache, fcntl.LOCK_EX)
+ cache.write(json_data)
+ finally:
+ fcntl.flock(cache, fcntl.LOCK_UN)
def get_inventory_from_cache(self):
''' Reads the inventory from the cache file and returns it as a JSON
diff --git a/inventory/multi_ec2.yaml.example b/inventory/multi_ec2.yaml.example
index 91e7c7970..d8361a49f 100644
--- a/inventory/multi_ec2.yaml.example
+++ b/inventory/multi_ec2.yaml.example
@@ -1,4 +1,7 @@
# multi ec2 inventory configs
+#
+cache_location: ~/.ansible/tmp/multi_ec2_inventory.cache
+
accounts:
- name: aws1
provider: aws/hosts/ec2.py
diff --git a/inventory/openshift-ansible-inventory.spec b/inventory/openshift-ansible-inventory.spec
index 8267e16f6..f7ca67138 100644
--- a/inventory/openshift-ansible-inventory.spec
+++ b/inventory/openshift-ansible-inventory.spec
@@ -1,6 +1,6 @@
Summary: OpenShift Ansible Inventories
Name: openshift-ansible-inventory
-Version: 0.0.2
+Version: 0.0.3
Release: 1%{?dist}
License: ASL 2.0
URL: https://github.com/openshift/openshift-ansible
@@ -25,8 +25,8 @@ mkdir -p %{buildroot}/usr/share/ansible/inventory/gce
cp -p multi_ec2.py %{buildroot}/usr/share/ansible/inventory
cp -p multi_ec2.yaml.example %{buildroot}/etc/ansible/multi_ec2.yaml
-cp -p aws/ec2.py aws/ec2.ini %{buildroot}/usr/share/ansible/inventory/aws
-cp -p gce/gce.py %{buildroot}/usr/share/ansible/inventory/gce
+cp -p aws/hosts/ec2.py aws/hosts/ec2.ini %{buildroot}/usr/share/ansible/inventory/aws
+cp -p gce/hosts/gce.py %{buildroot}/usr/share/ansible/inventory/gce
%files
%config(noreplace) /etc/ansible/*
@@ -37,6 +37,13 @@ cp -p gce/gce.py %{buildroot}/usr/share/ansible/inventory/gce
/usr/share/ansible/inventory/gce/gce.py*
%changelog
+* Thu May 07 2015 Thomas Wiest <twiest@redhat.com> 0.0.3-1
+- fixed build problems with openshift-ansible-inventory.spec
+ (twiest@redhat.com)
+- Allow option in multi_ec2 to set cache location. (kwoodson@redhat.com)
+- Add ansible_connection=local to localhost in inventory (jdetiber@redhat.com)
+- Adding refresh-cache option and cleanup for pylint. Also updated for
+ aws/hosts/ being added. (kwoodson@redhat.com)
* Thu Mar 26 2015 Thomas Wiest <twiest@redhat.com> 0.0.2-1
- added the ability to have a config file in /etc/openshift_ansible to
multi_ec2.py. (twiest@redhat.com)