Update 'freenas_network_unlock.py'
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python
|
||||
import requests, platform, subprocess, config, logging, simplejson as json, argparse
|
||||
import requests, platform, subprocess, config, logging, simplejson as json, argparse, from subprocess import call
|
||||
|
||||
# You must initialize logging, otherwise you'll not see debug output.
|
||||
logging.basicConfig(level=logging.INFO,format='%(asctime)s - [%(levelname)s] %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
|
||||
@@ -35,31 +35,37 @@ def request(resource, method='GET', data=None):
|
||||
|
||||
|
||||
#if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description='Unlock FreeNAS Pools')
|
||||
group = parser.add_mutually_exclusive_group()
|
||||
group.add_argument('-s', '--server', action='store_true', help='server (Usually runs on another system where passwords are stored)')
|
||||
group.add_argument('-c', '--client', action='store_true', help='client (Usually runs on the FreeNAS server)')
|
||||
parser.add_argument('-ip', '--host', type=str, help='Hostname/IP of the host running the unlock script (Required for client)')
|
||||
parser.add_argument('-f', '--filePath', type=str, help='Absolute path to the script on the host (Required for client)')
|
||||
args = parser.parse_args()
|
||||
if args.client and (args.host is None or args.filePath is None):
|
||||
parser.error("--client requires --host and --filePath.")
|
||||
# parser = argparse.ArgumentParser(description='Unlock FreeNAS Pools')
|
||||
# group = parser.add_mutually_exclusive_group()
|
||||
# group.add_argument('-s', '--server', action='store_true', help='server (Usually runs on another system where passwords are stored)')
|
||||
# group.add_argument('-c', '--client', action='store_true', help='client (Usually runs on the FreeNAS server)')
|
||||
# parser.add_argument('-ip', '--host', type=str, help='Hostname/IP of the host running the unlock script (Required for client)')
|
||||
# parser.add_argument('-f', '--filePath', type=str, help='Absolute path to the script on the host (Required for client)')
|
||||
# args = parser.parse_args()
|
||||
# if args.client and (args.host is None or args.filePath is None):
|
||||
# parser.error("--client requires --host and --filePath.")
|
||||
|
||||
|
||||
#POOLS = request('storage/volume/', 'GET')
|
||||
#for pool in POOLS['response']:
|
||||
# if pool['is_decrypted'] == False:
|
||||
# logging.info('Pool {} is locked'.format(pool['name']))
|
||||
# response = request('storage/volume/{}/unlock/'.format(pool['name']), 'POST', {'passphrase': '{}'.format(config.ENCRYPTION_PASSPHRASES[pool['name']])})
|
||||
# if response['ok']:
|
||||
# logging.info('Pool {} was unlocked successfully'.format(pool['name']))
|
||||
# else:
|
||||
# logging.error('Pool {} was NOT unlocked successfully'.format(pool['name']))
|
||||
# else:
|
||||
# logging.debug('Pool {} is already unlocked'.format(pool['name']))
|
||||
|
||||
|
||||
|
||||
# Create a small ramdrive to store our recovery keys temporarily
|
||||
rc = call("mkdir /mnt/ramfs", shell=True)
|
||||
rc = call("mdmfs -s 1m md /mnt/ramfs", shell=True)
|
||||
|
||||
# Send our unlock/mount script to the pi and execute it on the pi using ssh
|
||||
rc = call("ssh root@<PI-IP-ADDRESS> 'bash -s'", shell=True)
|
||||
|
||||
|
||||
|
||||
if args.server or True:
|
||||
POOLS = request('storage/volume/', 'GET')
|
||||
for pool in POOLS['response']:
|
||||
if pool['is_decrypted'] == False:
|
||||
logging.info('Pool {} is locked'.format(pool['name']))
|
||||
response = request('storage/volume/{}/unlock/'.format(pool['name']), 'POST', {'passphrase': '{}'.format(config.ENCRYPTION_PASSPHRASES[pool['name']])})
|
||||
if response['ok']:
|
||||
logging.info('Pool {} was unlocked successfully'.format(pool['name']))
|
||||
else:
|
||||
logging.error('Pool {} was NOT unlocked successfully'.format(pool['name']))
|
||||
else:
|
||||
logging.debug('Pool {} is already unlocked'.format(pool['name']))
|
||||
elif args.client and False:
|
||||
host = args.host
|
||||
filePath = args.filePath
|
||||
else:
|
||||
print(parser.print_help())
|
||||
Reference in New Issue
Block a user