mirror of
https://github.com/ansible/awx.git
synced 2026-03-10 22:19:28 -02:30
Updating rax module from ansible
This commit is contained in:
@@ -153,6 +153,8 @@ import warnings
|
|||||||
import collections
|
import collections
|
||||||
import ConfigParser
|
import ConfigParser
|
||||||
|
|
||||||
|
from six import iteritems
|
||||||
|
|
||||||
from ansible.constants import get_config, mk_boolean
|
from ansible.constants import get_config, mk_boolean
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -167,6 +169,9 @@ except ImportError:
|
|||||||
print('pyrax is required for this module')
|
print('pyrax is required for this module')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
from time import time
|
||||||
|
|
||||||
|
|
||||||
NON_CALLABLES = (basestring, bool, dict, int, list, type(None))
|
NON_CALLABLES = (basestring, bool, dict, int, list, type(None))
|
||||||
|
|
||||||
|
|
||||||
@@ -214,7 +219,7 @@ def host(regions, hostname):
|
|||||||
print(json.dumps(hostvars, sort_keys=True, indent=4))
|
print(json.dumps(hostvars, sort_keys=True, indent=4))
|
||||||
|
|
||||||
|
|
||||||
def _list(regions):
|
def _list_into_cache(regions):
|
||||||
groups = collections.defaultdict(list)
|
groups = collections.defaultdict(list)
|
||||||
hostvars = collections.defaultdict(dict)
|
hostvars = collections.defaultdict(dict)
|
||||||
images = {}
|
images = {}
|
||||||
@@ -242,7 +247,7 @@ def _list(regions):
|
|||||||
if cs is None:
|
if cs is None:
|
||||||
warnings.warn(
|
warnings.warn(
|
||||||
'Connecting to Rackspace region "%s" has caused Pyrax to '
|
'Connecting to Rackspace region "%s" has caused Pyrax to '
|
||||||
'return a NoneType. Is this a valid region?' % region,
|
'return None. Is this a valid region?' % region,
|
||||||
RuntimeWarning)
|
RuntimeWarning)
|
||||||
continue
|
continue
|
||||||
for server in cs.servers.list():
|
for server in cs.servers.list():
|
||||||
@@ -264,7 +269,7 @@ def _list(regions):
|
|||||||
|
|
||||||
hostvars[server.name]['rax_region'] = region
|
hostvars[server.name]['rax_region'] = region
|
||||||
|
|
||||||
for key, value in server.metadata.iteritems():
|
for key, value in iteritems(server.metadata):
|
||||||
groups['%s_%s_%s' % (prefix, key, value)].append(server.name)
|
groups['%s_%s_%s' % (prefix, key, value)].append(server.name)
|
||||||
|
|
||||||
groups['instance-%s' % server.id].append(server.name)
|
groups['instance-%s' % server.id].append(server.name)
|
||||||
@@ -334,7 +339,31 @@ def _list(regions):
|
|||||||
|
|
||||||
if hostvars:
|
if hostvars:
|
||||||
groups['_meta'] = {'hostvars': hostvars}
|
groups['_meta'] = {'hostvars': hostvars}
|
||||||
print(json.dumps(groups, sort_keys=True, indent=4))
|
|
||||||
|
with open(get_cache_file_path(regions), 'w') as cache_file:
|
||||||
|
json.dump(groups, cache_file)
|
||||||
|
|
||||||
|
|
||||||
|
def get_cache_file_path(regions):
|
||||||
|
regions_str = '.'.join([reg.strip().lower() for reg in regions])
|
||||||
|
ansible_tmp_path = os.path.join(os.path.expanduser("~"), '.ansible', 'tmp')
|
||||||
|
if not os.path.exists(ansible_tmp_path):
|
||||||
|
os.makedirs(ansible_tmp_path)
|
||||||
|
return os.path.join(ansible_tmp_path,
|
||||||
|
'ansible-rax-%s-%s.cache' % (
|
||||||
|
pyrax.identity.username, regions_str))
|
||||||
|
|
||||||
|
|
||||||
|
def _list(regions, refresh_cache=True):
|
||||||
|
if (not os.path.exists(get_cache_file_path(regions)) or
|
||||||
|
refresh_cache or
|
||||||
|
(time() - os.stat(get_cache_file_path(regions))[-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(regions), 'r') as cache_file:
|
||||||
|
groups = json.load(cache_file)
|
||||||
|
print(json.dumps(groups, sort_keys=True, indent=4))
|
||||||
|
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
@@ -344,6 +373,9 @@ def parse_args():
|
|||||||
group.add_argument('--list', action='store_true',
|
group.add_argument('--list', action='store_true',
|
||||||
help='List active servers')
|
help='List active servers')
|
||||||
group.add_argument('--host', help='List details about the specific host')
|
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()
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
@@ -382,7 +414,7 @@ def setup():
|
|||||||
pyrax.keyring_auth(keyring_username, region=region)
|
pyrax.keyring_auth(keyring_username, region=region)
|
||||||
else:
|
else:
|
||||||
pyrax.set_credential_file(creds_file, region=region)
|
pyrax.set_credential_file(creds_file, region=region)
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
sys.stderr.write("%s: %s\n" % (e, e.message))
|
sys.stderr.write("%s: %s\n" % (e, e.message))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
@@ -410,7 +442,7 @@ def main():
|
|||||||
args = parse_args()
|
args = parse_args()
|
||||||
regions = setup()
|
regions = setup()
|
||||||
if args.list:
|
if args.list:
|
||||||
_list(regions)
|
_list(regions, refresh_cache=args.refresh_cache)
|
||||||
elif args.host:
|
elif args.host:
|
||||||
host(regions, args.host)
|
host(regions, args.host)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|||||||
Reference in New Issue
Block a user