def install(version='stable', cluster_name='cassandra', **kwargs): """Install cassandra via ccm""" java_home = setup_java() cluster_path = os.path.join(ccm_home, cluster_name) if os.path.exists(cluster_path): print("Cassandra cluster already created at {cluster_path}".format(**locals())) return if is_cassandra_running(): print("Another Cassandra process is already running. You must stop it (cqs stop --force) before you can install Cassandra with this tool.") return makedirs(ccm_home) try: cluster = ccmlib.cluster.Cluster(ccm_home, cluster_name, cassandra_version=version, verbose=True) with open(os.path.join(cluster_path, 'cassandra.in.sh'), 'w') as f: f.write("JAVA_HOME={java_home}\n".format(**locals())) cluster.populate(1) start(cluster_name=cluster_name) except: # If any problem occurs, clean things up by destroying the cluster: destroy(cluster_name) raise print("Cassandra started.")
def download_install_java(version, cqs_home=None): if cqs_home is None: cqs_home = os.path.join(os.path.expanduser("~"),'.cassandra-quickstart') jre_root = os.path.join(cqs_home,'java') sys_platform = platform.system() + "_" + platform.architecture()[0] try: java_pkg = PLATFORM_JAVA[version][sys_platform] except KeyError: raise AssertionError("Could not find a suitable java download for platform: {sys_platform}".format(sys_platform=sys_platform)) makedirs(jre_root) java_home = os.path.join(jre_root, version) download_path = java_home + '.zip' # Delete any previous installs : try: shutil.rmtree(java_home) os.delete(download_path) except OSError: pass # Download: download(java_pkg['url'], download_path, show_progress=True) # Check sha256sum of downloaded java package: with open(download_path) as f: if hashlib.sha256(f.read()).hexdigest() != java_pkg['sha256']: raise AssertionError( 'Java zip file from {download_url} did not have ' 'expected SHA256: {sha}. Not installing.'.format( download_url=java_pkg['url'], sha=java_pkg['sha256'])) # Extract java zip file to home dir: with ZipFile(download_path) as z: z.extractall(jre_root) try: java_pkg_dir = [d for d in z.namelist() if d.startswith(version) and '/' in d][0].strip('/') except: raise AssertionError('Could not find java directory name inside package: {download_path}'.format(**locals())) extracted_java_dir = os.path.join(jre_root, java_pkg_dir) os.rename(extracted_java_dir, java_home) # Set executable bits: for path in os.listdir(os.path.join(java_home,'bin')): os.chmod(os.path.join(java_home,'bin',path), 0o755) for path in os.listdir(os.path.join(java_home,'jre','bin')): os.chmod(os.path.join(java_home,'jre','bin',path), 0o755) # Write the sha of the original package we installed: with open(os.path.join(java_home, 'SHA.txt'), 'w') as f: f.write(java_pkg['sha256']) meta = {'java_home':java_home, 'version':version} meta.update(java_pkg) return meta