Add Ceph commands and status handling

This commit is contained in:
Joshua Boniface 2018-10-27 18:11:58 -04:00
parent 4422eb8941
commit 103ae95fb9
3 changed files with 126 additions and 6 deletions

View File

@ -33,6 +33,7 @@ import client_lib.common as pvc_common
import client_lib.node as pvc_node import client_lib.node as pvc_node
import client_lib.vm as pvc_vm import client_lib.vm as pvc_vm
import client_lib.network as pvc_network import client_lib.network as pvc_network
import client_lib.ceph as pvc_ceph
myhostname = socket.gethostname() myhostname = socket.gethostname()
zk_host = '' 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) retcode, retmsg = pvc_network.get_list_acl(zk_conn, net, limit, direction)
cleanup(retcode, retmsg, zk_conn) 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 # Create the root keys
transaction = zk_conn.transaction() transaction = zk_conn.transaction()
transaction.create('/networks', ''.encode('ascii'))
transaction.create('/domains', ''.encode('ascii'))
transaction.create('/nodes', ''.encode('ascii')) transaction.create('/nodes', ''.encode('ascii'))
transaction.create('/primary_node', 'none'.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', ''.encode('ascii'))
transaction.create('/ceph/osds', ''.encode('ascii'))
transaction.create('/ceph/pools', ''.encode('ascii'))
transaction.commit() transaction.commit()
# Close the Zookeeper connection # 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_remove)
net_acl.add_command(net_acl_list) 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_node)
cli.add_command(cli_vm) cli.add_command(cli_vm)
cli.add_command(cli_network) cli.add_command(cli_network)
cli.add_command(cli_ceph)
cli.add_command(init_cluster) cli.add_command(init_cluster)
# #

55
client-common/ceph.py Normal file
View File

@ -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, ''

View File

@ -24,10 +24,6 @@ import uuid
import lxml import lxml
import math import math
import kazoo.client import kazoo.client
import paramiko
import hashlib
import dns.resolver
import dns.flags
import client_lib.zkhandler as zkhandler 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 # Connect to the primary host and run a command
def runRemoteCommand(node, command, become=False): def runRemoteCommand(node, command, become=False):
import paramiko
import hashlib
import dns.resolver
import dns.flags
# Support doing SSHFP checks # Support doing SSHFP checks
class DnssecPolicy(paramiko.client.MissingHostKeyPolicy): class DnssecPolicy(paramiko.client.MissingHostKeyPolicy):
def missing_host_key(self, client, hostname, key): def missing_host_key(self, client, hostname, key):