Skip to content

Instantly share code, notes, and snippets.

@jamesbeedy
Last active March 2, 2018 21:11
Show Gist options
  • Save jamesbeedy/685555d4e59f0c1ba865dfa45788c989 to your computer and use it in GitHub Desktop.
Save jamesbeedy/685555d4e59f0c1ba865dfa45788c989 to your computer and use it in GitHub Desktop.
hdfs_juju_storage.py
import os
from charms.reactive import when_not, set_flag, hook, when
from charmhelpers.core.host import mount, mkdir
from charmhelpers.core.hookenv import storage_get, storage_list, status_set
from charmhelpers.contrib.storage.linux.utils import is_device_mounted
from charmhelpers.contrib.storage.linux.ceph import make_filesystem
from charmhelpers.core.fstab import Fstab
if not os.path.exists('/data'):
mkdir('/data')
@hook('start')
def set_stated_flag():
set_flag('started')
@when('started')
@when_not("storage.available")
def prepare_storage():
hdfs_block_storage_devices = [storage_get('location', sid) for sid in storage_list('hdfs')]
for stor in hdfs_block_storage_devices:
if not is_device_mounted(stor):
make_filesystem(stor, fstype='ext4')
stor_mount_dir = "/data/{}".format(stor.split("/")[2])
mkdir(stor_mount_dir)
mount(stor, stor_mount_dir, filesystem='ext4')
Fstab.add(stor, stor_mount_dir, filesystem='ext4')
mkdir(os.path.join(stor_mount_dir, 'dfs', 'dn'))
set_flag("storage.available")
@when_not("show.status")
def device_mounted_show_status():
hdfs_block_storage_devices = [storage_get('location', sid) for sid in storage_list('hdfs')]
hdfs_mounted_storage = [stor for stor in hdfs_block_storage_devices if is_device_mounted(stor)]
if len(hdfs_block_storage_devices) == len(hdfs_mounted_storage):
status_set("active", "Storage Prepared")
else:
status_set("active", "Storage Borked {} devices mounted".format(len(hdfs_mounted_storage)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment