Add Ceph commands and status handling
This commit is contained in:
parent
4422eb8941
commit
103ae95fb9
|
@ -33,6 +33,7 @@ import client_lib.common as pvc_common
|
|||
import client_lib.node as pvc_node
|
||||
import client_lib.vm as pvc_vm
|
||||
import client_lib.network as pvc_network
|
||||
import client_lib.ceph as pvc_ceph
|
||||
|
||||
myhostname = socket.gethostname()
|
||||
zk_host = ''
|
||||
|
@ -904,6 +905,48 @@ def net_acl_list(net, limit, direction):
|
|||
retcode, retmsg = pvc_network.get_list_acl(zk_conn, net, limit, direction)
|
||||
cleanup(retcode, retmsg, zk_conn)
|
||||
|
||||
###############################################################################
|
||||
# pvc ceph
|
||||
###############################################################################
|
||||
@click.group(name='ceph', short_help='Manage the PVC Ceph storage cluster.', context_settings=CONTEXT_SETTINGS)
|
||||
def cli_ceph():
|
||||
"""
|
||||
Manage the Ceph storage of the PVC cluster.
|
||||
"""
|
||||
pass
|
||||
|
||||
###############################################################################
|
||||
# pvc ceph status
|
||||
###############################################################################
|
||||
@click.command(name='status', short_help='Show storage cluster status.')
|
||||
def ceph_status():
|
||||
"""
|
||||
Show detailed status of the storage cluster.
|
||||
"""
|
||||
|
||||
zk_conn = pvc_common.startZKConnection(zk_host)
|
||||
retcode, retmsg = pvc_ceph.get_status(zk_conn)
|
||||
cleanup(retcode, retmsg, zk_conn)
|
||||
|
||||
###############################################################################
|
||||
# pvc ceph osd
|
||||
###############################################################################
|
||||
@click.group(name='osd', short_help='Manage OSDs in the PVC storage cluster.', context_settings=CONTEXT_SETTINGS)
|
||||
def ceph_osd():
|
||||
"""
|
||||
Manage the Ceph OSDs of the PVC cluster.
|
||||
"""
|
||||
pass
|
||||
|
||||
###############################################################################
|
||||
# pvc ceph pool
|
||||
###############################################################################
|
||||
@click.group(name='pool', short_help='Manage RBD pools in the PVC storage cluster.', context_settings=CONTEXT_SETTINGS)
|
||||
def ceph_pool():
|
||||
"""
|
||||
Manage the Ceph RBD pools of the PVC cluster.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
###############################################################################
|
||||
|
@ -937,11 +980,13 @@ def init_cluster():
|
|||
|
||||
# Create the root keys
|
||||
transaction = zk_conn.transaction()
|
||||
transaction.create('/networks', ''.encode('ascii'))
|
||||
transaction.create('/domains', ''.encode('ascii'))
|
||||
transaction.create('/nodes', ''.encode('ascii'))
|
||||
transaction.create('/primary_node', 'none'.encode('ascii'))
|
||||
transaction.create('/domains', ''.encode('ascii'))
|
||||
transaction.create('/networks', ''.encode('ascii'))
|
||||
transaction.create('/ceph', ''.encode('ascii'))
|
||||
transaction.create('/ceph/osds', ''.encode('ascii'))
|
||||
transaction.create('/ceph/pools', ''.encode('ascii'))
|
||||
transaction.commit()
|
||||
|
||||
# Close the Zookeeper connection
|
||||
|
@ -1032,9 +1077,28 @@ net_acl.add_command(net_acl_add)
|
|||
net_acl.add_command(net_acl_remove)
|
||||
net_acl.add_command(net_acl_list)
|
||||
|
||||
#ceph_osd.add_command(ceph_osd_add)
|
||||
#ceph_osd.add_command(ceph_osd_remove)
|
||||
#ceph_osd.add_command(ceph_osd_in)
|
||||
#ceph_osd.add_command(ceph_osd_out)
|
||||
#ceph_osd.add_command(ceph_osd_set)
|
||||
#ceph_osd.add_command(ceph_osd_unset)
|
||||
#ceph_osd.add_command(ceph_osd_info)
|
||||
#ceph_osd.add_command(ceph_osd_list)
|
||||
|
||||
#ceph_pool.add_command(ceph_pool_add)
|
||||
#ceph_pool.add_command(ceph_pool_remove)
|
||||
#ceph_pool.add_command(ceph_pool_info)
|
||||
#ceph_pool.add_command(ceph_pool_list)
|
||||
|
||||
cli_ceph.add_command(ceph_status)
|
||||
cli_ceph.add_command(ceph_osd)
|
||||
cli_ceph.add_command(ceph_pool)
|
||||
|
||||
cli.add_command(cli_node)
|
||||
cli.add_command(cli_vm)
|
||||
cli.add_command(cli_network)
|
||||
cli.add_command(cli_ceph)
|
||||
cli.add_command(init_cluster)
|
||||
|
||||
#
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# ceph.py - PVC client function library, Ceph cluster fuctions
|
||||
# Part of the Parallel Virtual Cluster (PVC) system
|
||||
#
|
||||
# Copyright (C) 2018 Joshua M. Boniface <joshua@boniface.me>
|
||||
#
|
||||
# This program 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.
|
||||
#
|
||||
# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
import os
|
||||
import socket
|
||||
import time
|
||||
import uuid
|
||||
import re
|
||||
import tempfile
|
||||
import subprocess
|
||||
import difflib
|
||||
import colorama
|
||||
import click
|
||||
import lxml.objectify
|
||||
import configparser
|
||||
import kazoo.client
|
||||
|
||||
import client_lib.ansiprint as ansiprint
|
||||
import client_lib.zkhandler as zkhandler
|
||||
import client_lib.common as common
|
||||
|
||||
#
|
||||
# Supplemental functions
|
||||
#
|
||||
|
||||
|
||||
#
|
||||
# Direct functions
|
||||
#
|
||||
def get_status(zk_conn):
|
||||
status_data = zkhandler.readdata(zk_conn, '/ceph').rstrip()
|
||||
primary_node = zkhandler.readdata(zk_conn, '/primary_node')
|
||||
click.echo('{bold}Ceph cluster status (primary node {end}{blue}{primary}{end}{bold}){end}\n'.format(bold=ansiprint.bold(), end=ansiprint.end(), blue=ansiprint.blue(), primary=primary_node))
|
||||
click.echo(status_data)
|
||||
click.echo('')
|
||||
return True, ''
|
|
@ -24,10 +24,6 @@ import uuid
|
|||
import lxml
|
||||
import math
|
||||
import kazoo.client
|
||||
import paramiko
|
||||
import hashlib
|
||||
import dns.resolver
|
||||
import dns.flags
|
||||
|
||||
import client_lib.zkhandler as zkhandler
|
||||
|
||||
|
@ -305,6 +301,11 @@ def findTargetNodeVMs(zk_conn, dom_uuid):
|
|||
|
||||
# Connect to the primary host and run a command
|
||||
def runRemoteCommand(node, command, become=False):
|
||||
import paramiko
|
||||
import hashlib
|
||||
import dns.resolver
|
||||
import dns.flags
|
||||
|
||||
# Support doing SSHFP checks
|
||||
class DnssecPolicy(paramiko.client.MissingHostKeyPolicy):
|
||||
def missing_host_key(self, client, hostname, key):
|
||||
|
|
Loading…
Reference in New Issue