| #!/bin/bash |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you 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. |
| |
| |
| # Copies keys that enable SSH communication with system vms |
| # $1 = new public key |
| # $2 = new private key |
| ''' |
| All imports go here... |
| ''' |
| import os |
| import shutil |
| import os.path |
| import sys |
| import subprocess |
| import commands |
| import traceback |
| import filecmp |
| import tempfile |
| |
| pathSep=os.sep |
| TMP=tempfile.gettempdir() + os.sep + "tmp" #Get Home Directory |
| print("Temp Directory is : %s" % TMP) |
| MOUNTPATH=TMP + pathSep + "systemvm_mnt" |
| TMPDIR=TMP + pathSep + "cloud" + pathSep + "systemvm" |
| osType=os.name |
| |
| os.makedirs(TMP) |
| os.makedirs(MOUNTPATH) |
| os.makedirs(TMPDIR) |
| |
| def clean_up(): |
| shutil.rmtree(TMP) |
| #$SUDO umount $MOUNTPATH |
| |
| def inject_into_iso(pubKey,systemiso): |
| isofile=systemvmpath |
| newpubkey=pubKey |
| backup=isofile + ".bak" |
| tmpiso=TMP + pathSep + systemiso |
| if not os.path.exists(isofile): |
| print("Could not open %s" % isofile) |
| clean_up() |
| sys.exit(IOError) |
| command = "7z x -y " + isofile + " -o" + MOUNTPATH |
| status = os.system(command) |
| if status != 0: |
| print ("Failed to mount original iso %" % isofile) |
| clean_up() |
| sys.exit(status) |
| pubKeyFileOld=open(MOUNTPATH + pathSep + "authorized_keys", 'r') |
| pubKeyFileNew=open(newpubkey, 'r') |
| for line1 in pubKeyFileOld: |
| for line2 in pubKeyFileNew: |
| if line1 == line2: |
| pubKeyFileOld.close() |
| pubKeyFileNew.close() |
| return 0 |
| pubKeyFileOld.close() |
| pubKeyFileNew.close() |
| try: |
| shutil.copy(isofile, backup) |
| except: |
| print("Failed to backup original iso %" % isofile) |
| clean_up() |
| sys.exit(IOError) |
| shutil.rmtree(TMPDIR) |
| try : |
| shutil.copytree(MOUNTPATH, TMPDIR) |
| except : |
| print ("Failed to copy from original iso %s to %s" % (MOUNTPATH, TMPDIR)) |
| clean_up() |
| sys.exit(IOError) |
| try : |
| shutil.copyfile(newpubkey, TMPDIR + pathSep + "authorized_keys") |
| except : |
| print ("Failed to copy key %s from original iso to new iso" % newpubkey) |
| traceback.print_exc(file=sys.stdout) |
| clean_up() |
| sys.exit(IOError) |
| command = "mkisofs -quiet -r -o " + tmpiso + " " + TMPDIR |
| try : |
| status = os.system(command) |
| except : |
| print("Failed to create new iso %s from %s" % (tmpiso, TMPDIR)) |
| clean_up() |
| sys.exit(IOError) |
| shutil.rmtree(MOUNTPATH) |
| try : |
| shutil.copyfile(tmpiso, isofile) |
| except : |
| print ("Failed to overwrite old iso %s with %s" % (isofile,tmpiso)) |
| traceback.print_exc(file=sys.stdout) |
| clean_up() |
| sys.exit(IOError) |
| shutil.rmtree(TMPDIR) |
| |
| def copy_priv_key(newKey): |
| currDir = os.path.dirname(os.path.abspath(__file__)) |
| if filecmp.cmp(currDir + pathSep + "id_rsa.cloud", newKey): |
| return 0 |
| print ("Copying new private key file as it is not matching with old file") |
| shutil.copyfile(newKey, currDir + pathSep + "id_rsa.cloud") |
| os.chmod(currDir + pathSep + "id_rsa.cloud", 0644) |
| return 0 |
| |
| if len(sys.argv) != 4: |
| print("Usage: injectkeys.py <new public key file> <new private key file> <systemvm iso path>") |
| clean_up() |
| sys.exit(None) |
| newpubkey=sys.argv[1] |
| newprivkey=sys.argv[2] |
| systemvmpath=sys.argv[3] |
| |
| if not os.path.exists(newpubkey): |
| print("Could not open %s" % newpubkey) |
| clean_up() |
| sys.exit(IOError) |
| if not os.path.exists(newprivkey): |
| print("Could not open %s" % newprivkey) |
| clean_up() |
| sys.exit(IOError) |
| #Verify all needed commands exists before calling |
| inject_into_iso(newpubkey,"systemvm.iso") |
| |
| copy_priv_key(newprivkey) |
| |
| clean_up() |
| #exit $? |