diff --git a/ceph-ansible.spec.in b/ceph-ansible.spec.in index 9882a8b8a..59efddf87 100644 --- a/ceph-ansible.spec.in +++ b/ceph-ansible.spec.in @@ -6,7 +6,6 @@ Version: @VERSION@ Release: @RELEASE@%{?dist} Summary: Ansible playbooks for Ceph # Some files have been copied from Ansible (GPLv3+). For example: -# library/ceph_facts # plugins/actions/config_template.py # roles/ceph-common/plugins/actions/config_template.py License: ASL 2.0 and GPLv3+ diff --git a/library/ceph_facts b/library/ceph_facts deleted file mode 100644 index 06b23da4c..000000000 --- a/library/ceph_facts +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# (c) 2013, Jimmy Tang -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# - -import fnmatch - -DOCUMENTATION = ''' ---- -module: ceph_facts -short_description: Runs the I(ceph) monitoring programs on the remote system -description: - - Runs the I(ceph) program to discover the filesystem status - returning JSON data that can be useful for inventory purposes. -version_added: "1.1" -options: - filter: - description: - - if supplied, only return facts that match this shell-style (fnmatch) wildcard. - required: false - default: '*' -examples: - - code: ansible monitor-ceph01.cluster -m ceph_facts - description: "Get all the possible known information from ceph cluster" - - code: ansible monitor-ceph01.cluster -m ceph_facts -a 'filter=quorum*' - description: "Get all the information related to quorum status" -notes: - - The facts are not very structured right now and requires more work. -requirements: [ "ceph" ] -author: Jimmy Tang -''' - -try: - import json -except ImportError: - import simplejson as json - -def run_ceph_facts(module): - setup_options = {} - facts = {} - - # check for quorum of cluster, monmap - cmd = ["/usr/bin/env", "ceph", "quorum_status"] - rc, out, err = module.run_command(cmd, check_rc=True) - quorum = True - try: - quorum_ds = json.loads(out) - except: - quorum = False - if quorum: - for (k,v) in quorum_ds.items(): - setup_options["quorum_status_%s" % k] = v - - # check for status of osd's - cmd = ["/usr/bin/env", "ceph", "osd", "dump", "--format=json"] - rc, out, err = module.run_command(cmd, check_rc=True) - osd = True - try: - osd_ds = json.loads(out) - except: - osd = False - if osd: - for (k,v) in osd_ds.items(): - setup_options["osd_status_%s" % k] = v - - # check for status of mds's - cmd = ["/usr/bin/env", "ceph", "mds", "dump", "--format=json"] - rc, out, err = module.run_command(cmd, check_rc=True) - mds = True - try: - mds_ds = json.loads(out) - except: - mds = False - if mds: - for (k,v) in mds_ds.items(): - setup_options["mds_status_%s" % k] = v - -# # check for status of placement groups -# cmd = ["/usr/bin/env", "ceph", "pg", "dump", "--format=json"] -# rc, out, err = module.run_command(cmd, check_rc=True) -# pg = True -# try: -# pg_ds = json.loads(out) -# except: -# pg = False -# if pg: -# for (k,v) in pg_ds.items(): -# setup_options["pg_%s" % k] = v - - # show osd tree - cmd = ["/usr/bin/env", "ceph", "osd", "tree", "--format=json"] - rc, out, err = module.run_command(cmd, check_rc=True) - osd_tree = True - try: - osd_tree_ds = json.loads(out) - except: - osd_tree = False - if osd_tree: - for (k,v) in osd_tree_ds.items(): - setup_options["osd_tree_%s" % k] = v - - # show rados df - cmd = ["/usr/bin/env", "rados", "df", "--format=json"] - rc, out, err = module.run_command(cmd, check_rc=True) - rados_df = True - try: - rados_df_ds = json.loads(out) - except: - rados_df = False - if rados_df: - for (k,v) in rados_df_ds.items(): - setup_options["rados_df_%s" % k] = v - - setup_options['rbd_images'] = {} - for pool in setup_options.get('osd_status_pools', []): - if 'rbd' in pool['application_metadata']: - pool_name = pool['pool_name'] - setup_options['rbd_images'][pool_name] = {} - cmd = ["/usr/bin/env", "rbd", "list", pool_name, "--format=json"] - rc, out, err = module.run_command(cmd, check_rc=True) - try: - images = json.loads(out) - except json.JsonDecodeError: - continue - for image in images: - setup_options['rbd_images'][pool_name][image] = {} - - cmd = ["/usr/bin/env", "rbd", "status", pool_name+'/'+image, "--format=json"] - rc, out, err = module.run_command(cmd, check_rc=True) - try: - setup_options['rbd_images'][pool_name][image]['status'] = json.loads(out) - except json.JsonDecodeError: - continue - - cmd = ["/usr/bin/env", "rbd", "info", pool_name+'/'+image, "--format=json"] - rc, out, err = module.run_command(cmd, check_rc=True) - try: - setup_options['rbd_images'][pool_name][image]['info'] = json.loads(out) - except json.JsonDecodeError: - continue - - # business as usual - for (k, v) in facts.items(): - setup_options["ansible_%s" % k.replace('-', '_')] = v - - ceph_facts_result = { 'ansible_facts': {} } - - for (k,v) in setup_options.items(): - if module.params['filter'] == '*' or fnmatch.fnmatch(k, module.params['filter']): - ceph_facts_result['ansible_facts'][k] = v - - return ceph_facts_result - -def main(): - global module - module = AnsibleModule( - argument_spec = dict( - filter=dict(default="*", required=False), - ) - ) - - data = run_ceph_facts(module) - module.exit_json(**data) - -from ansible.module_utils.basic import * -main() -