Add regex matching to list commands
Adds optional regex arguments and matching to vm list and node list functions. Closes #12
This commit is contained in:
parent
fe93b1ed3c
commit
090929fdde
49
pvc.py
49
pvc.py
|
@ -24,6 +24,7 @@ import os
|
||||||
import socket
|
import socket
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
|
import re
|
||||||
import click
|
import click
|
||||||
import lxml.objectify
|
import lxml.objectify
|
||||||
import configparser
|
import configparser
|
||||||
|
@ -605,7 +606,7 @@ def node_info(node, long_output):
|
||||||
click.echo('{}Virtual machines on node:{}'.format(ansiiprint.bold(), ansiiprint.end()))
|
click.echo('{}Virtual machines on node:{}'.format(ansiiprint.bold(), ansiiprint.end()))
|
||||||
click.echo('')
|
click.echo('')
|
||||||
# List all VMs on this node
|
# List all VMs on this node
|
||||||
get_vm_list(node)
|
get_vm_list(node, None)
|
||||||
|
|
||||||
# Close the Zookeeper connection
|
# Close the Zookeeper connection
|
||||||
stopZKConnection(zk_conn)
|
stopZKConnection(zk_conn)
|
||||||
|
@ -615,15 +616,30 @@ def node_info(node, long_output):
|
||||||
# pvc node list
|
# pvc node list
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@click.command(name='list', short_help='List all node objects.')
|
@click.command(name='list', short_help='List all node objects.')
|
||||||
def node_list():
|
@click.argument(
|
||||||
|
'limit', default=None, required=False
|
||||||
|
)
|
||||||
|
def node_list(limit):
|
||||||
"""
|
"""
|
||||||
List all hypervisor nodes in the cluster.
|
List all hypervisor nodes in the cluster; optionally only match names matching regex LIMIT.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Open a Zookeeper connection
|
# Open a Zookeeper connection
|
||||||
zk_conn = startZKConnection(zk_host)
|
zk_conn = startZKConnection(zk_host)
|
||||||
|
|
||||||
node_list = zk_conn.get_children('/nodes')
|
# Match our limit
|
||||||
|
node_list = []
|
||||||
|
full_node_list = zk_conn.get_children('/nodes')
|
||||||
|
for node in full_node_list:
|
||||||
|
if limit != None:
|
||||||
|
try:
|
||||||
|
if re.match(limit, node) == None:
|
||||||
|
continue
|
||||||
|
except Exception as e:
|
||||||
|
click.echo('Regex Error: {}'.format(e))
|
||||||
|
exit(1)
|
||||||
|
node_list.append(node)
|
||||||
|
|
||||||
node_list_output = []
|
node_list_output = []
|
||||||
node_daemon_state = {}
|
node_daemon_state = {}
|
||||||
node_daemon_state = {}
|
node_daemon_state = {}
|
||||||
|
@ -1271,19 +1287,22 @@ def vm_info(domain, long_output):
|
||||||
# pvc vm list
|
# pvc vm list
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@click.command(name='list', short_help='List all VM objects.')
|
@click.command(name='list', short_help='List all VM objects.')
|
||||||
|
@click.argument(
|
||||||
|
'limit', default=None, required=False
|
||||||
|
)
|
||||||
@click.option(
|
@click.option(
|
||||||
'-t', '--hypervisor', 'hypervisor', default=None,
|
'-t', '--hypervisor', 'hypervisor', default=None,
|
||||||
help='Limit list to this hypervisor.'
|
help='Limit list to this hypervisor.'
|
||||||
)
|
)
|
||||||
def vm_list(hypervisor):
|
def vm_list(hypervisor, limit):
|
||||||
"""
|
"""
|
||||||
List all virtual machines in the cluster.
|
List all virtual machines in the cluster; optionally only match names matching regex LIMIT.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
get_vm_list(hypervisor)
|
get_vm_list(hypervisor, limit)
|
||||||
|
|
||||||
# Wrapped function to allow calling from `node info`
|
# Wrapped function to allow calling from `node info`
|
||||||
def get_vm_list(hypervisor):
|
def get_vm_list(hypervisor, limit):
|
||||||
"""
|
"""
|
||||||
List all virtual machines in the cluster.
|
List all virtual machines in the cluster.
|
||||||
"""
|
"""
|
||||||
|
@ -1309,11 +1328,19 @@ def get_vm_list(hypervisor):
|
||||||
|
|
||||||
# If we're limited, remove other nodes' VMs
|
# If we're limited, remove other nodes' VMs
|
||||||
for vm in vm_list_raw:
|
for vm in vm_list_raw:
|
||||||
|
# Check we don't match the limit
|
||||||
|
name = zk_conn.get('/domains/{}'.format(vm))[0].decode('ascii')
|
||||||
|
if limit != None:
|
||||||
|
try:
|
||||||
|
if re.match(limit, name) == None:
|
||||||
|
continue
|
||||||
|
except Exception as e:
|
||||||
|
click.echo('Regex Error: {}'.format(e))
|
||||||
|
exit(1)
|
||||||
# Check hypervisor to avoid unneeded ZK calls
|
# Check hypervisor to avoid unneeded ZK calls
|
||||||
vm_hypervisor[vm] = zk_conn.get('/domains/{}/hypervisor'.format(vm))[0].decode('ascii')
|
vm_hypervisor[vm] = zk_conn.get('/domains/{}/hypervisor'.format(vm))[0].decode('ascii')
|
||||||
if hypervisor != None:
|
if hypervisor != None and vm_hypervisor[vm] == hypervisor:
|
||||||
if vm_hypervisor[vm] == hypervisor:
|
vm_list.append(vm)
|
||||||
vm_list.append(vm)
|
|
||||||
else:
|
else:
|
||||||
vm_list.append(vm)
|
vm_list.append(vm)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue