summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rwxr-xr-xbin/cluster7
-rwxr-xr-xbin/ohi4
-rw-r--r--bin/openshift_ansible/awsutil.py37
-rwxr-xr-xbin/oscp79
-rwxr-xr-xbin/ossh92
-rwxr-xr-xbin/ossh_bash_completion6
-rw-r--r--bin/ossh_zsh_completion6
7 files changed, 82 insertions, 149 deletions
diff --git a/bin/cluster b/bin/cluster
index c3b101c98..ecb8bc58e 100755
--- a/bin/cluster
+++ b/bin/cluster
@@ -264,6 +264,13 @@ if __name__ == '__main__':
providers = gce,aws,libvirt,openstack
"""
+ warning = ("================================================================================\n"
+ "ATTENTION: You are running a community supported utility that has not been\n"
+ "tested by Red Hat. Visit https://docs.openshift.com for supported installation\n"
+ "instructions.\n"
+ "================================================================================\n\n")
+ sys.stderr.write(warning)
+
cluster_config = ConfigParser.SafeConfigParser({
'cluster_ids': 'marketing,sales',
'validate_cluster_ids': 'False',
diff --git a/bin/ohi b/bin/ohi
index f9e76b783..9c2ce8432 100755
--- a/bin/ohi
+++ b/bin/ohi
@@ -34,6 +34,7 @@ class Ohi(object):
'openshift_ansible', \
'openshift_ansible.conf')
+ self.args = None
self.parse_cli_args()
self.parse_config_file()
@@ -57,6 +58,7 @@ class Ohi(object):
hosts = self.aws.get_host_list(clusters=self.args.cluster,
host_type=self.args.host_type,
+ sub_host_type=self.args.sub_host_type,
envs=self.args.env,
version=version,
cached=self.args.cache_only)
@@ -104,6 +106,8 @@ class Ohi(object):
parser.add_argument('-t', '--host-type', action="store", help="Which host type to use")
+ parser.add_argument('-s', '--sub-host-type', action="store", help="Which sub host type to use")
+
parser.add_argument('-l', '--user', action='store', default=None, help='username')
parser.add_argument('--cache-only', action='store_true', default=False,
diff --git a/bin/openshift_ansible/awsutil.py b/bin/openshift_ansible/awsutil.py
index 945e6a20c..11651f087 100644
--- a/bin/openshift_ansible/awsutil.py
+++ b/bin/openshift_ansible/awsutil.py
@@ -31,6 +31,7 @@ class AwsUtil(object):
host_type_aliases -- a list of aliases to common host-types (e.g. ex-node)
"""
+ self.alias_lookup = {}
host_type_aliases = host_type_aliases or {}
self.host_type_aliases = host_type_aliases
@@ -40,7 +41,6 @@ class AwsUtil(object):
def setup_host_type_alias_lookup(self):
"""Sets up the alias to host-type lookup table."""
- self.alias_lookup = {}
for key, values in self.host_type_aliases.iteritems():
for value in values:
self.alias_lookup[value] = key
@@ -101,6 +101,20 @@ class AwsUtil(object):
host_types.sort()
return host_types
+ def get_sub_host_types(self):
+ """Searches for sub-host-type tags in the inventory and returns all sub-host-types found."""
+ pattern = re.compile(r'^oo_subhosttype_(.*)')
+
+ sub_host_types = []
+ inv = self.get_inventory()
+ for key in inv.keys():
+ matched = pattern.match(key)
+ if matched:
+ sub_host_types.append(matched.group(1))
+
+ sub_host_types.sort()
+ return sub_host_types
+
def get_security_groups(self):
"""Searches for security_groups in the inventory and returns all SGs found."""
pattern = re.compile(r'^security_group_(.*)')
@@ -123,13 +137,13 @@ class AwsUtil(object):
inst_by_env = {}
for _, host in inv['_meta']['hostvars'].items():
# If you don't have an environment tag, we're going to ignore you
- if 'ec2_tag_environment' not in host:
+ if 'oo_environment' not in host:
continue
- if host['ec2_tag_environment'] not in inst_by_env:
- inst_by_env[host['ec2_tag_environment']] = {}
- host_id = "%s:%s" % (host['ec2_tag_Name'], host['ec2_id'])
- inst_by_env[host['ec2_tag_environment']][host_id] = host
+ if host['oo_environment'] not in inst_by_env:
+ inst_by_env[host['oo_environment']] = {}
+ host_id = "%s:%s" % (host['oo_name'], host['oo_id'])
+ inst_by_env[host['oo_environment']][host_id] = host
return inst_by_env
@@ -192,9 +206,15 @@ class AwsUtil(object):
host_type = self.resolve_host_type(host_type)
return "oo_hosttype_%s" % host_type
+ @staticmethod
+ def gen_sub_host_type_tag(sub_host_type):
+ """Generate the host type tag
+ """
+ return "oo_subhosttype_%s" % sub_host_type
+
# This function uses all of these params to perform a filters on our host inventory.
# pylint: disable=too-many-arguments
- def get_host_list(self, clusters=None, host_type=None, envs=None, version=None, cached=False):
+ def get_host_list(self, clusters=None, host_type=None, sub_host_type=None, envs=None, version=None, cached=False):
"""Get the list of hosts from the inventory using host-type and environment
"""
retval = set([])
@@ -229,6 +249,9 @@ class AwsUtil(object):
if host_type:
retval.intersection_update(inv.get(self.gen_host_type_tag(host_type, version), []))
+ if sub_host_type:
+ retval.intersection_update(inv.get(self.gen_sub_host_type_tag(sub_host_type), []))
+
if version != 'all':
retval.intersection_update(inv.get(AwsUtil.gen_version_tag(version), []))
diff --git a/bin/oscp b/bin/oscp
index 203b9d6da..4d3286ed8 100755
--- a/bin/oscp
+++ b/bin/oscp
@@ -14,6 +14,8 @@ CONFIG_MAIN_SECTION = 'main'
class Oscp(object):
def __init__(self):
+ self.host = None
+ self.user = ''
self.file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)))
# Default the config path to /etc
@@ -56,8 +58,6 @@ class Oscp(object):
def parse_cli_args(self):
parser = argparse.ArgumentParser(description='OpenShift Online SSH Tool.')
- parser.add_argument('-e', '--env',
- action="store", help="Environment where this server exists.")
parser.add_argument('-d', '--debug', default=False,
action="store_true", help="debug mode")
parser.add_argument('-v', '--verbose', default=False,
@@ -82,8 +82,6 @@ class Oscp(object):
def process_host(self):
'''Determine host name and user name for SSH.
'''
- self.user = ''
-
# is the first param passed a valid file?
if os.path.isfile(self.args.src) or os.path.isdir(self.args.src):
self.local_src = True
@@ -108,76 +106,34 @@ class Oscp(object):
self.host = search.groups()[0]
self.path = search.groups()[1]
- if self.args.env:
- self.env = self.args.env
- elif "." in self.host:
- self.host, self.env = self.host.split(".")
- else:
- self.env = None
-
def get_hosts(self, refresh_cache=False):
- '''Query our host inventory and return a dict where the format
- equals:
-
- dict['environment'] = [{'servername' : {}}, ]
- '''
+ '''Query our host inventory and return a dict where the format '''
if refresh_cache:
- self.host_inventory = self.aws.build_host_dict_by_env(['--refresh-cache'])
+ self.host_inventory = self.aws.get_inventory(['--refresh-cache'])['_meta']['hostvars']
else:
- self.host_inventory = self.aws.build_host_dict_by_env()
+ self.host_inventory = self.aws.get_inventory()['_meta']['hostvars']
def select_host(self):
'''select host attempts to match the host specified
on the command line with a list of hosts.
'''
- results = []
- for env in self.host_inventory.keys():
- for hostname, server_info in self.host_inventory[env].items():
- if hostname.split(':')[0] == self.host:
- results.append((hostname, server_info))
-
- # attempt to select the correct environment if specified
- if self.env:
- results = filter(lambda result: result[1]['oo_environment'] == self.env, results)
-
- if results:
- return results
+ results = None
+ if self.host_inventory.has_key(self.host):
+ results = (self.host, self.host_inventory[self.host])
else:
print "Could not find specified host: %s." % self.host
# default - no results found.
- return None
+ return results
def list_hosts(self, limit=None):
'''Function to print out the host inventory.
Takes a single parameter to limit the number of hosts printed.
'''
-
- if self.env:
- results = self.select_host()
- if len(results) == 1:
- hostname, server_info = results[0]
- sorted_keys = server_info.keys()
- sorted_keys.sort()
- for key in sorted_keys:
- print '{0:<35} {1}'.format(key, server_info[key])
- else:
- for host_id, server_info in results[:limit]:
- print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
- '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
-
- if limit:
- print
- print 'Showing only the first %d results...' % limit
- print
-
- else:
- for env, host_ids in self.host_inventory.items():
- for host_id, server_info in host_ids.items():
- print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
- '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
-
+ for host_id, server_info in self.host_inventory.items():
+ print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
+ '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
def scp(self):
'''scp files to or from a specified host
@@ -203,17 +159,10 @@ class Oscp(object):
if not results:
return # early exit, no results
- if len(results) > 1:
- print "Multiple results found for %s." % self.host
- for result in results:
- print "{oo_name:<35} {oo_clusterid:<5} {oo_environment:<5} {oo_id:<10}".format(**result[1])
- return # early exit, too many results
-
# Assume we have one and only one.
- hostname, server_info = results[0]
- dns = server_info['oo_public_ip']
+ server_info = results[1]
- host_str = "%s%s%s" % (self.user, dns, self.path)
+ host_str = "%s%s%s" % (self.user, server_info['oo_public_ip'], self.path)
if self.local_src:
scp_args.append(self.args.src)
diff --git a/bin/ossh b/bin/ossh
index 5e2506638..0dd2fb741 100755
--- a/bin/ossh
+++ b/bin/ossh
@@ -14,6 +14,8 @@ CONFIG_MAIN_SECTION = 'main'
class Ossh(object):
def __init__(self):
+ self.user = None
+ self.host = None
self.file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)))
# Default the config path to /etc
@@ -54,8 +56,6 @@ class Ossh(object):
def parse_cli_args(self):
parser = argparse.ArgumentParser(description='OpenShift Online SSH Tool.')
- parser.add_argument('-e', '--env', action="store",
- help="Which environment to search for the host ")
parser.add_argument('-d', '--debug', default=False,
action="store_true", help="debug mode")
parser.add_argument('-v', '--verbose', default=False,
@@ -83,91 +83,48 @@ class Ossh(object):
def process_host(self):
'''Determine host name and user name for SSH.
'''
- self.env = None
- self.user = None
-
- re_env = re.compile("\.(" + "|".join(self.host_inventory.keys()) + ")")
- search = re_env.search(self.args.host)
- if self.args.env:
- self.env = self.args.env
- elif search:
- # take the first?
- self.env = search.groups()[0]
- # remove env from hostname command line arg if found
- if search:
- self.args.host = re_env.split(self.args.host)[0]
+ parts = self.args.host.split('@')
# parse username if passed
- if '@' in self.args.host:
- self.user, self.host = self.args.host.split('@')
+ if len(parts) > 1:
+ self.user = parts[0]
+ self.host = parts[1]
else:
- self.host = self.args.host
+ self.host = parts[0]
+
if self.args.login_name:
self.user = self.args.login_name
- def get_hosts(self, refresh_cache=False):
- '''Query our host inventory and return a dict where the format
- equals:
- dict['servername'] = dns_name
- '''
+ def get_hosts(self, refresh_cache=False):
+ '''Query our host inventory and return a dict where the format '''
if refresh_cache:
- self.host_inventory = self.aws.build_host_dict_by_env(['--refresh-cache'])
+ self.host_inventory = self.aws.get_inventory(['--refresh-cache'])['_meta']['hostvars']
else:
- self.host_inventory = self.aws.build_host_dict_by_env()
+ self.host_inventory = self.aws.get_inventory()['_meta']['hostvars']
def select_host(self):
'''select host attempts to match the host specified
on the command line with a list of hosts.
'''
- results = []
- for env in self.host_inventory.keys():
- for hostname, server_info in self.host_inventory[env].items():
- if hostname.split(':')[0] == self.host:
- results.append((hostname, server_info))
-
- # attempt to select the correct environment if specified
- if self.env:
- results = filter(lambda result: result[1]['oo_environment'] == self.env, results)
-
- if results:
- return results
+ results = None
+ if self.host_inventory.has_key(self.host):
+ results = (self.host, self.host_inventory[self.host])
else:
print "Could not find specified host: %s." % self.host
# default - no results found.
- return None
+ return results
def list_hosts(self, limit=None):
'''Function to print out the host inventory.
Takes a single parameter to limit the number of hosts printed.
'''
-
- if self.env:
- results = self.select_host()
- if len(results) == 1:
- hostname, server_info = results[0]
- sorted_keys = server_info.keys()
- sorted_keys.sort()
- for key in sorted_keys:
- print '{0:<35} {1}'.format(key, server_info[key])
- else:
- for host_id, server_info in results[:limit]:
- print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
- '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
-
- if limit:
- print
- print 'Showing only the first %d results...' % limit
- print
-
- else:
- for env, host_ids in self.host_inventory.items():
- for host_id, server_info in host_ids.items():
- print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
- '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
+ for host_id, server_info in self.host_inventory.items():
+ print '{oo_name:<35} {oo_clusterid:<10} {oo_environment:<8} ' \
+ '{oo_id:<15} {oo_public_ip:<18} {oo_private_ip:<18}'.format(**server_info)
def ssh(self):
'''SSH to a specified host
@@ -193,17 +150,10 @@ class Ossh(object):
if not results:
return # early exit, no results
- if len(results) > 1:
- print "Multiple results found for %s." % self.host
- for result in results:
- print "{oo_name:<35} {oo_clusterid:<5} {oo_environment:<5} {oo_id:<10}".format(**result[1])
- return # early exit, too many results
-
# Assume we have one and only one.
- _, server_info = results[0]
- dns = server_info['oo_public_ip']
+ server_info = results[1]
- ssh_args.append(dns)
+ ssh_args.append(server_info['oo_public_ip'])
#last argument
if self.args.command:
diff --git a/bin/ossh_bash_completion b/bin/ossh_bash_completion
index 77b770a43..dcbde3e51 100755
--- a/bin/ossh_bash_completion
+++ b/bin/ossh_bash_completion
@@ -1,12 +1,12 @@
__ossh_known_hosts(){
if python -c 'import openshift_ansible' &>/dev/null; then
- /usr/bin/python -c 'from openshift_ansible import multi_inventory; m=multi_inventory.MultiInventory(); m.run(); z=m.result; print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])'
+ /usr/bin/python -c 'from openshift_ansible import multi_inventory; m=multi_inventory.MultiInventory(); m.run(); z=m.result; print "\n".join([name for name in z["_meta"]["hostvars"].keys()])'
elif [[ -f /dev/shm/.ansible/tmp/multi_inventory.cache ]]; then
- /usr/bin/python -c 'import json; loc="/dev/shm/.ansible/tmp/multi_inventory.cache"; z=json.loads(open(loc).read()); print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])'
+ /usr/bin/python -c 'import json; loc="/dev/shm/.ansible/tmp/multi_inventory.cache"; z=json.loads(open(loc).read()); print "\n".join([name for name in z["_meta"]["hostvars"].keys()])'
elif [[ -f ~/.ansible/tmp/multi_inventory.cache ]]; then
- /usr/bin/python -c 'import json,os; loc="%s" % os.path.expanduser("~/.ansible/tmp/multi_inventory.cache"); z=json.loads(open(loc).read()); print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])'
+ /usr/bin/python -c 'import json,os; loc="%s" % os.path.expanduser("~/.ansible/tmp/multi_inventory.cache"); z=json.loads(open(loc).read()); print "\n".join([name for name in z["_meta"]["hostvars"].keys()])'
fi
}
diff --git a/bin/ossh_zsh_completion b/bin/ossh_zsh_completion
index 170ca889b..94ea61dab 100644
--- a/bin/ossh_zsh_completion
+++ b/bin/ossh_zsh_completion
@@ -2,13 +2,13 @@
_ossh_known_hosts(){
if python -c 'import openshift_ansible' &>/dev/null; then
- print $(/usr/bin/python -c 'from openshift_ansible import multi_inventory; m=multi_inventory.MultiInventory(); m.run(); z=m.result; print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])')
+ print $(/usr/bin/python -c 'from openshift_ansible import multi_inventory; m=multi_inventory.MultiInventory(); m.run(); z=m.result; print "\n".join([name for name in z["_meta"]["hostvars"].keys()])')
elif [[ -f /dev/shm/.ansible/tmp/multi_inventory.cache ]]; then
- print $(/usr/bin/python -c 'import json; loc="/dev/shm/.ansible/tmp/multi_inventory.cache"; z=json.loads(open(loc).read()); print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])')
+ print $(/usr/bin/python -c 'import json; loc="/dev/shm/.ansible/tmp/multi_inventory.cache"; z=json.loads(open(loc).read()); print "\n".join([name for name in z["_meta"]["hostvars"].keys() ])')
elif [[ -f ~/.ansible/tmp/multi_inventory.cache ]]; then
- print $(/usr/bin/python -c 'import json,os; loc="%s" % os.path.expanduser("~/.ansible/tmp/multi_inventory.cache"); z=json.loads(open(loc).read()); print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items() if all(k in host for k in ("oo_name", "oo_environment"))])')
+ print $(/usr/bin/python -c 'import json,os; loc="%s" % os.path.expanduser("~/.ansible/tmp/multi_inventory.cache"); z=json.loads(open(loc).read()); print "\n".join([name for name in z["_meta"]["hostvars"].keys() ])')
fi