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.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)
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -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 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):
|
||||||
|
|
Loading…
Reference in New Issue