more robust stat handling from ceph df output

This commit is contained in:
Rye Terrell 2017-07-21 11:46:32 -05:00
parent e0c537a453
commit 1c21e8ab31

View File

@ -23,6 +23,7 @@ from subprocess import check_call
from subprocess import check_output from subprocess import check_output
from subprocess import CalledProcessError from subprocess import CalledProcessError
from tempfile import TemporaryDirectory from tempfile import TemporaryDirectory
import json
import re import re
import os import os
import sys import sys
@ -179,14 +180,13 @@ def get_monitors():
def get_available_space(): def get_available_space():
''' Determine the space available in the RBD pool. Throw an exception if ''' Determine the space available in the RBD pool. Throw an exception if
the RBD pool ('rbd') isn't found. ''' the RBD pool ('rbd') isn't found. '''
command = ['ceph', 'df'] command = 'ceph df -f json'.split()
debug_command(command) debug_command(command)
out = check_output(command).decode('utf-8') out = check_output(command).decode('utf-8')
for line in out.splitlines(): data = json.loads(out)
stripped = line.strip() for pool in data['pools']:
if stripped.startswith('rbd'): if pool['name'] == 'rbd':
M = stripped.split()[-2].replace('M', '') return int(pool['stats']['max_avail'] / (1024 * 1024))
return int(M)
raise UnknownAvailableSpaceException('Unable to determine available space.') # noqa raise UnknownAvailableSpaceException('Unable to determine available space.') # noqa