Add action to list unmounted disks

This action is fairly simple in that it returns
a list of unmounted disks

This also includes a git-sync to pull in charms.ceph
changes.
Change-Id: Idb6eabd565b0a9951bb0b212b81a57497ada56f1
Closes-Bug: 1645481
This commit is contained in:
Chris MacNaughton 2016-11-09 14:49:12 -05:00
parent 9d5dbca3b0
commit 39ffd26452
6 changed files with 57 additions and 4 deletions

View File

@ -203,3 +203,5 @@ pool-get:
required: [key, pool-name]
additionalProperties: false
list-disks:
description: List the unmounted disk on the specified unit

1
actions/list-disks Symbolic link
View File

@ -0,0 +1 @@
list_disks.py

50
actions/list_disks.py Executable file
View File

@ -0,0 +1,50 @@
#!/usr/bin/python
#
# Copyright 2016 Canonical Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
List unmounted devices.
This script will get all block devices known by udev and check if they
are mounted so that we can give unmounted devices to the administrator.
"""
import pyudev
import sys
sys.path.append('hooks/')
from charmhelpers.contrib.storage.linux.utils import is_device_mounted
from charmhelpers.core.hookenv import log, action_set
if __name__ == '__main__':
disks = []
context = pyudev.Context()
for device in context.list_devices(DEVTYPE='disk'):
if device['SUBSYSTEM'] == 'block':
matched = False
for block_type in [u'dm', u'loop', u'ram', u'nbd']:
if block_type in device.device_node:
matched = True
if matched:
continue
disks.append(device.device_node)
log("Found disks: {}".format(disks))
unmounted_disks = [disk for disk in disks if not is_device_mounted(disk)]
action_set({
'disks': unmounted_disks})

View File

@ -2,7 +2,7 @@
# Wrapper to deal with newer Ubuntu versions that don't have py2 installed
# by default.
declare -a DEPS=('apt' 'netaddr' 'netifaces' 'pip' 'yaml' 'dnspython')
declare -a DEPS=('apt' 'netaddr' 'netifaces' 'pip' 'yaml')
check_and_install() {
pkg="${1}-${2}"

View File

@ -381,8 +381,8 @@ def handle_put_osd_in_bucket(request, service):
'osd',
'crush',
'set',
osd_id,
get_osd_weight(osd_id),
str(osd_id),
str(get_osd_weight(osd_id)),
"root={}".format(target_bucket)
]
)

View File

@ -194,7 +194,7 @@ class Crushmap(object):
raise "Failed to read Crushmap"
def ensure_bucket_is_present(self, bucket_name):
if bucket_name not in [bucket.name() for bucket in self.buckets()]:
if bucket_name not in [bucket.name for bucket in self.buckets()]:
self.add_bucket(bucket_name)
self.save()