diff --git a/agent/src/com/cloud/agent/resource/storage/IscsiMountPreparer.java b/agent/src/com/cloud/agent/resource/storage/IscsiMountPreparer.java deleted file mode 100644 index 2def1977824..00000000000 --- a/agent/src/com/cloud/agent/resource/storage/IscsiMountPreparer.java +++ /dev/null @@ -1,224 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.cloud.agent.resource.storage; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.naming.ConfigurationException; - -import org.apache.log4j.Logger; - -import com.cloud.resource.DiskPreparer; -import com.cloud.storage.Volume; -import com.cloud.storage.VolumeVO; -import com.cloud.storage.Volume.VolumeType; -import com.cloud.template.VirtualMachineTemplate.BootloaderType; -import com.cloud.utils.NumbersUtil; -import com.cloud.utils.script.Script; - -public class IscsiMountPreparer implements DiskPreparer { - private static final Logger s_logger = Logger.getLogger(IscsiMountPreparer.class); - - private String _name; - - private String _mountvmPath; - private String _mountRootdiskPath; - private String _mountDatadiskPath; - protected String _mountParent; - protected int _mountTimeout; - - @Override - public String mount(String vmName, VolumeVO vol, BootloaderType type) { - return null; - } - - @Override - public boolean unmount(String path) { - return false; - } - - protected static VolumeVO findVolume(final List volumes, final Volume.VolumeType vType) { - if (volumes == null) return null; - - for (final VolumeVO v: volumes) { - if (v.getVolumeType() == vType) - return v; - } - - return null; - } - - protected static List findVolumes(final List volumes, final Volume.VolumeType vType) { - if (volumes == null) return null; - final List result = new ArrayList(); - for (final VolumeVO v: volumes) { - if (v.getVolumeType() == vType) - result.add(v); - } - - return result; - } - - protected static VolumeVO findVolume(final List volumes, final Volume.VolumeType vType, final String storageHost) { - if (volumes == null) return null; - for (final VolumeVO v: volumes) { - if ((v.getVolumeType() == vType) && (v.getHostIp().equalsIgnoreCase(storageHost))) - return v; - } - return null; - } - - protected static boolean mirroredVolumes(final List vols, final Volume.VolumeType vType) { - final List volumes = findVolumes(vols, vType); - return volumes.size() > 1; - } - - public synchronized String mountImage(final String host, final String dest, final String vmName, final List volumes, final BootloaderType bootloader) { - final Script command = new Script(_mountvmPath, _mountTimeout, s_logger); - command.add("-h", host); - command.add("-l", dest); - command.add("-n", vmName); - command.add("-b", bootloader.toString()); - - command.add("-t"); - - - final VolumeVO root = findVolume(volumes, Volume.VolumeType.ROOT); - if (root == null) { - return null; - } - command.add(root.getIscsiName()); - command.add("-r", root.getFolder()); - - final VolumeVO swap = findVolume(volumes, Volume.VolumeType.SWAP); - if (swap !=null && swap.getIscsiName() != null) { - command.add("-w", swap.getIscsiName()); - } - - final VolumeVO datadsk = findVolume(volumes, Volume.VolumeType.DATADISK); - if (datadsk !=null && datadsk.getIscsiName() != null) { - command.add("-1", datadsk.getIscsiName()); - } - - return command.execute(); - } - - public synchronized String mountImage(final String storageHosts[], final String dest, final String vmName, final List volumes, final boolean mirroredVols, final BootloaderType booter) { - if (!mirroredVols) { - return mountImage(storageHosts[0], dest, vmName, volumes, booter); - } else { - return mountMirroredImage(storageHosts, dest, vmName, volumes, booter); - } - } - - protected String mountMirroredImage(final String hosts[], final String dest, final String vmName, final List volumes, final BootloaderType booter) { - final List rootDisks = findVolumes(volumes, VolumeType.ROOT); - final String storIp0 = hosts[0]; - final String storIp1 = hosts[1]; - //mountrootdisk.sh -m -h $STORAGE0 -t $iqn0 -l $src -n $vmname -r $dest -M -H $STORAGE1 -T $iqn1 - final Script command = new Script(_mountRootdiskPath, _mountTimeout, s_logger); - command.add("-m"); - command.add("-M"); - command.add("-h", storIp0); - command.add("-H", storIp1); - command.add("-l", dest); - command.add("-r", rootDisks.get(0).getFolder()); - command.add("-n", vmName); - command.add("-t", rootDisks.get(0).getIscsiName()); - command.add("-T", rootDisks.get(1).getIscsiName()); - command.add("-b", booter.toString()); - - final List swapDisks = findVolumes(volumes, VolumeType.SWAP); - if (swapDisks.size() == 2) { - command.add("-w", swapDisks.get(0).getIscsiName()); - command.add("-W", swapDisks.get(1).getIscsiName()); - } - - final String result = command.execute(); - if (result == null){ - final List dataDisks = findVolumes(volumes, VolumeType.DATADISK); - if (dataDisks.size() == 2) { - final Script mountdata = new Script(_mountDatadiskPath, _mountTimeout, s_logger); - mountdata.add("-m"); - mountdata.add("-M"); - mountdata.add("-h", storIp0); - mountdata.add("-H", storIp1); - mountdata.add("-n", vmName); - mountdata.add("-c", "1"); - mountdata.add("-d", dataDisks.get(0).getIscsiName()); - mountdata.add("-D", dataDisks.get(1).getIscsiName()); - return mountdata.execute(); - - } else if (dataDisks.size() == 0){ - return result; - } - } - - return result; - } - - @Override - public boolean configure(String name, Map params) throws ConfigurationException { - _name = name; - - String scriptsDir = (String)params.get("mount.scripts.dir"); - if (scriptsDir == null) { - scriptsDir = "scripts/vm/storage/iscsi/comstar/filebacked"; - } - - _mountDatadiskPath = Script.findScript(scriptsDir, "mountdatadisk.sh"); - if (_mountDatadiskPath == null) { - throw new ConfigurationException("Unable to find mountdatadisk.sh"); - } - s_logger.info("mountdatadisk.sh found in " + _mountDatadiskPath); - - String value = (String)params.get("mount.script.timeout"); - _mountTimeout = NumbersUtil.parseInt(value, 240) * 1000; - - _mountvmPath = Script.findScript(scriptsDir, "mountvm.sh"); - if (_mountvmPath == null) { - throw new ConfigurationException("Unable to find mountvm.sh"); - } - s_logger.info("mountvm.sh found in " + _mountvmPath); - - _mountRootdiskPath = Script.findScript(scriptsDir, "mountrootdisk.sh"); - if (_mountRootdiskPath == null) { - throw new ConfigurationException("Unable to find mountrootdisk.sh"); - } - s_logger.info("mountrootdisk.sh found in " + _mountRootdiskPath); - - return true; - } - - @Override - public String getName() { - return _name; - } - - @Override - public boolean start() { - return true; - } - - @Override - public boolean stop() { - return true; - } -} diff --git a/core/src/com/cloud/storage/FileSystemStorageResource.java b/core/src/com/cloud/storage/FileSystemStorageResource.java deleted file mode 100644 index 72f180935bb..00000000000 --- a/core/src/com/cloud/storage/FileSystemStorageResource.java +++ /dev/null @@ -1,583 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.cloud.storage; - -import java.io.File; -import java.net.InetAddress; -import java.net.URISyntaxException; -import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.log4j.Logger; - -import com.cloud.agent.api.Answer; -import com.cloud.agent.api.ModifyStoragePoolAnswer; -import com.cloud.agent.api.ModifyStoragePoolCommand; -import com.cloud.agent.api.StartupCommand; -import com.cloud.agent.api.StartupStorageCommand; -import com.cloud.agent.api.StoragePoolInfo; -import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; -import com.cloud.agent.api.storage.CreatePrivateTemplateCommand; -import com.cloud.agent.api.storage.DestroyCommand; -import com.cloud.agent.api.storage.UpgradeDiskAnswer; -import com.cloud.agent.api.storage.UpgradeDiskCommand; -import com.cloud.agent.api.to.VolumeTO; -import com.cloud.storage.Storage.StoragePoolType; -import com.cloud.storage.Storage.StorageResourceType; -import com.cloud.storage.template.TemplateInfo; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.net.NfsUtils; -import com.cloud.utils.script.OutputInterpreter; -import com.cloud.utils.script.Script; - -public abstract class FileSystemStorageResource extends StorageResource { - protected static final Logger s_logger = Logger.getLogger(FileSystemStorageResource.class); - protected String _templateRootDir; - protected String _poolName; - protected String _poolUuid; - protected String _localStoragePath; - - @Override - public boolean existPath(String path) { - if (path == null) { - return false; - } - final Script cmd = new Script("ls", _timeout, s_logger); - cmd.add(File.separator + path); - - final String result = cmd.execute(); - if (result == null) { - return true; - } - - if (result == Script.ERR_TIMEOUT) { - throw new CloudRuntimeException("Script timed out"); - } - - return !result.contains("No such file or directory"); - } - - @Override - public String createPath(final String createPath) { - final Script cmd = new Script("mkdir", _timeout, s_logger); - cmd.add("-p", File.separator + createPath); - - return cmd.execute(); - } - - @Override - protected void fillNetworkInformation(StartupCommand cmd) { - super.fillNetworkInformation(cmd); - cmd.setIqn(null); - } - - - - @Override - protected long getUsedSize() { - return getUsedSize(_rootDir); - } - - - protected long getUsedSize(String poolPath) { - poolPath = getPoolPath(poolPath); - if (poolPath == null) { - return 0; - } - Script command = new Script("/bin/bash", _timeout, s_logger); - command.add("-c"); - command.add("df -Ph " + poolPath + " | grep -v Used | awk '{print $3}' "); - - final OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser(); - if (command.execute(parser) != null) { - return -1; - } - return convertFilesystemSize(parser.getLine()); - } - - private String getPoolPath(String poolPath) { - if (!existPath(poolPath)) { - poolPath = File.separator + poolPath; - if (!existPath(poolPath)) - return null; - } - return poolPath; - } - - protected long getTotalSize(String poolPath) { - poolPath = getPoolPath(poolPath); - if (poolPath == null) { - return 0; - } - Script command = new Script("/bin/bash", _timeout, s_logger); - command.add("-c"); - command.add("df -Ph " + poolPath + " | grep -v Size | awk '{print $2}' "); - - final OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser(); - if (command.execute(parser) != null) { - return -1; - } - return convertFilesystemSize(parser.getLine()); - } - - @Override - protected long getTotalSize() { - return getTotalSize(_rootDir); - } - - @Override - protected String createTrashDir(String imagePath, StringBuilder path) { - final int index = imagePath.lastIndexOf(File.separator) + File.separator.length(); - path.append(_trashcanDir); - path.append(imagePath.substring(_parent.length(), index)); - path.append(Long.toHexString(System.currentTimeMillis())); - - final Script cmd = new Script("mkdir", _timeout, s_logger); - cmd.add("-p", path.toString()); - - final String result = cmd.execute(); - if (result != null) { - return result; - } - - path.append(File.separator).append(imagePath.substring(index)); - return null; - } - - @Override - protected String destroy(String imagePath) { - final StringBuilder trashPath = new StringBuilder(); - String result = createTrashDir(imagePath, trashPath); - if (result != null) { - return result; - } - - final Script cmd = new Script("mv", _timeout, s_logger); - cmd.add(imagePath); - cmd.add(trashPath.toString()); - result = cmd.execute(); - if (result != null) { - return result; - } - - s_logger.warn("Path " + imagePath + " has been moved to " + trashPath.toString()); - - cleanUpEmptyParents(imagePath); - return null; - } - - @Override - protected void cleanUpEmptyParents(String imagePath) { - imagePath = imagePath.substring(0, imagePath.lastIndexOf(File.separator)); - String destroyPath = null; - while (imagePath.length() > _parent.length() && !hasChildren(imagePath)) { - destroyPath = imagePath; - imagePath = imagePath.substring(0, imagePath.lastIndexOf(File.separator)); - } - - if (destroyPath != null) { - final Script cmd = new Script("rm", _timeout, s_logger); - cmd.add("-rf", destroyPath); - cmd.execute(); - } - } - - @Override - protected Answer execute(DestroyCommand cmd) { - VolumeTO volume = cmd.getVolume(); - String result = null; - - result = delete(volume.getPath()); - return new Answer(cmd, result == null, result); - } - - private String delete(String image) { - final Script cmd = new Script(_delvmPath, _timeout, s_logger); - cmd.add("-i", image); - - - final String result = cmd.execute(); - if (result != null) { - return result; - } - - //cleanUpEmptyParents(image); - return null; - } - - - @Override - protected String delete(String imagePath, String extra) { - return delete (imagePath); - } - - protected boolean isSharedNetworkFileSystem(String path) { - if (path.endsWith("/")) { - path = path.substring(0, path.length()-1); - } - Script command = new Script("/bin/bash", _timeout, s_logger); - command.add("-c"); - command.add("mount -t nfs | grep nfs | awk '{print $3}' | grep -x " + path); - - OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser(); - if (command.execute(parser) != null || parser.getLine() == null) { //not NFS client - command = new Script("/bin/bash", _timeout, s_logger); - command.add("-c"); - command.add("grep " + _rootDir + " /etc/exports"); - parser = new OutputInterpreter.OneLineParser(); - if (command.execute(parser) == null && parser.getLine() != null) { - return true; - } - } else if (parser.getLine() != null) { - return true; - } - return false; - } - - - private List getNfsMounts(String path) { - if (path != null && path.endsWith("/")) { - path = path.substring(0, path.length()-1); - } - Script command = new Script("/bin/bash", _timeout, s_logger); - command.add("-c"); - if (path != null) { - command.add("cat /proc/mounts | grep nfs | grep " + path ); - } else { - command.add("cat /proc/mounts | grep nfs | grep -v rpc_pipefs "); - } - - OutputInterpreter.AllLinesParser parser = new OutputInterpreter.AllLinesParser(); - if (command.execute(parser) != null || parser.getLines() == null) { //not NFS client - return null; - } else { - List result = new ArrayList(); - String[] lines = parser.getLines().split("\\n"); - - for (String line: lines){ - String [] toks = line.split(" "); - if ( toks.length < 4) { - continue; - } - String [] hostpart = toks[0].split(":"); - if (hostpart.length != 2) { - continue; - } - String localPath = toks[1]; - result.add(new String [] {hostpart[0], hostpart[1], localPath}); - - } - return result; - } - } - - public List getNetworkFileSystemServer(String path) { - return getNfsMounts(path); - } - - @Override - protected String create( String templatePath, final String rootdiskFolder, final String userPath, final String datadiskFolder, final String datadiskName, final int datadiskSize, String localPath) { - - s_logger.debug("Creating volumes by cloning " + templatePath); - final Script command = new Script(_createvmPath, _timeout, s_logger); - - command.add("-t", templatePath); - command.add("-i", rootdiskFolder); - command.add("-u", userPath); - if (datadiskSize != 0) { - command.add("-f", datadiskFolder); - command.add("-s", Integer.toString(datadiskSize)); - command.add("-n", datadiskName); - } - - return command.execute(); - } - - @Override - protected UpgradeDiskAnswer execute(UpgradeDiskCommand cmd) { - // TODO Auto-generated method stub - return null; - } - - @Override - public StartupCommand []initialize() { - StartupCommand [] cmds = super.initialize(); - StartupStorageCommand cmd = (StartupStorageCommand)cmds[0]; - - initLocalStorage(cmd); - cmd.setTemplateInfo(new HashMap()); //empty template info - - return new StartupCommand[] {cmd}; - } - - @Override - protected Storage.StorageResourceType getStorageResourceType() { - return Storage.StorageResourceType.STORAGE_POOL; - } - - protected String mountNfs(String hostAddress, String hostPath, String localPath) { - final OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser(); - Script command = new Script("/bin/bash", _timeout, s_logger); - command.add("-c"); - command.add("mount -t nfs -o acdirmax=0,acdirmin=0 " + hostAddress + ":" + hostPath + " " + localPath); - String result = command.execute(parser); - return result; - } - - protected String umountNfs(String localPath) { - Script command = new Script("/bin/bash", _timeout, s_logger); - command.add("-c"); - command.add("umount " + localPath); - String result = command.execute(); - return result; - } - - protected void initLocalStorage(StartupStorageCommand cmd) { - if (!existPath(_localStoragePath)) { - createPath(_localStoragePath); - } - //setPoolPath(_localStoragePath); - long capacity = getTotalSize(_localStoragePath); - long used = getUsedSize(_localStoragePath); - StoragePoolInfo poolInfo = new StoragePoolInfo( "Local Storage", "file://" + cmd.getPrivateIpAddress() + "/" + _localStoragePath, "localhost", _localStoragePath, _localStoragePath, StoragePoolType.Filesystem, capacity, capacity - used); - cmd.setPoolInfo(poolInfo); - } - - - private Answer setFSStoragePool(ModifyStoragePoolCommand cmd) { - StoragePoolVO pool = cmd.getPool(); - String localPath = pool.getPath(); - File localStorage = new File(localPath); - if (!localStorage.exists()) { - localStorage.mkdir(); - } - /*String result = setPoolPath(localPath); - if (result != null) { - return new Answer(cmd, false, " Failed to create folders"); - }*/ - if (_instance != null) { - localPath = localPath + File.separator + _instance; - } - _poolName = pool.getName(); - long capacity = getTotalSize(localPath); - long used = getUsedSize(localPath); - long available = capacity - used; - Map tInfo = new HashMap(); - ModifyStoragePoolAnswer answer = new ModifyStoragePoolAnswer(cmd, capacity, available, tInfo); - return answer; - } - - @Override - protected Answer execute(ModifyStoragePoolCommand cmd) { - StoragePoolVO pool = cmd.getPool(); - if (pool.getPoolType() == StoragePoolType.Filesystem) { - return setFSStoragePool(cmd); - } - if (cmd.getAdd()) { - String result; - String hostPath = pool.getPath(); - String hostPath2 = pool.getPath(); - if (hostPath.endsWith("/")) { - hostPath2 = hostPath.substring(0, hostPath.length()-1); - } - String localPath = cmd.getLocalPath(); - boolean alreadyMounted = false; - - List shareInfo = getNfsMounts(null); - if (shareInfo != null) { - for (String [] share: shareInfo){ - String host = share[0]; - String path = share[1]; - String path2 = path; - if (path.endsWith("/")) { - path2 = path.substring(0, path.length()-1); - } - if (!path.equals(hostPath) && !path2.equals(hostPath2)){ - continue; - } - if (host.equalsIgnoreCase(pool.getHostAddress())){ - alreadyMounted = true; - localPath = share[2]; - result = null; - break; - } else { - try { - InetAddress currAddr = InetAddress.getByName(host); - InetAddress hostAddr = InetAddress.getByName(pool.getHostAddress()); - if (currAddr.equals(hostAddr)){ - alreadyMounted = true; - result = null; - localPath = share[2]; - break; - } - } catch (UnknownHostException e) { - continue; - } - } - } - } - - String localPath2 = localPath; - if (localPath.endsWith("/")){ - localPath2 = localPath.substring(0,localPath.length()-1); - } - - if (!alreadyMounted){ - Script mkdir = new Script("/bin/bash", _timeout, s_logger); - mkdir.add("-c"); - mkdir.add("mkdir -p " + localPath); - final OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser(); - result = mkdir.execute(parser); - - if (result != null) { - return new Answer(cmd, false, "Failed to create local path: " + result); - } - result = mountNfs(pool.getHostAddress(), pool.getPath(), localPath); - if (result != null) { - return new Answer(cmd, false, " Failed to mount: " + result); - } - } - - /*result = setPoolPath(localPath); - if (result != null) { - return new Answer(cmd, false, " Failed to create folders"); - }*/ - - - if (_instance != null) { - localPath = localPath + File.separator + _instance; - } - _poolName =pool.getName(); - _poolUuid = pool.getUuid(); - long capacity = getTotalSize(localPath); - long used = getUsedSize(localPath); - long available = capacity - used; - Map tInfo = new HashMap(); - ModifyStoragePoolAnswer answer = new ModifyStoragePoolAnswer(cmd, capacity, available, tInfo); - return answer; - } else { - Script command = new Script("/bin/bash", _timeout, s_logger); - command.add("-c"); - command.add("umount " + cmd.getLocalPath()); - final OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser(); - String result = command.execute(parser); - if (result != null) { - return new Answer(cmd, false, " Failed to unmount: " + result); - } - return new Answer(cmd); - } - } - - @Override - protected String create(String templateFolder, String rootdiskFolder, String userPath, String dataPath, String localPath) { - - s_logger.debug("Creating volumes"); - final Script command = new Script(_createvmPath, _timeout, s_logger); - - command.add("-t", templateFolder); - command.add("-i", rootdiskFolder); - command.add("-u", userPath); - - - return command.execute(); - } - - - - protected String mountSecondaryStorage(String tmplMpt, String templatePath, String hostMpt) { - String mountStr = null; - try { - mountStr = NfsUtils.url2Mount(tmplMpt); - } catch (URISyntaxException e) { - s_logger.debug("Is not a valid url" + tmplMpt); - return null; - } - String []tok = mountStr.split(":"); - /*Mount already?*/ - if (!isNfsMounted(tok[0], tok[1], hostMpt)) { - mountNfs(tok[0], tok[1], hostMpt); - } - if (!templatePath.startsWith("/")) - templatePath = hostMpt + "/" + templatePath; - else - templatePath = hostMpt + templatePath; - - return templatePath; - } - - protected boolean isNfsMounted(final String remoteHost, final String remotePath, final String mountPath) { - boolean alreadyMounted = false; - List shareInfo = getNfsMounts(null); - if (shareInfo != null) { - for (String [] share: shareInfo){ - String host = share[0]; - String path = share[1]; - String path2 = path; - String localPath = share[2]; - String localPath2 = localPath; - - if (path.endsWith("/")) { - path2 = path.substring(0, path.length()-1); - } - if (localPath.endsWith("/")) { - localPath2 = localPath.substring(0, localPath.length() -1); - } - if ((!path.equals(remotePath) && !path2.equals(remotePath)) || (!localPath.equals(mountPath) && !localPath2.equals(mountPath)) ){ - continue; - } - - if (host.equalsIgnoreCase(remoteHost)){ - alreadyMounted = true; - break; - } else { - try { - InetAddress currAddr = InetAddress.getByName(host); - InetAddress hostAddr = InetAddress.getByName(remoteHost); - if (currAddr.equals(hostAddr)){ - alreadyMounted = true; - break; - } - } catch (UnknownHostException e) { - continue; - } - } - } - } - return alreadyMounted; - } - - @Override - protected String getDefaultScriptsDir() { - // TODO Auto-generated method stub - return null; - } - - @Override - protected CreatePrivateTemplateAnswer execute(CreatePrivateTemplateCommand cmd) { - CreatePrivateTemplateAnswer answer = super.execute(cmd); - answer.setPath(answer.getPath().replaceFirst(_rootDir, "")); - answer.setPath(answer.getPath().replaceFirst("^/*", "/")); - return answer; - } - - - -} diff --git a/core/src/com/cloud/storage/StorageResource.java b/core/src/com/cloud/storage/StorageResource.java deleted file mode 100755 index d63883be1b7..00000000000 --- a/core/src/com/cloud/storage/StorageResource.java +++ /dev/null @@ -1,600 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.cloud.storage; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.naming.ConfigurationException; - -import org.apache.log4j.Logger; - -import com.cloud.agent.api.Answer; -import com.cloud.agent.api.BackupSnapshotAnswer; -import com.cloud.agent.api.BackupSnapshotCommand; -import com.cloud.agent.api.Command; -import com.cloud.agent.api.GetFileStatsAnswer; -import com.cloud.agent.api.GetFileStatsCommand; -import com.cloud.agent.api.GetStorageStatsAnswer; -import com.cloud.agent.api.GetStorageStatsCommand; -import com.cloud.agent.api.ManageSnapshotAnswer; -import com.cloud.agent.api.ManageSnapshotCommand; -import com.cloud.agent.api.ModifyStoragePoolCommand; -import com.cloud.agent.api.PingCommand; -import com.cloud.agent.api.PingStorageCommand; -import com.cloud.agent.api.StartupCommand; -import com.cloud.agent.api.StartupStorageCommand; -import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; -import com.cloud.agent.api.storage.CreatePrivateTemplateCommand; -import com.cloud.agent.api.storage.DestroyCommand; -import com.cloud.agent.api.storage.DownloadCommand; -import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; -import com.cloud.agent.api.storage.ShareAnswer; -import com.cloud.agent.api.storage.ShareCommand; -import com.cloud.agent.api.storage.UpgradeDiskAnswer; -import com.cloud.agent.api.storage.UpgradeDiskCommand; -import com.cloud.agent.api.storage.UploadCommand; -import com.cloud.host.Host; -import com.cloud.resource.ServerResource; -import com.cloud.resource.ServerResourceBase; -import com.cloud.storage.Storage.StoragePoolType; -import com.cloud.storage.template.DownloadManager; -import com.cloud.storage.template.TemplateInfo; -import com.cloud.storage.template.UploadManager; -import com.cloud.utils.NumbersUtil; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.script.OutputInterpreter; -import com.cloud.utils.script.Script; - -/** - * StorageResource represents the storage server. It executes commands - * against the storage server. - * - * @config - * {@table - * || Param Name | Description | Values | Default || - * || pool | name of the pool to use | String | tank || - * || parent | parent path to all of the templates and the trashcan | Path | [pool]/vmops || - * || scripts.dir | directory to the scripts | Path | ./scripts || - * || scripts.timeout | timeout value to use when executing scripts | seconds | 120s || - * || public.templates.root.dir | directory where public templates reside | Path | [pool]/volumes/demo/template/public/os || - * || private.templates.root.dir | directory where private templates reside | Path | [pool]/volumes/template/demo/private || - * || templates.download.dir | directory where templates are downloaded prior to being installed | Path | [pool]/volumes/demo/template/download || - * || install.timeout.pergig | timeout for the template creation script per downloaded gigabyte | seconds | 900s || - * || install.numthreads | number of concurrent install threads | number | 3 || - * } - */ -public abstract class StorageResource extends ServerResourceBase implements ServerResource { - protected static final Logger s_logger = Logger.getLogger(StorageResource.class); - protected String _createvmPath; - protected String _listvmdiskPath; - protected String _listvmdisksizePath; - protected String _delvmPath; - protected String _manageSnapshotPath; - protected String _manageVolumePath; - protected String _createPrivateTemplatePath; - protected String _guid; - protected String _rootDir; - protected String _rootFolder = "vmops"; - protected String _parent; - protected String _trashcanDir; - protected String _vmFolder; - protected String _trashcanFolder; - protected String _datadisksFolder; - protected String _datadisksDir; - protected String _sharePath; - protected String _infoPath; - protected int _timeout; - - protected String _iqnPath; - - protected String _checkchildrenPath; - protected String _userPrivateTemplateRootDir; - - protected String _zfsScriptsDir; - - protected DownloadManager _downloadManager; - protected UploadManager _uploadManager; - - protected Map _volumeHourlySnapshotRequests = new HashMap(); - protected Map _volumeDailySnapshotRequests = new HashMap(); - protected String _instance; - - @Override - public Answer executeRequest(final Command cmd) { - if (cmd instanceof DestroyCommand) { - return execute((DestroyCommand)cmd); - } else if (cmd instanceof GetFileStatsCommand) { - return execute((GetFileStatsCommand)cmd); - } else if (cmd instanceof PrimaryStorageDownloadCommand) { - return execute((PrimaryStorageDownloadCommand)cmd); - } else if (cmd instanceof DownloadCommand) { - return execute((DownloadCommand)cmd); - }else if (cmd instanceof UploadCommand) { - return execute((UploadCommand)cmd); - } else if (cmd instanceof GetStorageStatsCommand) { - return execute((GetStorageStatsCommand)cmd); - } else if (cmd instanceof UpgradeDiskCommand) { - return execute((UpgradeDiskCommand) cmd); - } else if (cmd instanceof ShareCommand) { - return execute((ShareCommand)cmd); - } else if (cmd instanceof ManageSnapshotCommand) { - return execute((ManageSnapshotCommand)cmd); - } else if (cmd instanceof BackupSnapshotCommand) { - return execute((BackupSnapshotCommand)cmd); - } else if (cmd instanceof CreatePrivateTemplateCommand) { - return execute((CreatePrivateTemplateCommand)cmd); - } else if (cmd instanceof ModifyStoragePoolCommand ){ - return execute ((ModifyStoragePoolCommand) cmd); - } else { - s_logger.warn("StorageResource: Unsupported command"); - return Answer.createUnsupportedCommandAnswer(cmd); - } - } - - protected Answer execute(ModifyStoragePoolCommand cmd) { - s_logger.warn("Unsupported: network file system mount attempted"); - return Answer.createUnsupportedCommandAnswer(cmd); - } - - protected ShareAnswer execute(final ShareCommand cmd) { - return new ShareAnswer(cmd, new HashMap()); - } - - protected Answer execute(final PrimaryStorageDownloadCommand cmd) { - return Answer.createUnsupportedCommandAnswer(cmd); - } - - private Answer execute(UploadCommand cmd) { - return _uploadManager.handleUploadCommand(cmd); - } - - protected Answer execute(final DownloadCommand cmd) { - return _downloadManager.handleDownloadCommand(cmd); - } - - public String getSecondaryStorageMountPoint(String uri) { - return null; - } - - protected String getUserPath(final String image) { - return image.substring(0, image.indexOf(File.separator, _parent.length() + 2)).intern(); - } - - - protected Answer execute(final GetFileStatsCommand cmd) { - final String image = cmd.getPaths(); - final Script command = new Script(_listvmdisksizePath, _timeout, s_logger); - command.add("-d", image); - command.add("-a"); - - final SizeParser parser = new SizeParser(); - final String result = command.execute(parser); - if (result != null) { - return new Answer(cmd, false, result); - } - - return new GetFileStatsAnswer(cmd, parser.size); - } - - protected List getVolumes(final String rootdiskFolder, final String datadiskFolder, final String datadiskName) { - final ArrayList vols = new ArrayList(); - - // Get the rootdisk volume - String path = rootdiskFolder + File.separator + "rootdisk"; - long totalSize = getVolumeSize(path); - - VolumeVO vol = new VolumeVO(null, -1, -1, -1, -1, new Long(-1), rootdiskFolder, path, totalSize, Volume.VolumeType.ROOT); - vols.add(vol); - - // Get the datadisk volume - if (datadiskFolder != null && datadiskName != null) { - path = datadiskFolder + File.separator + datadiskName; - totalSize = getVolumeSize(path); - - vol = new VolumeVO(null, -1, -1, -1, -1, new Long(-1), datadiskFolder, path, totalSize, Volume.VolumeType.DATADISK); - vols.add(vol); - } - - return vols; - } - - protected List getVolumes(final String imagePath) { - final ArrayList vols = new ArrayList(); - - String path = getVolumeName(imagePath, null); - long totalSize = getVolumeSize(path); - - VolumeVO vol = new VolumeVO(null, -1, -1, -1, -1, new Long(-1), null, path, totalSize, Volume.VolumeType.ROOT); - - vols.add(vol); - - path = getVolumeName(imagePath, (long)1); - if (path != null) { - totalSize = getVolumeSize(path); - - - vol = new VolumeVO(null, -1, -1, -1, -1, new Long(-1), null, path, totalSize, Volume.VolumeType.DATADISK); - vols.add(vol); - } - - return vols; - } - - protected long getVolumeSize(final String volume) { - final Script command = new Script(_listvmdisksizePath, _timeout, s_logger); - - command.add("-d", volume); - command.add("-t"); - - final SizeParser parser = new SizeParser(); - final String result = command.execute(parser); - if (result != null) { - throw new CloudRuntimeException(result); - } - return parser.size; - } - - protected String getVolumeName(final String imagePath, final Long diskNum) { - - final Script command = new Script(_listvmdiskPath, _timeout, s_logger); - command.add("-i", imagePath); - if (diskNum == null) { - command.add("-r"); - } else { - command.add("-d", diskNum.toString()); - } - - final PathParser parser = new PathParser(); - final String result = command.execute(parser); - if (result != null) { - throw new CloudRuntimeException("Can't get volume name due to " + result); - } - - return parser.path; - } - - - protected long convertFilesystemSize(final String size) { - if (size == null) { - return -1; - } - - long multiplier = 1; - if (size.endsWith("T")) { - multiplier = 1024l * 1024l * 1024l * 1024l; - } else if (size.endsWith("G")) { - multiplier = 1024l * 1024l * 1024l; - } else if (size.endsWith("M")) { - multiplier = 1024l * 1024l; - } else if (size.endsWith("K")){ - multiplier = 1024l; - } else { - long num; - try { - num = Long.parseLong(size); - } catch (NumberFormatException e) { - s_logger.debug("Unknow size:" + size); - return 0; - } - return num; - } - - return (long)(Double.parseDouble(size.substring(0, size.length() - 1)) * multiplier); - } - - protected abstract void cleanUpEmptyParents(String imagePath); - protected abstract long getUsedSize() ; - protected abstract long getTotalSize(); - protected abstract String destroy(final String imagePath) ; - protected abstract String createTrashDir(final String imagePath, final StringBuilder path) ; - public abstract boolean existPath(final String path); - public abstract String createPath(final String createPath) ; - protected abstract Answer execute(DestroyCommand cmd) ; - protected abstract UpgradeDiskAnswer execute(final UpgradeDiskCommand cmd); - protected abstract String delete(String imagePath, String extra); - protected abstract Storage.StorageResourceType getStorageResourceType(); - protected abstract void configureFolders(String name, Map params) throws ConfigurationException ; - - - - protected GetStorageStatsAnswer execute(final GetStorageStatsCommand cmd) { - final long size = getUsedSize(); - return size != -1 ? new GetStorageStatsAnswer(cmd, 0, size) : new GetStorageStatsAnswer(cmd, "Unable to get storage stats"); - } - - - - protected ManageSnapshotAnswer execute(final ManageSnapshotCommand cmd) { - final Script command = new Script(_manageSnapshotPath, _timeout, s_logger); - String path = null; - if (cmd.getCommandSwitch().equalsIgnoreCase(ManageSnapshotCommand.DESTROY_SNAPSHOT)) { - path = cmd.getSnapshotPath(); - } else if (cmd.getCommandSwitch().equalsIgnoreCase(ManageSnapshotCommand.CREATE_SNAPSHOT)) { - path = cmd.getVolumePath(); - } - command.add(cmd.getCommandSwitch(), path); - command.add("-n", cmd.getSnapshotName()); - - final String result = command.execute(); - return new ManageSnapshotAnswer(cmd, cmd.getSnapshotId(),cmd.getVolumePath(), (result == null), result); - } - - protected BackupSnapshotAnswer execute(final BackupSnapshotCommand cmd) { - // This is implemented only for XenServerResource - Answer answer = Answer.createUnsupportedCommandAnswer(cmd); - return new BackupSnapshotAnswer(cmd, false, answer.getDetails(), null); - } - - protected CreatePrivateTemplateAnswer execute(final CreatePrivateTemplateCommand cmd) { - final Script command = new Script(_createPrivateTemplatePath, _timeout, s_logger); - - String installDir = _userPrivateTemplateRootDir; - if (installDir.startsWith("/")) { - installDir = installDir.substring(1); - } - - command.add("-p", cmd.getSnapshotPath()); - command.add("-s", cmd.getTemplateName()); - command.add("-d", installDir); - command.add("-u", cmd.getUserFolder()); - String templateName = cmd.getTemplateName().replaceAll(" ", "_"); //hard to pass spaces to shell scripts - if (templateName.length() > 32) { - templateName = templateName.substring(0,31); //truncate - } - command.add("-n", templateName); - - final String result = command.execute(); - CreatePrivateTemplateAnswer answer = new CreatePrivateTemplateAnswer(cmd, (result == null), result, null, 0, null, null); - - if (result == null) { - answer.setPath("/" + installDir + "/" + cmd.getUserFolder() + "/" + templateName); - } - - return answer; - } - - protected String create(final String rootdiskFolder, final int rootDiskSizeGB) { - - final Script command = new Script(_createvmPath, _timeout, s_logger); - command.add("-i", rootdiskFolder); - command.add("-S", Integer.toString(rootDiskSizeGB)); - - return command.execute(); - } - - protected String create(final String templateFolder, final String rootdiskFolder, final String userPath, final String dataPath, String localPath) { - - final Script command = new Script(_createvmPath, _timeout, s_logger); - command.add("-t", templateFolder); - command.add("-i", rootdiskFolder); - command.add("-u", userPath); - if (dataPath != null) { - command.add("-d", dataPath); - } - - return command.execute(); - } - - protected String create(final String templateFolder, final String rootdiskFolder, final String userPath, final String datadiskFolder, final String datadiskName, final int datadiskSize, String localPath) { - - final Script command = new Script(_createvmPath, _timeout, s_logger); - - // for private templates, the script needs the snapshot name being used to create the VM - command.add("-t", templateFolder); - command.add("-i", rootdiskFolder); - command.add("-u", userPath); - if (datadiskSize != 0) { - command.add("-f", datadiskFolder); - command.add("-s", Integer.toString(datadiskSize)); - command.add("-n", datadiskName); - } - - return command.execute(); - } - - @Override - public PingCommand getCurrentStatus(final long id) { - return new PingStorageCommand(Host.Type.Storage, id, new HashMap()); - } - - @Override - public StartupCommand[] initialize() { - final StartupStorageCommand cmd = new StartupStorageCommand(_parent, StoragePoolType.NetworkFilesystem, getTotalSize(), new HashMap()); - cmd.setResourceType(getStorageResourceType()); - cmd.setIqn(getIQN()); - fillNetworkInformation(cmd); - return new StartupCommand [] {cmd}; - } - - protected String getIQN() { - final Script command = new Script(_iqnPath, 500, s_logger); - final OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser(); - final String result = command.execute(parser); - if (result != null) { - throw new CloudRuntimeException("Unable to get iqn: " + result); - } - - return parser.getLine(); - } - - @Override - protected String findScript(String script) { - return Script.findScript(_zfsScriptsDir, script); - } - - @Override - protected abstract String getDefaultScriptsDir(); - - @Override - public boolean configure(final String name, final Map params) throws ConfigurationException { - if (!super.configure(name, params)) { - s_logger.warn("Base class was unable to configure"); - return false; - } - - _zfsScriptsDir = (String)params.get("zfs.scripts.dir"); - if (_zfsScriptsDir == null) { - _zfsScriptsDir = getDefaultScriptsDir(); - } - - String value = (String)params.get("scripts.timeout"); - _timeout = NumbersUtil.parseInt(value, 1440) * 1000; - - _createvmPath = findScript("createvm.sh"); - if (_createvmPath == null) { - throw new ConfigurationException("Unable to find the createvm.sh"); - } - s_logger.info("createvm.sh found in " + _createvmPath); - - _delvmPath = findScript("delvm.sh"); - if (_delvmPath == null) { - throw new ConfigurationException("Unable to find the delvm.sh"); - } - s_logger.info("delvm.sh found in " + _delvmPath); - - _listvmdiskPath = findScript("listvmdisk.sh"); - if (_listvmdiskPath == null) { - throw new ConfigurationException("Unable to find the listvmdisk.sh"); - } - s_logger.info("listvmdisk.sh found in " + _listvmdiskPath); - - _listvmdisksizePath = findScript("listvmdisksize.sh"); - if (_listvmdisksizePath == null) { - throw new ConfigurationException("Unable to find the listvmdisksize.sh"); - } - s_logger.info("listvmdisksize.sh found in " + _listvmdisksizePath); - - _iqnPath = findScript("get_iqn.sh"); - if (_iqnPath == null) { - throw new ConfigurationException("Unable to find get_iqn.sh"); - } - s_logger.info("get_iqn.sh found in " + _iqnPath); - - _manageSnapshotPath = findScript("managesnapshot.sh"); - if (_manageSnapshotPath == null) { - throw new ConfigurationException("Unable to find the managesnapshot.sh"); - } - s_logger.info("managesnapshot.sh found in " + _manageSnapshotPath); - - _manageVolumePath = findScript("managevolume.sh"); - if (_manageVolumePath == null) { - throw new ConfigurationException("Unable to find managevolume.sh"); - } - s_logger.info("managevolume.sh found in " + _manageVolumePath); - - _createPrivateTemplatePath = findScript("create_private_template.sh"); - if (_createPrivateTemplatePath == null) { - throw new ConfigurationException("Unable to find the create_private_template.sh"); - } - s_logger.info("create_private_template.sh found in " + _createPrivateTemplatePath); - - _checkchildrenPath = findScript("checkchildren.sh"); - if (_checkchildrenPath == null) { - throw new ConfigurationException("Unable to find the checkchildren.sh"); - } - - value = (String)params.get("developer"); - boolean isDeveloper = Boolean.parseBoolean(value); - - _instance = (String)params.get("instance"); - /* - String guid = (String)params.get("guid"); - if (!isDeveloper && guid == null) { - throw new ConfigurationException("Unable to find the guid"); - } - _guid = guid;*/ - /* - params.put("template.parent", _parent); - _downloadManager = new DownloadManagerImpl(); - _downloadManager.configure("DownloadManager", params);*/ - - return true; - } - - @Override - public Host.Type getType() { - return Host.Type.Storage; - } - - protected boolean hasChildren(final String path) { - final Script script = new Script(_checkchildrenPath, _timeout, s_logger); - script.add(path); - - return script.execute() != null; // not null means there's children. - } - - - public static class SizeParser extends OutputInterpreter { - long size = 0; - @Override - public String interpret(final BufferedReader reader) throws IOException { - String line = null; - final StringBuilder buff = new StringBuilder(); - while ((line = reader.readLine()) != null) { - buff.append(line); - } - - size = Long.parseLong(buff.toString()); - - return null; - } - } - - public static class PathParser extends OutputInterpreter { - String path; - @Override - public String interpret(final BufferedReader reader) throws IOException { - String line = null; - final StringBuilder buff = new StringBuilder(); - while ((line = reader.readLine()) != null) { - buff.append(line); - } - - path = buff.toString(); - if (path != null && path.length() == 0) { - path = null; - } - - return null; - } - } - - protected class VolumeSnapshotRequest { - private final long _volumeId; - private final String _snapshotPath; - - public VolumeSnapshotRequest(long volumeId, String snapshotPath) { - _volumeId = volumeId; - _snapshotPath = snapshotPath; - } - - public long getVolumeId() { - return _volumeId; - } - - public String getSnapshotPath() { - return _snapshotPath; - } - } -} diff --git a/core/src/com/cloud/storage/template/DownloadManager.java b/core/src/com/cloud/storage/template/DownloadManager.java index aab5bc882fb..e3838f4f95c 100644 --- a/core/src/com/cloud/storage/template/DownloadManager.java +++ b/core/src/com/cloud/storage/template/DownloadManager.java @@ -22,7 +22,6 @@ import java.util.Map; import com.cloud.agent.api.storage.DownloadAnswer; import com.cloud.agent.api.storage.DownloadCommand; -import com.cloud.storage.StorageResource; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.Storage.ImageFormat; import com.cloud.utils.component.Manager; @@ -104,9 +103,7 @@ public interface DownloadManager extends Manager { * @return list of template info for installed templates */ public Map gatherTemplateInfo(); - - public String setRootDir(String rootDir, StorageResource storage); - + public String getPublicTemplateRepo(); } \ No newline at end of file diff --git a/core/src/com/cloud/storage/template/DownloadManagerImpl.java b/core/src/com/cloud/storage/template/DownloadManagerImpl.java index ef7ce156e83..5e78a53c071 100644 --- a/core/src/com/cloud/storage/template/DownloadManagerImpl.java +++ b/core/src/com/cloud/storage/template/DownloadManagerImpl.java @@ -46,7 +46,6 @@ import com.cloud.agent.api.storage.DownloadProgressCommand.RequestType; import com.cloud.exception.InternalErrorException; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.StorageLayer; -import com.cloud.storage.StorageResource; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.template.Processor.FormatInfo; import com.cloud.storage.template.TemplateDownloader.DownloadCompleteCallback; @@ -208,19 +207,6 @@ public class DownloadManagerImpl implements DownloadManager { private int installTimeoutPerGig = 180 * 60 * 1000; private boolean _sslCopy; - @Override - public String setRootDir(String rootDir, StorageResource storage) { - /* - * if (!storage.existPath(rootDir + templateDownloadDir)) { s_logger.info("Creating template download path: " + - * rootDir + templateDownloadDir); String result = storage.createPath(rootDir + templateDownloadDir); if (result - * != null) { return "Cannot create " + rootDir + templateDownloadDir + " due to " + result; } } - * this.templateDownloadDir = rootDir + templateDownloadDir; - */ - this.publicTemplateRepo = rootDir + publicTemplateRepo; - - return null; - } - /** * Get notified of change of job status. Executed in context of downloader thread * diff --git a/core/src/com/cloud/storage/template/UploadManager.java b/core/src/com/cloud/storage/template/UploadManager.java index e0c14efddc9..f922326c7a4 100755 --- a/core/src/com/cloud/storage/template/UploadManager.java +++ b/core/src/com/cloud/storage/template/UploadManager.java @@ -6,7 +6,6 @@ import com.cloud.agent.api.storage.DeleteEntityDownloadURLAnswer; import com.cloud.agent.api.storage.DeleteEntityDownloadURLCommand; import com.cloud.agent.api.storage.UploadAnswer; import com.cloud.agent.api.storage.UploadCommand; -import com.cloud.storage.StorageResource; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Upload.Status; import com.cloud.utils.component.Manager; @@ -54,8 +53,6 @@ public interface UploadManager extends Manager { * @return answer representing status of upload. */ public UploadAnswer handleUploadCommand(UploadCommand cmd); - - public String setRootDir(String rootDir, StorageResource storage); public String getPublicTemplateRepo(); diff --git a/core/src/com/cloud/storage/template/UploadManagerImpl.java b/core/src/com/cloud/storage/template/UploadManagerImpl.java index ea335a6ebae..fb2c53c5d5c 100755 --- a/core/src/com/cloud/storage/template/UploadManagerImpl.java +++ b/core/src/com/cloud/storage/template/UploadManagerImpl.java @@ -24,7 +24,6 @@ import com.cloud.agent.api.storage.UploadCommand; import com.cloud.agent.api.storage.UploadProgressCommand; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.StorageLayer; -import com.cloud.storage.StorageResource; import com.cloud.storage.Upload; import com.cloud.storage.UploadVO; import com.cloud.storage.template.TemplateUploader.Status; @@ -403,12 +402,6 @@ public class UploadManagerImpl implements UploadManager { return 0; } - @Override - public String setRootDir(String rootDir, StorageResource storage) { - this.publicTemplateRepo = rootDir + publicTemplateRepo; - return null; - } - @Override public boolean configure(String name, Map params) throws ConfigurationException { diff --git a/scripts/storage/zfs/iscsi/comstar/createtmplt.sh b/scripts/storage/zfs/iscsi/comstar/createtmplt.sh deleted file mode 100755 index e992b3f7291..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/createtmplt.sh +++ /dev/null @@ -1,270 +0,0 @@ -#!/usr/bin/env bash -# $Id: createtmplt.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/createtmplt.sh $ -# createtmplt.sh -- install a template - -usage() { - printf "Usage: %s: -t -n -f -s -c -d -h [-u]\n" $(basename $0) >&2 -} - - -#set -x - -rollback_if_needed() { - if [ $2 -gt 0 ] - then - printf "$3\n" - #back out all changes - zfs destroy -r $1 - exit 2 -fi -} - -verify_cksum() { - echo "$1 $2" | md5sum -c --status - #printf "$1\t$2" | md5sum -c --status - if [ $? -gt 0 ] - then - printf "Checksum failed, not proceeding with install\n" - exit 3 - fi -} - -untar() { - local ft=$(file $1| awk -F" " '{print $2}') - local basedir=$(dirname $1) - case $ft in - USTAR) local rootimg=$(tar tf $1 | grep $3) - (cd $2; tar xf $1) - rm -f $1 - printf "$2/$rootimg" - ;; - *) printf "$1" - return 0 - ;; - esac - -} - -uncompress() { - local ft=$(file $1| awk -F" " '{print $2}') - local imgfile=${1%.*} #strip out trailing file suffix - local tmpfile=${imgfile}.tmp - - case $ft in - gzip) gunzip -c $1 > $tmpfile - ;; - bzip2) bunzip2 -c $1 > $tmpfile - ;; - ZIP) unzip -p $1 | cat > $tmpfile - ;; - *) printf "$1" - return 0 - ;; - esac - - if [ $? -gt 0 ] - then - printf "Failed to uncompress file, exiting " - exit 1 - fi - - mv $tmpfile $imgfile - printf "$imgfile" - - return 0 -} - -create_vol_from_file() { - local tmpltfs=$1 - local tmpltimg=$2 - local tgtvol=$3 - local tgtdisk=$4 - local volsize=$5 - local cleanup=$6 - - zfs list -H -o name $tgtvol - - #create it if it doesn't exist - if [ $? -gt 0 ] - then - zfs create -V $volsize -s $tgtvol - if [ $? -gt 0 ] - then - printf "Failed to create the target root disk volume\n" - exit 5 - fi - fi - - local osversion=$(uname -v) - if [ "$osversion" == "snv_111b" ] - then - #copy 64k of zeros for LUN metatdata - dd if=/dev/zero of=$tgtdisk bs=64k count=1 - #copy the file to the disk - dd if=$tmpltimg of=$tgtdisk bs=64k seek=1 - else - #copy the file to the disk. Could just use 'cp' as well - dd if=$tmpltimg of=$tgtdisk bs=1024k - fi - - - rollback_if_needed $tmpltfs $? "Failed to copy root disk" - - if [ "$cleanup" == "true" ] - then - rm -f $tmpltimg - fi -} - -tflag= -nflag= -fflag= -sflag= -hflag= -hvm=false -cleanup=false -dflag= -cflag= - -while getopts 'uht:n:f:s:c:d:' OPTION -do - case $OPTION in - t) tflag=1 - tmpltfs="$OPTARG" - ;; - n) nflag=1 - tmpltname="$OPTARG" - ;; - f) fflag=1 - tmpltimg="$OPTARG" - ;; - s) sflag=1 - volsize="$OPTARG" - ;; - c) cflag=1 - cksum="$OPTARG" - ;; - d) dflag=1 - descr="$OPTARG" - ;; - h) hflag=1 - hvm="true" - ;; - u) cleanup="true" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$tflag$nflag$fflag$sflag" != "1111" ] -then - usage - exit 2 -fi - -if [ -n "$cksum" ] -then - verify_cksum $cksum $tmpltimg -fi - -if [ ${tmpltfs:0:1} == / ] -then - tmpltfs=${tmpltfs:1} -fi - -if [ ! -d /$tmpltfs ] -then - zfs create $tmpltfs - if [ $? -gt 0 ] - then - printf "Failed to create user fs $tmpltfs\n" >&2 - exit 1 - fi -fi - -if [[ $(zfs get -H -o value -p type $tmpltfs) != filesystem ]] -then - printf "template fs doesn't exist\n" >&2 - exit 2 -fi - -tmpltimg2=$(uncompress $tmpltimg) -tmpltimg2=$(untar $tmpltimg2 /$tmpltfs vmi-root) - -if [ ! -f $tmpltimg2 ] -then - rollback_if_needed $tmpltfs 2 "root disk file $tmpltimg doesn't exist\n" - exit 3 -fi - -# need the 'G' suffix on volume size -if [ ${volsize:(-1)} != G ] -then - volsize=${volsize}G -fi - -#determine source file size -- it needs to be less than or equal to volsize -imgsize=$(ls -lh $tmpltimg2| awk -F" " '{print $5}') -if [ ${imgsize:(-1)} == G ] -then - imgsize=${imgsize%G} #strip out the G - imgsize=${imgsize%.*} #...and any decimal part - let imgsize=imgsize+1 # add 1 to compensate for decimal part - volsizetmp=${volsize%G} - if [ $volsizetmp -lt $imgsize ] - then - volsize=${imgsize}G - fi -fi - -tgtvol=${tmpltfs}/vmi-root-${tmpltname} -tgtdisk=/dev/zvol/dsk/${tgtvol} - -create_vol_from_file $tmpltfs $tmpltimg2 $tgtvol $tgtdisk $volsize $cleanup - -tmpltswap=$(ls -lh /$tmpltfs | grep swap) -if [ $? -eq 0 ] -then - swapsize=$(echo $tmpltswap | awk '{print $5}') - tmpltswap=$(echo $tmpltswap | awk '{print $NF}') - tmpltswap=/${tmpltfs}/${tmpltswap} - tgtvol=${tmpltfs}/vmi-swap-${tmpltname} - tgtdisk=/dev/zvol/dsk/${tgtvol} - create_vol_from_file $tmpltfs $tmpltswap $tgtvol $tgtdisk $swapsize $cleanup -fi - - -if [ "$hvm" != "true" ] -then - vmlinuz=$(ls /$tmpltfs/vmlinuz*) - if [ "$vmlinuz" == "" ] - then - touch /$tmpltfs/pygrub - fi -fi - -rollback_if_needed $tmpltfs $? "Failed to create pygrub file" - -touch /$tmpltfs/template.properties -rollback_if_needed $tmpltfs $? "Failed to create template.properties file" -echo -n "" > /$tmpltfs/template.properties - -today=$(date '+%m_%d_%Y') -echo "snapshot.name=$today" > /$tmpltfs/template.properties -echo "description=$descr" >> /$tmpltfs/template.properties -echo "name=$tmpltname" >> /$tmpltfs/template.properties -echo "checksum=$cksum" >> /$tmpltfs/template.properties -echo "hvm=$hvm" >> /$tmpltfs/template.properties -echo "volume.size=$volsize" >> /$tmpltfs/template.properties - -zfs snapshot -r $tmpltfs@$today -rollback_if_needed $tmpltfs $? "Failed to snapshot filesystem" - -if [ "$cleanup" == "true" ] -then - rm -f $tmpltimg -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/createvm.sh b/scripts/storage/zfs/iscsi/comstar/createvm.sh deleted file mode 100755 index d24133ea595..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/createvm.sh +++ /dev/null @@ -1,268 +0,0 @@ -#!/usr/bin/env bash -# $Id: createvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/createvm.sh $ -# createvm.sh -- create a vm image directory by cloning (iscsi mode) -# OpenSolaris - -usage() { - printf "Usage: %s: -t -d -i -u \n" $(basename $0) >&2 -} - -logzfs() { - if [ -z "$debug" ] - then - return - fi - local elapsed=0 - printf "$(date +'%H:%M:%S') $*\n" >&3 - if [ "$(echo $1| awk '{print $1}')" == "start:" ] - then - start="$(/usr/gnu/bin/date +'%s')" - return - fi - if [ "$(echo $1| awk '{print $1}')" == "end:" ] - then - end="$(/usr/gnu/bin/date +'%s')" - let elapsed=end-start - printf "t=$elapsed $*\n" >&3 - fi -} - -#ensure that the instance fs is mounted within the user fs -check_valid_userfs() { - local ifs=$1 - local ufs=$2 - local child=${ifs#$ufs} - if [ ${#child} -eq $(( ${#ifs}-${#ufs} )) ] - then - return 0 - else - printf "instance fs $ifs is not contained within user fs $ufs. Bailing\n" >&2 - exit 3; - fi -} - -get_instance() { - echo $(basename $1) -} - -get_latest_snapshot() { - local fs=$1 - local tsnap=$(echo $fs | cut -f1 -d'@') - if [ "$tsnap" == "$fs" ] - then - snap=$(zfs list -r -H -o name -S name -S creation -t snapshot $tsnap| head -1) - if [ -z $snap ] - then - return 1 - fi - echo $snap - return 0 - else - echo $fs - return - fi -} - -#trap 'echo "killed..." >&3; exec 3>&-; exit 9' TERM INT KILL -#set -x - -tflag= -iflag= -uflag= -dflag= -sflag= -start= -end= -#debug=1 - -while getopts 't:i:u:d:s:' OPTION -do - case $OPTION in - t) tflag=1 - templatefs="$OPTARG" - ;; - i) iflag=1 - instancefs="$OPTARG" - ;; - u) uflag=1 - userfs="$OPTARG" - ;; - d) dflag=1 - diskfs="$OPTARG" - ;; - s) sflag=1 - diskfs="" - disksize="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$tflag$iflag$uflag" != "111" ] -then - usage - exit 2 -fi - -#either -d or -s but not both -if [ "$dflag$sflag" == "11" ] -then - usage - exit 2 -fi - -#if user has provided leading slash, strip it out -if [ ${userfs:0:1} == / ] -then - userfs=${userfs:1} -fi - -if [ ${templatefs:0:1} == / ] -then - templatefs=${templatefs:1} -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - -if [ -n "$diskfs" ] -then - if [ ${diskfs:0:1} == / ] - then - diskfs=${diskfs:1} - fi -fi - -if [ -n "$disksize" ] -then - suffix=${disksize:(-1)} - echo $suffix - case $suffix in - G) - ;; - [0-9]) disksize=${disksize}G - ;; - *) printf "Error in disk size: expect G as a suffix or no suffix\n" - exit 2 - ;; - esac - -fi - -instance=$(get_instance $instancefs) -if [ -n "$debug" ] -then - exec 3<>$(dirname $0)/../../../logs/create$instance.log -fi - -check_valid_userfs $instancefs $userfs - - -#if user has provided the exact snapshot of the template fs, use it, -#else get the latest snapshot -tsnap=$(echo $templatefs | cut -f1 -d'@') -if [ "$tsnap" == "$templatefs" ] -then - logzfs "start: get_latest_snapshot" - tsnap=$(get_latest_snapshot $templatefs) - logzfs "end: get_latest_snapshot" - if [ -z "$tsnap" ] - then - printf "No snapshots exist of filesystem $templatefs..bailing\n" >&2 - exit 4 - fi -else - tsnap=$templatefs - templatefs=$(echo $templatefs | cut -f1 -d'@') #strip out snap version -fi - -snapt=$(echo $tsnap | cut -f2 -d'@') - -if [ -n "$diskfs" ] -then - logzfs "start: get_latest_snapshot" - disksnap=$(get_latest_snapshot $diskfs) - logzfs "end: get_latest_snapshot" - if [ -z "$disksnap" ] - then - printf "No snapshots exist of disk filesystem $diskfs..bailing\n" >&2 - exit 6 - fi - diskfs=$(echo $diskfs | cut -d'@' -f1) -fi - -#Clone root disk and associated files -printf "Cloning root disk $tsnap to $instancefs\n" >&2 -logzfs "start: zfs clone -p $tsnap $instancefs" -zfs clone -p $tsnap $instancefs -if [ $? -gt 0 ] -then - printf "Failed to clone root disk $tsnap\n" >&2 - exit 5 -fi -logzfs "end: zfs clone -p $tsnap $instancefs" - -#get root disk/swapdisk volume contained within templatefs -logzfs "start: zfs list -H -o name -t volume -r $templatefs" -for vol in $(zfs list -H -o name -t volume -r $templatefs ) -do - #clone the snapshot - logzfs "start: zfs clone $vol@$snapt $instancefs/$(basename $vol)" - zfs clone $vol@$snapt $instancefs/$(basename $vol) - if [ $? -gt 0 ] - then - printf "Failed to clone root disk $vol$snapt\n" >&2 - exit 5 - fi - sbdadm create-lu /dev/zvol/dsk/$instancefs/$(basename $vol) - if [ $? -gt 0 ] - then - printf "Failed to create the lun for /dev/zvol/dsk/$instancefs/$(basename $vol)\n" >&2 - exit 10 - fi - logzfs "end: zfs clone $vol@$snapt $instancefs/$(basename $vol)" -done - -rc=0 -#Clone datadisk -if [ -n "$diskfs" ] -then - logzfs "start: zfs clone $disksnap $instancefs/datadisk1-$(basename $diskfs)" - zfs clone $disksnap $instancefs/datadisk1-$(basename $diskfs) - if [ $? -gt 0 ] - then - printf "Failed to clone data disk $disksnap\n" >&2 - exit 5 - fi - sbdadm create-lu /dev/zvol/dsk/$instancefs/datadisk1-$(basename $diskfs) - if [ $? -gt 0 ] - then - printf "Failed to create the lun for /dev/zvol/dsk/$instancefs/datadisk1-$(basename $diskfs)\n" >&2 - exit 10 - fi - logzfs "end: zfs clone $disksnap $instancefs/datadisk1-$(basename $diskfs)" -fi - -if [ -n "$disksize" ] -then - logzfs "start: zfs create $instancefs/datadisk1" - zfs create -V $disksize -s $instancefs/datadisk1 #-s for sparse - if [ $rc -gt 0 ] - then - printf "Failed to create data disk $instancefs/datadisk1\n" >&2 - exit 6 - fi - sbdadm create-lu /dev/zvol/dsk/$instancefs/datadisk1 - if [ $? -gt 0 ] - then - printf "Failed to create the lun for /dev/zvol/dsk/$instancefs/datadisk1\n" >&2 - exit 10 - fi - logzfs "end: zfs create $instancefs/datadisk1" -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/delvm.sh b/scripts/storage/zfs/iscsi/comstar/delvm.sh deleted file mode 100755 index 8bb6a8be061..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/delvm.sh +++ /dev/null @@ -1,203 +0,0 @@ -#!/usr/bin/env bash -# $Id: delvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/delvm.sh $ -# delvm.sh -- delete a cloned image used for a vm -# OpenSolaris - -usage() { - printf "Usage: %s: -i -l | -u \n" $(basename $0) >&2 -} - -delete_lu() { # - local lu=$1 - local result= - result=$(sbdadm delete-lu $lu 2>&1) - if [ $? -ne 0 ] - then - if [ $? -ne 1 ] - then - printf "Unable to delete lun: $result\n" >&2 - return 4 - fi - echo $result | grep "not found" - if [ $? -ne 0 ] - then - printf "Unable to delete lun: $result\n" >&2 - return 5 - fi - fi - return 0 -} - -delete_all_lu() { - local lu_list=$(sbdadm list-lu | grep $1 | awk '{print $1}') - local lu - for lu in $lu_list - do - delete_lu $lu - done -} - -#set -x -logzfs() { - if [ -z "$debug" ] - then - return - fi - local elapsed=0 - printf "$(date +'%H:%M:%S') $*\n" >&3 - if [ "$(echo $1| awk '{print $1}')" == "start:" ] - then - start="$(/usr/gnu/bin/date +'%s')" - return - fi - if [ "$(echo $1| awk '{print $1}')" == "end:" ] - then - end="$(/usr/gnu/bin/date +'%s')" - let elapsed=end-start - printf "t=$elapsed $*\n" >&3 - fi -} -get_instance() { - echo $(basename $1) -} - -iflag= -uflag= -lflag= -userfs= -instancefs= -start= -end= -tgtname= -#debug=1 - -while getopts 'i:u:l:' OPTION -do - case $OPTION in - i) iflag=1 - instancefs="$OPTARG" - ;; - u) uflag=1 - userfs="$OPTARG" - ;; - l) lflag=1 - tgtname="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$iflag$uflag" != "1" -a "$iflag$uflag" != "11" ] -then - usage - exit 2 -fi - -if [[ -n $instancefs && ${instancefs:0:1} == / ]] -then - instancefs=${instancefs:1} -fi - -if [[ -n $userfs && ${userfs:0:1} == / ]] -then - userfs=${userfs:1} -fi - -if [ "$iflag" == "1" ] -then - result=$(zfs get -H -o value -p type $instancefs 2>&1) - if [ $? -eq 0 ] - then - if [ $result != filesystem ] - then - printf "Supplied instance fs doesn't exist\n" >&2 - exit 1 - fi - else - echo $result | grep "dataset does not exist" - if [ $? -eq 0 ] - then - exit 0 - else - printf "Unable to get information on $instancefs due to $result\n" >&2 - exit 2 - fi - fi -fi - -if [[ "$uflag" == 1 && $(zfs get -H -o value -p type $userfs) != filesystem ]] -then - printf "Supplied user fs doesn't exist\n" >&2 - exit 1 -fi - -instance=$(get_instance $instancefs) -if [ -n "$debug" ] -then - exec 3<>$(dirname $0)/../../../logs/del$instance.log -fi - -if [ "$iflag" == 1 ] -then - printf "Going to destroy $instancefs and its children\n" - logzfs "start: zfs destroy -r -f $instancefs " - if [ "$lflag" == 1 ] - then - for l in `echo $tgtname | tr ',' ' '` - do - lu=`echo $l | cut -d':' -f5` - delete_lu $lu - if [ $? -ne 0 ] - then - exit $? - fi - done - else - delete_all_lu $instancefs - fi - - result=$(zfs destroy -r -f $instancefs 2>&1) - rc=$? - logzfs "end: zfs destroy -r -f $instancefs " - if [ $rc -gt 0 ] - then - echo $result | grep "dataset does not exist" - if [ $? -ne 0 ] - then - sleep 10 - printf "Trying again to destroy instance fs $instancefs \n" >&2 - result=$(zfs destroy -r -f $instancefs 2>&1) - if [ $? -ne 0 ] - then - printf "Failed to destroy instance fs $instancefs, numchildren=$numc, result=$result\n" >&2 - exit 5 - fi - fi - fi -fi - -if [ "$uflag" == 1 ] -then - printf "Going to destroy $userfs and its children\n" - logzfs "start: zfs destroy -r -f $userfs" - delete_all_lu $userfs - zfs destroy -r -f $userfs - rc=$? - logzfs "end: zfs destroy -r -f $userfs" - if [ $rc -gt 0 ] - then - numc=$(zfs list -Hr $userfs 2> /dev/null| wc -l) - if [ "$numc" -eq 1 ] - then - printf "Trying again to destroy user fs $userfs \n" >&2 - zfs destroy -r -f $userfs - else - printf "Failed to destroy user fs $userfs, numchildren=$numc\n" >&2 - exit 5 - fi - fi -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/filebacked/createtmplt.sh b/scripts/storage/zfs/iscsi/comstar/filebacked/createtmplt.sh deleted file mode 100755 index 53a54385441..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/filebacked/createtmplt.sh +++ /dev/null @@ -1,247 +0,0 @@ -#!/usr/bin/env bash -# $Id: createtmplt.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/filebacked/createtmplt.sh $ -# createtmplt.sh -- install a template - -usage() { - printf "Usage: %s: -t -n -f -s -c -d -h [-u]\n" $(basename $0) >&2 -} - - -#set -x - -rollback_if_needed() { - if [ $2 -gt 0 ] - then - printf "$3\n" - #back out all changes - zfs destroy -r $1 - exit 2 -fi -} - -verify_cksum() { - echo "$1 $2" | md5sum -c --status - #printf "$1\t$2" | md5sum -c --status - if [ $? -gt 0 ] - then - printf "Checksum failed, not proceeding with install\n" - exit 3 - fi -} - -untar() { - local ft=$(file $1| awk -F" " '{print $2}') - local basedir=$(dirname $1) - case $ft in - USTAR) local rootimg=$(tar tf $1 | grep $3) - (cd $2; tar xf $1) - rm -f $1 - printf "$2/$rootimg" - ;; - *) printf "$1" - return 0 - ;; - esac - -} - -uncompress() { - local ft=$(file $1| awk -F" " '{print $2}') - local imgfile=${1%.*} #strip out trailing file suffix - local tmpfile=${imgfile}.tmp - - case $ft in - gzip) gunzip -c $1 > $tmpfile - ;; - bzip2) bunzip2 -c $1 > $tmpfile - ;; - ZIP) unzip -p $1 | cat > $tmpfile - ;; - *) printf "$1" - return 0 - ;; - esac - - if [ $? -gt 0 ] - then - printf "Failed to uncompress file, exiting " - exit 1 - fi - - mv $tmpfile $imgfile - printf "$imgfile" - - return 0 -} - -create_from_file() { - local tmpltfs=$1 - local tmpltimg=$2 - local tgtfile=$3 - local volsize=$4 - local cleanup=$5 - - #copy 64k of zeros for LUN metatdata - dd if=/dev/zero of=/$tgtfile bs=64k count=1 - - #copy the file to the disk - dd if=$tmpltimg of=/$tgtfile bs=64k seek=1 - - rollback_if_needed $tmpltfs $? "Failed to copy root disk" - - if [ "$cleanup" == "true" ] - then - rm -f $tmpltimg - fi -} - -tflag= -nflag= -fflag= -sflag= -hflag= -hvm=false -cleanup=false -dflag= -cflag= - -while getopts 'uht:n:f:s:c:d:' OPTION -do - case $OPTION in - t) tflag=1 - tmpltfs="$OPTARG" - ;; - n) nflag=1 - tmpltname="$OPTARG" - ;; - f) fflag=1 - tmpltimg="$OPTARG" - ;; - s) sflag=1 - volsize="$OPTARG" - ;; - c) cflag=1 - cksum="$OPTARG" - ;; - d) dflag=1 - descr="$OPTARG" - ;; - h) hflag=1 - hvm="true" - ;; - u) cleanup="true" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$tflag$nflag$fflag$sflag" != "1111" ] -then - usage - exit 2 -fi - -if [ -n "$cksum" ] -then - verify_cksum $cksum $tmpltimg -fi - -if [ ${tmpltfs:0:1} == / ] -then - tmpltfs=${tmpltfs:1} -fi - -if [ ! -d /$tmpltfs ] -then - zfs create $tmpltfs - if [ $? -gt 0 ] - then - printf "Failed to create user fs $tmpltfs\n" >&2 - exit 1 - fi -fi - -if [[ $(zfs get -H -o value -p type $tmpltfs) != filesystem ]] -then - printf "template fs doesn't exist\n" >&2 - exit 2 -fi - -tmpltimg2=$(uncompress $tmpltimg) -tmpltimg2=$(untar $tmpltimg2 /$tmpltfs vmi-root) - -if [ ! -f $tmpltimg2 ] -then - rollback_if_needed $tmpltfs 2 "root disk file $tmpltimg doesn't exist\n" - exit 3 -fi - -# need the 'G' suffix on volume size -if [ ${volsize:(-1)} != G ] -then - volsize=${volsize}G -fi - -#determine source file size -- it needs to be less than or equal to volsize -imgsize=$(ls -lh $tmpltimg2| awk -F" " '{print $5}') -if [ ${imgsize:(-1)} == G ] -then - imgsize=${imgsize%G} #strip out the G - imgsize=${imgsize%.*} #...and any decimal part - let imgsize=imgsize+1 # add 1 to compensate for decimal part - volsizetmp=${volsize%G} - if [ $volsizetmp -lt $imgsize ] - then - volsize=${imgsize}G - fi -fi - -tgtfile=${tmpltfs}/vmi-root-${tmpltname} - -create_from_file $tmpltfs $tmpltimg2 $tgtfile $volsize $cleanup - -tmpltswap=$(ls -lh /$tmpltfs | grep swap) -if [ $? -eq 0 ] -then - swapsize=$(echo $tmpltswap | awk '{print $5}') - tmpltswap=$(echo $tmpltswap | awk '{print $NF}') - tmpltswap=/${tmpltfs}/${tmpltswap} - tgtfile=${tmpltfs}/vmi-swap-${tmpltname} - create_from_file $tmpltfs $tmpltswap $tgtfile $swapsize $cleanup -fi - - -if [ "$hvm" != "true" ] -then - vmlinuz=$(ls /$tmpltfs/vmlinuz*) - if [ "$vmlinuz" == "" ] - then - touch /$tmpltfs/pygrub - fi -fi - -rollback_if_needed $tmpltfs $? "Failed to create pygrub file" - -touch /$tmpltfs/template.properties -rollback_if_needed $tmpltfs $? "Failed to create template.properties file" -echo -n "" > /$tmpltfs/template.properties - -today=$(date '+%m_%d_%Y') -echo "snapshot.name=$today" > /$tmpltfs/template.properties -echo "description=$descr" >> /$tmpltfs/template.properties -echo "name=$tmpltname" >> /$tmpltfs/template.properties -echo "checksum=$cksum" >> /$tmpltfs/template.properties -echo "hvm=$hvm" >> /$tmpltfs/template.properties -echo "volume.size=$volsize" >> /$tmpltfs/template.properties - -zfs snapshot -r $tmpltfs@vmops_ss -rollback_if_needed $tmpltfs $? "Failed to snapshot filesystem" - -if [ "$cleanup" == "true" ] -then - rm -f $tmpltimg -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/filebacked/createvm.sh b/scripts/storage/zfs/iscsi/comstar/filebacked/createvm.sh deleted file mode 100755 index 318ece266bc..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/filebacked/createvm.sh +++ /dev/null @@ -1,253 +0,0 @@ -#!/usr/bin/env bash -# $Id: createvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/filebacked/createvm.sh $ -# createvm.sh -- create a vm image directory by cloning (iscsi mode) -# OpenSolaris - -usage() { - printf "Usage: %s: -t -d -i -u \n" $(basename $0) >&2 -} - -logzfs() { - if [ -z "$debug" ] - then - return - fi - local elapsed=0 - printf "$(date +'%H:%M:%S') $*\n" >&3 - if [ "$(echo $1| awk '{print $1}')" == "start:" ] - then - start="$(/usr/gnu/bin/date +'%s')" - return - fi - if [ "$(echo $1| awk '{print $1}')" == "end:" ] - then - end="$(/usr/gnu/bin/date +'%s')" - let elapsed=end-start - printf "t=$elapsed $*\n" >&3 - fi -} - -#ensure that the instance fs is mounted within the user fs -check_valid_userfs() { - local ifs=$1 - local ufs=$2 - local child=${ifs#$ufs} - if [ ${#child} -eq $(( ${#ifs}-${#ufs} )) ] - then - return 0 - else - printf "instance fs $ifs is not contained within user fs $ufs. Bailing\n" >&2 - exit 3; - fi -} - -get_instance() { - echo $(basename $1) -} - -get_latest_snapshot() { - local fs=$1 - local tsnap=$(echo $fs | cut -f1 -d'@') - if [ "$tsnap" == "$fs" ] - then - snap=$(zfs list -r -H -o name -S creation -t snapshot $tsnap | egrep "@([0-9][0-9]_[0-9][0-9]_[0-9][0-9][0-9][0-9]|vmops_ss)$" | head -1) - if [ -z $snap ] - then - return 1 - fi - echo $snap - return 0 - else - echo $fs - return - fi -} - -#trap 'echo "killed..." >&3; exec 3>&-; exit 9' TERM INT KILL -# set -x - -kflag= -tflag= -iflag= -uflag= -dflag= -sflag= -start= -end= -#debug=1 - -while getopts 't:i:u:s:k' OPTION -do - case $OPTION in - k) kflag=1 - ;; - t) tflag=1 - templatefs="$OPTARG" - ;; - i) iflag=1 - instancefs="$OPTARG" - ;; - u) uflag=1 - userfs="$OPTARG" - ;; - s) sflag=1 - disksize="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$tflag$iflag$uflag" != "111" ] -then - usage - exit 2 -fi - -#either -d or -s but not both -if [ "$dflag$sflag" == "11" ] -then - usage - exit 2 -fi - -#if user has provided leading slash, strip it out -if [ ${userfs:0:1} == / ] -then - userfs=${userfs:1} -fi - -if [ ${templatefs:0:1} == / ] -then - templatefs=${templatefs:1} -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - - -if [ -n "$disksize" ] -then - suffix=${disksize:(-1)} - echo $suffix - case $suffix in - G) - ;; - [0-9]) disksize=${disksize}G - ;; - *) printf "Error in disk size: expect G as a suffix or no suffix\n" - exit 2 - ;; - esac - -fi - -instance=$(get_instance $instancefs) -if [ -n "$debug" ] -then - exec 3<>$(dirname $0)/../../../logs/create$instance.log -fi - -check_valid_userfs $instancefs $userfs - - -#if user has provided the exact snapshot of the template fs, use it, -#else get the latest snapshot -tsnap=$(echo $templatefs | cut -f1 -d'@') -if [ "$tsnap" == "$templatefs" ] -then - logzfs "start: get_latest_snapshot" - tsnap=$(get_latest_snapshot $templatefs) - logzfs "end: get_latest_snapshot" - if [ -z "$tsnap" ] - then - printf "No snapshots exist of filesystem $templatefs..bailing\n" >&2 - exit 4 - fi -else - tsnap=$templatefs - templatefs=$(echo $templatefs | cut -f1 -d'@') #strip out snap version -fi - -snapt=$(echo $tsnap | cut -f2 -d'@') - - -if [ "$kflag" == "1" ]; then - # clone the data disk as well -- the tsnap variable and instancefs variables are not set up properly by this time - printf "Cloning private template $tsnap to $instancefs\n" >&2 - logzfs "start: zfs clone -p $tsnap $instancefs" - zfs clone -p $tsnap $instancefs - zfs clone -p $templatefs/rootdisk@$snapt $instancefs/rootdisk - zfs clone -p $templatefs/datadisk1@$snapt $instancefs/datadisk1 - if [ $? -gt 0 ] - then - printf "Failed to clone template $tsnap\n" >&2 - exit 9 - fi - rootdisk=$(ls /$instancefs/rootdisk/vmi-root*) - sbdadm create-lu $rootdisk - if [ $? -ne 0 ] - then - printf "Failed to create the lun\n" >&2 - exit 10; - fi - - datadisk=$(ls /$instancefs/datadisk1/data*) - sbdadm create-lu -s $disksize $datadisk - if [ $? -ne 0 ] - then - printf "Failed to create the lun\n" >&2 - exit 10; - fi - - logzfs "end: zfs clone -p $tsnap $instancefs" -else - - #Clone root disk and associated files - printf "Cloning root disk $tsnap to $instancefs\n" >&2 - logzfs "start: zfs clone -p $tsnap $instancefs" - zfs clone -p $tsnap $instancefs/rootdisk - if [ $? -gt 0 ] - then - printf "Failed to clone root disk $tsnap\n" >&2 - exit 5 - fi - rootdisk=$(ls /$instancefs/rootdisk/vmi-root*) - sbdadm create-lu $rootdisk - if [ $? -ne 0 ] - then - printf "Failed to create the lun\n" >&2 - exit 10; - fi - - logzfs "end: zfs clone -p $tsnap $instancefs" - - rc=0 - if [ -n "$disksize" ] - then - logzfs "start: zfs create $instancefs/datadisk1" - zfs create $instancefs/datadisk1 - rc=$? - touch /$instancefs/datadisk1/datadisk1 - if [ $rc -eq 0 ] - then - sbdadm create-lu -s $disksize /$instancefs/datadisk1/datadisk1 - if [ $? -ne 0 ] - then - printf "Failed to create the lun\n" >&2 - exit 10; - fi - fi - logzfs "end: zfs create $instancefs/datadisk1" - fi - if [ $rc -gt 0 ] - then - printf "Failed to create data disk $instancefs/datadisk1/datadisk1\n" >&2 - exit 6 - fi -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/filebacked/functions.sh b/scripts/storage/zfs/iscsi/comstar/filebacked/functions.sh deleted file mode 100755 index e4f6dfeaea7..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/filebacked/functions.sh +++ /dev/null @@ -1,35 +0,0 @@ -# -# $Id: functions.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/filebacked/functions.sh $ -# functions.sh - OpenSolaris utility functions -# - -list_views() { - for lu in $(sbdadm list-lu | awk '{print $1}') - do - if stmfadm list-view -l $lu >/dev/null 2>/dev/null - then - echo $lu - stmfadm list-view -l $lu - else - echo $lu "no_view" - fi - done -} - -list_zvol() { # - for lu in $(sbdadm list-lu | grep zvol | awk '{print $1}') - do - if stmfadm list-lu -v $lu | grep $1 >/dev/null - then - echo "lu = $lu" - stmfadm list-view -l $lu - fi - done -} - -# takes about 3 seconds per volume -destroy_zvol () { # - local luname=$(sbdadm list-lu | grep $1 | awk '{print $1}'); - sbdadm delete-lu $luname; - zfs destroy $1 -} diff --git a/scripts/storage/zfs/iscsi/comstar/filebacked/listvmdisk.sh b/scripts/storage/zfs/iscsi/comstar/filebacked/listvmdisk.sh deleted file mode 100755 index 54c004f4902..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/filebacked/listvmdisk.sh +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env bash -# $Id: listvmdisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/filebacked/listvmdisk.sh $ -# listvmdisk.sh -- list disks of a VM (iscsi mode) -# OpenSolaris -# Bugs: does not handle hexadecimal numbers. Decimal only! - -usage() { - printf "Usage: %s: -i [-r | -w | -d ] \n" $(basename $0) >&2 -} - -hosted() { - uname -a | grep "101b" > /dev/null - return $? -} - -path_and_iqn() { - local ifs=$1 - local pattern=$2 - - local diskfs=$(zfs list -r -H -o name $ifs | grep $pattern) - if [ "$diskfs" != "" ] - then - local luname=$(sbdadm list-lu | grep $diskfs | awk '{print $1}') - local tgtname=$(itadm list-target | tail -1 | awk '{print $1}') - if [ "$tgtname" != "" -a "$luname" != "" ] - then - tgtname=$tgtname:lu:$luname - else - tgtname="" - fi - fi - if [ $? -gt 0 ] - then - return 6 - fi - if [ "$diskfs" != "" -a "$tgtname" != "" ] - then - printf "$diskfs,$tgtname\n" - return 0 - fi - return 0 -} - -#set -x - -iflag= -rflag= -dflag= -wflag= -disknum= -instancefs= - -while getopts 'i:d:rw' OPTION -do - case $OPTION in - i) iflag=1 - instancefs="$OPTARG" - ;; - d) dflag=1 - disknum="$OPTARG" - ;; - r) rflag=1 - ;; - w) wflag=1 - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$iflag" != "1" -a "$rflag$dflag$wflag" != "1" ] -then - usage - exit 2 -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - - -if [[ $(zfs get -H -o value -p type $instancefs) != filesystem ]] -then - printf "Supplied instance fs doesn't exist\n" >&2 - exit 1 -fi - - -if [ "$rflag" == 1 ] -then - path_and_iqn $instancefs "root" - exit $? -fi - -if [ "$wflag" == 1 ] -then - path_and_iqn $instancefs "swap" - exit $? -fi - -if [ "$dflag" == 1 ] -then - if [[ $disknum -eq 0 ]] - then - path_and_iqn $instancefs "root" - else - path_and_iqn $instancefs "datadisk"$disknum - fi - - exit $? -fi -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/filebacked/listvmdisksize.sh b/scripts/storage/zfs/iscsi/comstar/filebacked/listvmdisksize.sh deleted file mode 100755 index 064a5c1a0f5..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/filebacked/listvmdisksize.sh +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env bash -# $Id: listvmdisksize.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/filebacked/listvmdisksize.sh $ -# listvmdisksize.sh -- list disk sizes of a VM (iscsi mode) -# - -usage() { - printf "Usage: %s: -d [-t | -a ] \n" $(basename $0) >&2 -} - - -##################################################################### -# Evaluate a floating point number expression. -function float_eval() -{ - local stat=0 - local result=0.0 - if [[ $# -gt 0 ]]; then - result=$(echo "scale=0; $*" | bc 2>/dev/null) - stat=$? - if [[ $stat -eq 0 && -z "$result" ]]; then stat=1; fi - fi - echo $result - return $stat -} - -kmg_to_number() -{ - local s=$1; - local size=${s:0:$((${#s}-1))} - local result=$1; - local suffix=${s:(-1)} - case $suffix in - G) result=$(float_eval "$size*1024*1024*1024") - ;; - M) result=$(float_eval "$size*1024*1024") - ;; - K) result=$(float_eval "$size*1024") - ;; - esac - - result=$(echo $result | cut -d"." -f1) #strip out decimal precision - echo $result -} - -#set -x - -aflag= -tflag= -aflag= -diskfs= - -while getopts 'd:ta' OPTION -do - case $OPTION in - d) dflag=1 - diskfs="$OPTARG" - ;; - t) tflag=1 - ;; - a) aflag=1 - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$dflag" != "1" -a "$tflag$aflag" != "1" ] -then - usage - exit 2 -fi - -if [ ${diskfs:0:1} == / ] -then - diskfs=${diskfs:1} -fi - - -if [[ $(zfs get -H -o value -p type $diskfs) != filesystem ]] -then - printf "Supplied disk doesn't exist\n" >&2 - exit 1 -fi - - -if [ "$aflag" == 1 ] -then - used=$(zfs list -H -o used $diskfs) - if [ $? -gt 0 ] - then - exit 5 - fi - result=$(kmg_to_number $used) - printf "$result\n" - exit 0 -fi - -if [ "$tflag" == 1 ] -then - #total=$(zfs list -H -o refer $diskfs) - total=$(sbdadm list-lu | grep $diskfs | awk '{print $2}') - if [ $? -gt 0 ] - then - exit 5 - fi - printf "$total\n" - exit 0 -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/filebacked/migratetmplts.sh b/scripts/storage/zfs/iscsi/comstar/filebacked/migratetmplts.sh deleted file mode 100755 index 76deb781a6c..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/filebacked/migratetmplts.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -# $Id: migratetmplts.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/filebacked/migratetmplts.sh $ -# set -x -for dir in $(find /tank/vmops -name template) -do - dir=${dir:1} #strip out leading slash - for tmplt in $(zfs list -H -t volume -o name -r $dir ); - do - dd if=/dev/zvol/dsk/$tmplt of=/$tmplt bs=8096k; - today=$(date '+%m_%d_%Y') - zfs snapshot -r $(dirname $tmplt)@${today} - #zfs destroy -Rf $tmplt - echo "Done: $tmplt" - done -done diff --git a/scripts/storage/zfs/iscsi/comstar/filebacked/upgradevmdisk.sh b/scripts/storage/zfs/iscsi/comstar/filebacked/upgradevmdisk.sh deleted file mode 100755 index fe700d836de..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/filebacked/upgradevmdisk.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env bash -# $Id: upgradevmdisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/filebacked/upgradevmdisk.sh $ -# upgradevmdisk.sh -- upgrade size of disks of a VM (iscsi mode) - -usage() { - printf "Usage: %s: -v -d \n" $(basename $0) >&2 -} - -upgrade_disk() { - local ifs=$1 - local disk_size=$2 - - - local diskfs=$(zfs list -r -H -o name $ifs | grep datadisk1) - local datadisk=/${diskfs}/$(ls /$diskfs/) - sbdadm modify-lu -s ${disk_size}M ${datadisk} - - if [ $? -gt 0 ] - then - return 7 - fi - - return 0 -} - -#set -x - -vflag= -dflag= -disksize= -instancefs= - -while getopts 'v:d:' OPTION -do - case $OPTION in - v) vflag=1 - instancefs="$OPTARG" - ;; - d) dflag=1 - disksize="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$vflag" != "1" -a "$dflag" != "1" ] -then - usage - exit 2 -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - - -if [[ $(zfs get -H -o value -p type $instancefs) != filesystem ]] -then - printf "Supplied instance fs doesn't exist\n" >&2 - exit 1 -fi - -if [ "$dflag" == 1 ] -then - if [[ $disksize -gt 0 ]] - then - upgrade_disk $instancefs $disksize - fi - - exit $? -fi -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/functions.sh b/scripts/storage/zfs/iscsi/comstar/functions.sh deleted file mode 100755 index cf5cb1cba33..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/functions.sh +++ /dev/null @@ -1,35 +0,0 @@ -# -# $Id: functions.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/functions.sh $ -# functions.sh - OpenSolaris utility functions -# - -list_views() { - for lu in $(sbdadm list-lu | grep zvol | awk '{print $1}') - do - if stmfadm list-view -l $lu >/dev/null 2>/dev/null - then - echo $lu - stmfadm list-view -l $lu - else - echo $lu "no_view" - fi - done -} - -list_zvol() { # - for lu in $(sbdadm list-lu | grep zvol | awk '{print $1}') - do - if stmfadm list-lu -v $lu | grep $1 >/dev/null - then - echo "lu = $lu" - stmfadm list-view -l $lu - fi - done -} - -# takes about 3 seconds per volume -destroy_zvol () { # - local luname=$(sbdadm list-lu | grep $1 | awk '{print $1}'); - sbdadm delete-lu $luname; - zfs destroy $1 -} diff --git a/scripts/storage/zfs/iscsi/comstar/host_group_destroy.sh b/scripts/storage/zfs/iscsi/comstar/host_group_destroy.sh deleted file mode 100755 index 90c67c8502e..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/host_group_destroy.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -# $Id: host_group_destroy.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/host_group_destroy.sh $ -# host_group_destroy.sh -- delete all iSCSI host groups -# -# Usage: host_group_destroy.sh -# -# Removes all iSCSI host groups that are not in use. -# -# OpenSolaris - -# Delete iSCSI host groups -host_groups=$(stmfadm list-hg | cut -d' ' -f 3) - -for host_group in $host_groups -do - stmfadm delete-hg $host_group -done - diff --git a/scripts/storage/zfs/iscsi/comstar/listvmdisk.sh b/scripts/storage/zfs/iscsi/comstar/listvmdisk.sh deleted file mode 100755 index d88097147b3..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/listvmdisk.sh +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env bash -# $Id: listvmdisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/listvmdisk.sh $ -# listvmdisk.sh -- list disks of a VM (iscsi mode) -# OpenSolaris -# Bugs: does not handle hexadecimal numbers. Decimal only! - -usage() { - printf "Usage: %s: -i [-r | -w | -d ] \n" $(basename $0) >&2 -} - -path_and_iqn() { - local ifs=$1 - local pattern=$2 - - local diskvol=$(zfs list -r -H -o name -t volume $ifs | grep $pattern) - if [ "$diskvol" != "" ] - then - local luname=$(sbdadm list-lu | grep $diskvol | awk '{print $1}') - local tgtname=$(itadm list-target | tail -1 | awk '{print $1}') - if [ "$tgtname" != "" -a "$luname" != "" ] - then - tgtname=$tgtname:lu:$luname - else - tgtname="" - fi - fi - if [ $? -gt 0 ] - then - return 6 - fi - if [ "$diskvol" != "" -a "$tgtname" != "" ] - then - printf "$diskvol,$tgtname\n" - return 0 - fi - return 0 -} - -#set -x - -iflag= -rflag= -dflag= -wflag= -disknum= -instancefs= - -while getopts 'i:d:rw' OPTION -do - case $OPTION in - i) iflag=1 - instancefs="$OPTARG" - ;; - d) dflag=1 - disknum="$OPTARG" - ;; - r) rflag=1 - ;; - w) wflag=1 - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$iflag" != "1" -a "$rflag$dflag$wflag" != "1" ] -then - usage - exit 2 -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - - -if [[ $(zfs get -H -o value -p type $instancefs) != filesystem ]] -then - printf "Supplied instance fs doesn't exist\n" >&2 - exit 1 -fi - - -if [ "$rflag" == 1 ] -then - path_and_iqn $instancefs "root" - exit $? -fi - -if [ "$wflag" == 1 ] -then - path_and_iqn $instancefs "swap" - exit $? -fi - -if [ "$dflag" == 1 ] -then - if [[ $disknum -eq 0 ]] - then - path_and_iqn $instancefs "root" - else - path_and_iqn $instancefs "datadisk"$disknum - fi - - exit $? -fi -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/lu_info.sh b/scripts/storage/zfs/iscsi/comstar/lu_info.sh deleted file mode 100755 index 6cf49569cb2..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/lu_info.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash -# $Id: lu_info.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/lu_info.sh $ -# lu_info.sh -- provide info on an LU of the form: -# -# Target: tank/vmops/vm/u000002/r000002/vmi-swap-routing -# iSCSI Name: iqn.1986-03.com.sun:02:f8a76fae-6545-4756-9573-dc8154b8c0fa -# Connections: 0 -# -# OpenSolaris - -usage() { - printf "Usage: %s path \n" $(basename $0) >&2 -} - -hosted() { - uname -a | grep "101b" > /dev/null - return $? -} - -if [ $# -ne 1 ] -then - usage - exit 1 -fi - -if hosted -then - iscsitadm list target $1 -else - path=$1 - luname=$(sbdadm list-lu | grep $1 | awk '{print $1}') - tgtname=$(itadm list-target | tail -1 | awk '{print $1}') - tgtname=$tgtname:lu:$luname - conn_count=$(stmfadm list-lu -v $luname | grep View | awk '{print $5}') - printf "Target: %s\n" $path - printf " iSCSI Name: %s\n" $tgtname - printf " Connections: %s\n" $conn_count -fi diff --git a/scripts/storage/zfs/iscsi/comstar/lu_share.sh b/scripts/storage/zfs/iscsi/comstar/lu_share.sh deleted file mode 100755 index dfa5fb5d735..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/lu_share.sh +++ /dev/null @@ -1,295 +0,0 @@ -#!/usr/bin/env bash -# $Id: lu_share.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/lu_share.sh $ -# lu_share.sh -- make a logical unit (LU) available over iSCSI -# OpenSolaris - -usage() { - printf "Usage: %s -i -t [ -u | -m ]\n" $(basename $0) >&2 -} - -valid_target_name() { # - echo $1 | grep ':lu:' >/dev/null - return $? -} - -target_iqn_from_target_name() { # - echo $1 | cut -d':' -f1,2,3 -} - -hg_from_initiator_iqn() { # - echo $1 - return 0 -} - -lu_name_from_target_name() { # - echo $1 | cut -d':' -f5 -} - -view_entry_from_hg_and_lu_name() { # - local hg=$1 - local lu_name=$2 - local view= - local last_view= - local last_hg= - for w in $(stmfadm list-view -l $lu_name) - do - case $w in - [0-9]*) last_view=$w - ;; - esac - - if [ "$w" == "$hg" ] - then - echo $last_view - return 0 - fi - done - return 1 -} - -create_host_group() { # - local i_iqn=$1 - local host_group= - local hg= - - local lines=$(stmfadm list-hg -v $i_iqn | grep $i_iqn | wc -l) - if [ $lines -eq 2 ] - then - return 0 - fi - - local result= - result=$(stmfadm create-hg $i_iqn 2>&1) - if [ $? -ne 0 ] - then - echo $result | grep "already exists" > /dev/null - if [ $? -ne 0 ] - then - printf "%s: create-hg %s failed due to %s\n" $(basename $0) $i_iqn $result >&2 - return 11 - fi - fi - - result=$(stmfadm add-hg-member -g $i_iqn $i_iqn 2>&1) - if [ $? -ne 0 ] - then - echo $result | grep "already exists" > /dev/null - if [ $? -ne 0 ] - then - printf "%s: unable to add %s due to %s\n" $(basename $0) $i_iqn $result >&2 - return 12 - fi - fi - return 0 -} - -add_view() { # - local i=1 - local hg=$1 - local lu=$2 - - while [ $i -lt 500 ] - do - local lun=$[ ( $RANDOM % 512 ) ] - local result= - result=$(stmfadm add-view -h $hg -n $lun $lu 2>&1) - if [ $? -eq 0 ] - then - printf "lun %s for luname %s\n" $lun $lu - #stmfadm list-view -l $lu - #sbdadm list-lu - return 0 - fi - echo $result | grep "view entry exists" > /dev/null - if [ $? -eq 0 ] - then - return 0 - fi - echo $result | grep "LUN already in use" > /dev/null - if [ $? -ne 0 ] - then - echo $result - return 1 - fi - let i=i+1 - done - printf "Unable to add view after lots of tries\n" >&2 - return 1 -} - -add_view_and_hg() { # - local i_iqn=$1 - local lu_name=$2 - local hg=$(hg_from_initiator_iqn $i_iqn) - local result= - result=$(add_view $hg $lu_name) - if [ $? -eq 0 ] - then - echo $result - return 0 - fi - - # create host group if necessary and try again - echo $result | grep "invalid host group" > /dev/null - if [ $? -ne 0 ] - then - printf "Unable to add view due to: $result\n" >&2 - return 22 - fi - if ! create_host_group $i_iqn - then - printf "%s: create_host_group failed: %s %s\n" $(basename $0) $i_iqn $lu_name >&2 - return 22 - fi - result=$(add_view $hg $lu_name) - if [ $? -eq 0 ] - then - echo $result - return 0 - fi - printf "Unable to create view due to: $result\n" >&2 - return 24 -} - -remove_view() { # - local i_iqn=$1 - local lu_name=$2 - local hg=$(hg_from_initiator_iqn $i_iqn) - local view=$(view_entry_from_hg_and_lu_name $hg $lu_name) - if [ -n "$hg" -a -n "$view" ] - then - local result= - result=$(stmfadm remove-view -l $lu_name $view 2>&1) - if [ $? -ne 0 ] - then - echo $result | grep "not found" - if [ $? -eq 0 ] - then - return 0 - fi - echo $result | grep "no views found" - if [ $? -eq 0 ] - then - return 0 - fi - printf "Unable to remove view due to: $result\n" >&2 - return 5 - fi - fi - return 0 -} - -remove_view_unknown_init_iqn() { # - local view_count=$(stmfadm list-view -l $1 2>/dev/null | grep View | wc -l) - local view_number - # if no view for LU, then report success - if [ $view_count -eq 0 ] - then - return 0 - fi - # if no init iqn specified, LU should only have one view - # if more than one view, squawk and do nothing - if [ "$view_count" == "1" ] - then - view_number=$(stmfadm list-view -l $1 2>/dev/null | grep View | awk '{print $NF}') - stmfadm remove-view -l $1 $view_number - else - printf "remove_view_unknown_init_iqn: %s views! \n" $view_count >&2 - fi -} - -remove_all_views() { # - local lu_name=$1 - stmfadm remove-view -a -l $lu_name - if [ $? -eq 1 ] - then - return 0 - fi -} - -#set -x - -if [ $# -lt 4 ] -then - usage - exit 1 -fi - -iflag= -tflag= -uflag= -mflag= - -while getopts 'mui:t:' OPTION -do - case $OPTION in - i) iflag=1 - init_iqn="$OPTARG" - ;; - m) mflag=1 - ;; - t) tflag=1 - tgtname="$OPTARG" - ;; - u) uflag=1 - ;; - *) usage - exit 2 - ;; - esac -done - -if [ "$iflag$tflag" != "11" -o "$mflag$uflag" == "11" ] -then - usage - exit 3 -fi - -if ! valid_target_name $tgtname -then - printf "%s: invalid target name format: %s\n" $(basename $0) $tgtname >&2 - exit 4 -fi - -lu_name=$(lu_name_from_target_name $tgtname) - -if [ "$uflag" == "1" ] -then - if [ "$init_iqn" == "unshare_all" ] - then - if ! remove_all_views $lu_name - then - printf "%s: remove_all_views failed: %s\n" $(basename $0) $lu_name >&2 - exit 20 - fi - else - if [ "$init_iqn" == "n/a" ] - then - if ! remove_view_unknown_init_iqn $lu_name - then - printf "%s: remove_view_unknown_init_iqn failed: %s\n" $(basename $0) $lu_name >&2 - exit 25 - fi - else - if ! remove_view $init_iqn $lu_name - then - printf "%s: remove_view failed: %s\n" $(basename $0) $lu_name >&2 - exit 21 - fi - fi - fi -else - if [ "$mflag" == "1" ] - then - remove_all_views $lu_name - fi - # finally add a view of the lu - RANDOM=$(perl -e 'print time;') - if ! add_view_and_hg $init_iqn $lu_name - then - printf "%s: add_view failed: %s %s\n" $(basename $0) $host_group $lu_name >&2 - exit 23 - fi -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/upgradevmdisk.sh b/scripts/storage/zfs/iscsi/comstar/upgradevmdisk.sh deleted file mode 100755 index c5176af7be5..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/upgradevmdisk.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env bash -# $Id: upgradevmdisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/upgradevmdisk.sh $ -# upgradevmdisk.sh -- upgrade size of disks of a VM (iscsi mode) - -usage() { - printf "Usage: %s: -v -d \n" $(basename $0) >&2 -} - -upgrade_disk() { - local ifs=$1 - local disk_size=$2 - - zfs set volsize=${disk_size}M $ifs - - if [ $? -gt 0 ] - then - return 6 - fi - - sbdadm modify-lu -s ${disk_size}M /dev/zvol/dsk/${ifs} - - if [ $? -gt 0 ] - then - return 7 - fi - - return 0 -} - -#set -x - -vflag= -dflag= -disksize= -instancefs= - -while getopts 'v:d:' OPTION -do - case $OPTION in - v) vflag=1 - instancefs="$OPTARG" - ;; - d) dflag=1 - disksize="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$vflag" != "1" -a "$dflag" != "1" ] -then - usage - exit 2 -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - - -if [[ $(zfs get -H -o value -p type $instancefs) != volume ]] -then - printf "Supplied instance fs doesn't exist\n" >&2 - exit 1 -fi - -if [ "$dflag" == 1 ] -then - if [[ $disksize -gt 0 ]] - then - upgrade_disk $instancefs $disksize - fi - - exit $? -fi -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/view_and_lu_remove.sh b/scripts/storage/zfs/iscsi/comstar/view_and_lu_remove.sh deleted file mode 100755 index ed9cdab260c..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/view_and_lu_remove.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -# $Id: view_and_lu_remove.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/view_and_lu_remove.sh $ -# view_and_lu_remove.sh -- remove views and LU's under a ZFS file system tree -# -# Usage: view_and_lu_remove.sh -# -# Removes outstanding views and deletes LU's recursively under a ZFS file -# system path. -# -# OpenSolaris - -usage() { - printf "Usage: %s: \n" $(basename $0) >&2 -} - -#set -x - -zfspath=$1 - -if [ -z "$1" ] -then - usage - exit 1 -fi - -paths=$(zfs list -Hro name $zfspath) - -if [ -z "$paths" ] -then - printf "%s: zfs path %s does not exist.\n" $(basename $0) >&2 - exit 2 -fi - -lu_names=$(sbdadm list-lu | grep $zfspath | awk '{print $1}') - -for lu in $lu_names -do - stmfadm remove-view -a -l $lu 0 2>/dev/null - sbdadm delete-lu $lu -done - -sleep 2 - -exit 0 diff --git a/scripts/storage/zfs/iscsi/comstar/zfs_destroy.sh b/scripts/storage/zfs/iscsi/comstar/zfs_destroy.sh deleted file mode 100755 index d04f6e615f9..00000000000 --- a/scripts/storage/zfs/iscsi/comstar/zfs_destroy.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -# $Id: zfs_destroy.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/comstar/zfs_destroy.sh $ -# zfs_destroy.sh -- delete a cloned image used for a vm -# -# Usage: zfs_destroy -# -# Removes outstanding views, deletes LU's, and then performs a -# "zfs destroy -f -r ". -# -# OpenSolaris - -usage() { - printf "Usage: %s: \n" $(basename $0) >&2 -} - -#set -x - -get_instance() { - echo $(basename $1) -} - -zfspath=$1 - -if [ -z "$1" ] -then - usage - exit 1 -fi - -paths=$(zfs list -Hro name $zfspath) - -if [ -z "$paths" ] -then - printf "%s: zfs path %s does not exist.\n" $(basename $0) >&2 - exit 2 -fi - -lu_names=$(sbdadm list-lu 2>&1 | grep $zfspath | awk '{print $1}') - -for lu in $lu_names -do - stmfadm remove-view -a -l $lu 0 2>/dev/null - sbdadm delete-lu $lu -done - -zfs destroy -r -f $zfspath - -exit 0 diff --git a/scripts/storage/zfs/iscsi/create_private_template.sh b/scripts/storage/zfs/iscsi/create_private_template.sh deleted file mode 100755 index ac8b4a299b6..00000000000 --- a/scripts/storage/zfs/iscsi/create_private_template.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env bash -# $Id: create_private_template.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/create_private_template.sh $ -# create_private_template.sh -- create a private template from a snapshot -# - -usage() { - printf "Usage: %s: -p -n \n" $(basename $0) >&2 - exit 2 -} - -create_template() { - local fspath=$1 - local snapshotname=$2 - local template_path=$3 - local user_dir=$4 - local instance_dir=$5 - local tname=$6 - - if [ -d "/$template_path/$user_dir/$instance_dir/$tname" ]; then - printf "template exists at path: $template_path/$user_dir/$instance_dir/$tname\n" >&2 - return 4 - fi - - if [ ! -d "/$template_path/$user_dir" ]; then - zfs create $template_path/$user_dir - if [ $? -gt 0 ] - then - printf "***Failed to create private template path $template_path/$user_dir\n" >&2 - return 6 - fi - fi - - if [ ! -d "/$template_path/$user_dir/$instance_dir" ]; then - zfs create $template_path/$user_dir/$instance_dir - if [ $? -gt 0 ] - then - printf "***Failed to create private template path $template_path/$user_dir/$instance_dir\n" >&2 - return 6 - fi - fi - - zfs send $fspath@$snapshotname | zfs recv $template_path/$user_dir/$instance_dir/$tname - zfs send $fspath/rootdisk@$snapshotname | zfs recv $template_path/$user_dir/$instance_dir/$tname/rootdisk - zfs send $fspath/datadisk1@$snapshotname | zfs recv $template_path/$user_dir/$instance_dir/$tname/datadisk1 - - ##### other things we could try are clone then promote - # zfs clone $fspath@$snapshotname $template_path - # zfs clone $fspath/rootdisk@$snapshotname $template_path/rootdisk - # zfs clone $fspath/datadisk1@$snapshotname $template_path/datadisk1 - # zfs promote $template_path - - if [ $? -gt 0 ] - then - printf "***Failed to receive snapshot $snapshotname for path $fspath\n" >&2 - return 5 - fi - -} - -#set -x - -pflag= -nflag= -dflag= -uflag= -iflag= -sflag= -pathval= -templatename= -snapshot= -install_dir= -user_folder= -instance_folder= - -while getopts 'p:n:d:u:i:s:' OPTION -do - case $OPTION in - p) pflag=1 - pathval="$OPTARG" - ;; - n) nflag=1 - templatename="$OPTARG" - ;; - s) sflag=1 - snapshot="$OPTARG" - ;; - d) dflag=1 - install_dir="$OPTARG" - ;; - u) uflag=1 - user_folder="$OPTARG" - ;; - i) iflag=1 - instance_folder="$OPTARG" - ;; - ?) usage - ;; - esac -done - -if [ "$pflag$nflag$dflag$uflag$iflag$sflag" != "111111" ] -then - usage -fi - -create_template $pathval $snapshot $install_dir $user_folder $instance_folder $templatename -exit $? diff --git a/scripts/storage/zfs/iscsi/createdatadisk.sh b/scripts/storage/zfs/iscsi/createdatadisk.sh deleted file mode 100755 index 67f0214c855..00000000000 --- a/scripts/storage/zfs/iscsi/createdatadisk.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env bash -# $Id: createdatadisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/createdatadisk.sh $ -# createdatadisk.sh -- create a thin-provisioned data disk -# - -usage() { - printf "Usage: %s: -i -s \n" $(basename $0) >&2 -} - - -#set -x - -iflag= -sflag= -cflag= -disknum= -datadisk= - -while getopts 'i:s:c:' OPTION -do - case $OPTION in - i) iflag=1 - instancefs="$OPTARG" - ;; - c) cflag=1 - disknum="$OPTARG" - datadisk="datadisk-$disknum" - ;; - s) sflag=1 - diskfs="" - disksize="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$iflag$sflag$cflag" != "111" ] -then - usage - exit 2 -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - - -if [ -n "$disksize" ] -then - suffix=${disksize:(-1)} - echo $suffix - case $suffix in - G) - ;; - [0-9]) disksize=${disksize}G - ;; - *) printf "Error in disk size: expect G as a suffix or no suffix\n" - exit 2 - ;; - esac - -fi - -if [ -n "$disksize" ] -then - zfs create -V $disksize -s $instancefs/$datadisk #-s for sparse - rc=$? -fi - -if [ $rc -gt 0 ] -then - printf "Failed to create data disk $instancefs/$datadisk\n" >&2 - exit 6 -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/createtmplt.sh b/scripts/storage/zfs/iscsi/createtmplt.sh deleted file mode 100755 index 37cc27e7bc7..00000000000 --- a/scripts/storage/zfs/iscsi/createtmplt.sh +++ /dev/null @@ -1,270 +0,0 @@ -#!/usr/bin/env bash -# $Id: createtmplt.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/createtmplt.sh $ -# createtmplt.sh -- install a template - -usage() { - printf "Usage: %s: -t -n -f -s -c -d -h [-u]\n" $(basename $0) >&2 -} - - -#set -x - -rollback_if_needed() { - if [ $2 -gt 0 ] - then - printf "$3\n" - #back out all changes - zfs destroy -r $1 - exit 2 -fi -} - -verify_cksum() { - echo "$1 $2" | md5sum -c --status - #printf "$1\t$2" | md5sum -c --status - if [ $? -gt 0 ] - then - printf "Checksum failed, not proceeding with install\n" - exit 3 - fi -} - -untar() { - local ft=$(file $1| awk -F" " '{print $2}') - local basedir=$(dirname $1) - case $ft in - USTAR) local rootimg=$(tar tf $1 | grep $3) - (cd $2; tar xf $1) - rm -f $1 - printf "$2/$rootimg" - ;; - *) printf "$1" - return 0 - ;; - esac - -} - -uncompress() { - local ft=$(file $1| awk -F" " '{print $2}') - local imgfile=${1%.*} #strip out trailing file suffix - local tmpfile=${imgfile}.tmp - - case $ft in - gzip) gunzip -c $1 > $tmpfile - ;; - bzip2) bunzip2 -c $1 > $tmpfile - ;; - ZIP) unzip -p $1 | cat > $tmpfile - ;; - *) printf "$1" - return 0 - ;; - esac - - if [ $? -gt 0 ] - then - printf "Failed to uncompress file, exiting " - exit 1 - fi - - mv $tmpfile $imgfile - printf "$imgfile" - - return 0 -} - -create_vol_from_file() { - local tmpltfs=$1 - local tmpltimg=$2 - local tgtvol=$3 - local tgtdisk=$4 - local volsize=$5 - local cleanup=$6 - - zfs list -H -o name $tgtvol - - #create it if it doesn't exist - if [ $? -gt 0 ] - then - zfs create -V $volsize -s $tgtvol - if [ $? -gt 0 ] - then - printf "Failed to create the target root disk volume\n" - exit 5 - fi - fi - - local osversion=$(uname -v) - if [ "$osversion" == "snv_111b" ] - then - #copy 64k of zeros for LUN metatdata - dd if=/dev/zero of=$tgtdisk bs=64k count=1 - #copy the file to the disk - dd if=$tmpltimg of=$tgtdisk bs=64k seek=1 - else - #copy the file to the disk. Could just use 'cp' as well - dd if=$tmpltimg of=$tgtdisk bs=1024k - fi - - - rollback_if_needed $tmpltfs $? "Failed to copy root disk" - - if [ "$cleanup" == "true" ] - then - rm -f $tmpltimg - fi -} - -tflag= -nflag= -fflag= -sflag= -hflag= -hvm=false -cleanup=false -dflag= -cflag= - -while getopts 'uht:n:f:s:c:d:' OPTION -do - case $OPTION in - t) tflag=1 - tmpltfs="$OPTARG" - ;; - n) nflag=1 - tmpltname="$OPTARG" - ;; - f) fflag=1 - tmpltimg="$OPTARG" - ;; - s) sflag=1 - volsize="$OPTARG" - ;; - c) cflag=1 - cksum="$OPTARG" - ;; - d) dflag=1 - descr="$OPTARG" - ;; - h) hflag=1 - hvm="true" - ;; - u) cleanup="true" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$tflag$nflag$fflag$sflag" != "1111" ] -then - usage - exit 2 -fi - -if [ -n "$cksum" ] -then - verify_cksum $cksum $tmpltimg -fi - -if [ ${tmpltfs:0:1} == / ] -then - tmpltfs=${tmpltfs:1} -fi - -if [ ! -d /$tmpltfs ] -then - zfs create $tmpltfs - if [ $? -gt 0 ] - then - printf "Failed to create user fs $tmpltfs\n" >&2 - exit 1 - fi -fi - -if [[ $(zfs get -H -o value -p type $tmpltfs) != filesystem ]] -then - printf "template fs doesn't exist\n" >&2 - exit 2 -fi - -tmpltimg2=$(uncompress $tmpltimg) -tmpltimg2=$(untar $tmpltimg2 /$tmpltfs vmi-root) - -if [ ! -f $tmpltimg2 ] -then - rollback_if_needed $tmpltfs 2 "root disk file $tmpltimg doesn't exist\n" - exit 3 -fi - -# need the 'G' suffix on volume size -if [ ${volsize:(-1)} != G ] -then - volsize=${volsize}G -fi - -#determine source file size -- it needs to be less than or equal to volsize -imgsize=$(ls -lh $tmpltimg2| awk -F" " '{print $5}') -if [ ${imgsize:(-1)} == G ] -then - imgsize=${imgsize%G} #strip out the G - imgsize=${imgsize%.*} #...and any decimal part - let imgsize=imgsize+1 # add 1 to compensate for decimal part - volsizetmp=${volsize%G} - if [ $volsizetmp -lt $imgsize ] - then - volsize=${imgsize}G - fi -fi - -tgtvol=${tmpltfs}/vmi-root-${tmpltname} -tgtdisk=/dev/zvol/dsk/${tgtvol} - -create_vol_from_file $tmpltfs $tmpltimg2 $tgtvol $tgtdisk $volsize $cleanup - -tmpltswap=$(ls -lh /$tmpltfs | grep swap) -if [ $? -eq 0 ] -then - swapsize=$(echo $tmpltswap | awk '{print $5}') - tmpltswap=$(echo $tmpltswap | awk '{print $NF}') - tmpltswap=/${tmpltfs}/${tmpltswap} - tgtvol=${tmpltfs}/vmi-swap-${tmpltname} - tgtdisk=/dev/zvol/dsk/${tgtvol} - create_vol_from_file $tmpltfs $tmpltswap $tgtvol $tgtdisk $swapsize $cleanup -fi - - -if [ "$hvm" != "true" ] -then - vmlinuz=$(ls /$tmpltfs/vmlinuz*) - if [ "$vmlinuz" == "" ] - then - touch /$tmpltfs/pygrub - fi -fi - -rollback_if_needed $tmpltfs $? "Failed to create pygrub file" - -touch /$tmpltfs/template.properties -rollback_if_needed $tmpltfs $? "Failed to create template.properties file" -echo -n "" > /$tmpltfs/template.properties - -today=$(date '+%m_%d_%Y') -echo "snapshot.name=$today" > /$tmpltfs/template.properties -echo "description=$descr" >> /$tmpltfs/template.properties -echo "name=$tmpltname" >> /$tmpltfs/template.properties -echo "checksum=$cksum" >> /$tmpltfs/template.properties -echo "hvm=$hvm" >> /$tmpltfs/template.properties -echo "volume.size=$volsize" >> /$tmpltfs/template.properties - -zfs snapshot -r $tmpltfs@$today -rollback_if_needed $tmpltfs $? "Failed to snapshot filesystem" - -if [ "$cleanup" == "true" ] -then - rm -f $tmpltimg -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/createvm.sh b/scripts/storage/zfs/iscsi/createvm.sh deleted file mode 100755 index efd287e3308..00000000000 --- a/scripts/storage/zfs/iscsi/createvm.sh +++ /dev/null @@ -1,248 +0,0 @@ -#!/usr/bin/env bash -# $Id: createvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/createvm.sh $ -# createvm.sh -- create a vm image directory by cloning (iscsi mode) -# - -usage() { - printf "Usage: %s: -t -d -i -u \n" $(basename $0) >&2 -} - -logzfs() { - if [ -z "$debug" ] - then - return - fi - local elapsed=0 - printf "$(date +'%H:%M:%S') $*\n" >&3 - if [ "$(echo $1| awk '{print $1}')" == "start:" ] - then - start="$(/usr/gnu/bin/date +'%s')" - return - fi - if [ "$(echo $1| awk '{print $1}')" == "end:" ] - then - end="$(/usr/gnu/bin/date +'%s')" - let elapsed=end-start - printf "t=$elapsed $*\n" >&3 - fi -} - -#ensure that the instance fs is mounted within the user fs -check_valid_userfs() { - local ifs=$1 - local ufs=$2 - local child=${ifs#$ufs} - if [ ${#child} -eq $(( ${#ifs}-${#ufs} )) ] - then - return 0 - else - printf "instance fs $ifs is not contained within user fs $ufs. Bailing\n" >&2 - exit 3; - fi -} - -get_instance() { - echo $(basename $1) -} - -get_latest_snapshot() { - local fs=$1 - local tsnap=$(echo $fs | cut -f1 -d'@') - if [ "$tsnap" == "$fs" ] - then - snap=$(zfs list -r -H -o name -S name -S creation -t snapshot $tsnap| head -1) - if [ -z $snap ] - then - return 1 - fi - echo $snap - return 0 - else - echo $fs - return - fi -} - -trap 'echo "killed..." >&3; exec 3>&-; exit 9' TERM INT KILL -#set -x - -tflag= -iflag= -uflag= -dflag= -sflag= -start= -end= -debug=1 - -while getopts 't:i:u:d:s:' OPTION -do - case $OPTION in - t) tflag=1 - templatefs="$OPTARG" - ;; - i) iflag=1 - instancefs="$OPTARG" - ;; - u) uflag=1 - userfs="$OPTARG" - ;; - d) dflag=1 - diskfs="$OPTARG" - ;; - s) sflag=1 - diskfs="" - disksize="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$tflag$iflag$uflag" != "111" ] -then - usage - exit 2 -fi - -#either -d or -s but not both -if [ "$dflag$sflag" == "11" ] -then - usage - exit 2 -fi - -#if user has provided leading slash, strip it out -if [ ${userfs:0:1} == / ] -then - userfs=${userfs:1} -fi - -if [ ${templatefs:0:1} == / ] -then - templatefs=${templatefs:1} -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - -if [ -n "$diskfs" ] -then - if [ ${diskfs:0:1} == / ] - then - diskfs=${diskfs:1} - fi -fi - -if [ -n "$disksize" ] -then - suffix=${disksize:(-1)} - echo $suffix - case $suffix in - G) - ;; - [0-9]) disksize=${disksize}G - ;; - *) printf "Error in disk size: expect G as a suffix or no suffix\n" - exit 2 - ;; - esac - -fi - -instance=$(get_instance $instancefs) -if [ -n "$debug" ] -then - exec 3<>$(dirname $0)/../../logs/create$instance.log -fi - -check_valid_userfs $instancefs $userfs - - -#if user has provided the exact snapshot of the template fs, use it, -#else get the latest snapshot -tsnap=$(echo $templatefs | cut -f1 -d'@') -if [ "$tsnap" == "$templatefs" ] -then - logzfs "start: get_latest_snapshot" - tsnap=$(get_latest_snapshot $templatefs) - logzfs "end: get_latest_snapshot" - if [ -z "$tsnap" ] - then - printf "No snapshots exist of filesystem $templatefs..bailing\n" >&2 - exit 4 - fi -else - tsnap=$templatefs - templatefs=$(echo $templatefs | cut -f1 -d'@') #strip out snap version -fi - -snapt=$(echo $tsnap | cut -f2 -d'@') - -if [ -n "$diskfs" ] -then - logzfs "start: get_latest_snapshot" - disksnap=$(get_latest_snapshot $diskfs) - logzfs "end: get_latest_snapshot" - if [ -z "$disksnap" ] - then - printf "No snapshots exist of disk filesystem $diskfs..bailing\n" >&2 - exit 6 - fi - diskfs=$(echo $diskfs | cut -d'@' -f1) -fi - -#Clone root disk and associated files -printf "Cloning root disk $tsnap to $instancefs\n" >&2 -logzfs "start: zfs clone -p $tsnap $instancefs" -zfs clone -p $tsnap $instancefs -if [ $? -gt 0 ] -then - printf "Failed to clone root disk $snap\n" >&2 - exit 5 -fi -logzfs "end: zfs clone -p $tsnap $instancefs" - -#get root disk/swapdisk volume contained within templatefs -logzfs "start: zfs list -H -o name -t volume -r $templatefs" -for vol in $(zfs list -H -o name -t volume -r $templatefs ) -do - #clone the snapshot - logzfs "start: zfs clone $vol@$snapt $instancefs/$(basename $vol)" - zfs clone $vol@$snapt $instancefs/$(basename $vol) - rc=$? - logzfs "end: zfs clone $vol@$snapt $instancefs/$(basename $vol)" -done - -rc=0 -#Clone datadisk -if [ -n "$diskfs" ] -then - logzfs "start: zfs clone $disksnap $instancefs/datadisk1-$(basename $diskfs)" - zfs clone $disksnap $instancefs/datadisk1-$(basename $diskfs) - rc=$? - logzfs "end: zfs clone $disksnap $instancefs/datadisk1-$(basename $diskfs)" -fi -if [ $rc -gt 0 ] -then - printf "Failed to clone data disk $disksnap\n" >&2 - exit 5 -fi - -if [ -n "$disksize" ] -then - logzfs "start: zfs create $instancefs/datadisk1" - zfs create -V $disksize -s $instancefs/datadisk1 #-s for sparse - rc=$? - logzfs "end: zfs create $instancefs/datadisk1" -fi -if [ $rc -gt 0 ] -then - printf "Failed to create data disk $instancefs/datadisk1\n" >&2 - exit 6 -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/delvm.sh b/scripts/storage/zfs/iscsi/delvm.sh deleted file mode 100755 index 092414fcdfb..00000000000 --- a/scripts/storage/zfs/iscsi/delvm.sh +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env bash -# $Id: delvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/delvm.sh $ -# delvm.sh -- delete a cloned image used for a vm -# - -usage() { - printf "Usage: %s: -i -u \n" $(basename $0) >&2 -} - - -#set -x -logzfs() { - if [ -z "$debug" ] - then - return - fi - local elapsed=0 - printf "$(date +'%H:%M:%S') $*\n" >&3 - if [ "$(echo $1| awk '{print $1}')" == "start:" ] - then - start="$(/usr/gnu/bin/date +'%s')" - return - fi - if [ "$(echo $1| awk '{print $1}')" == "end:" ] - then - end="$(/usr/gnu/bin/date +'%s')" - let elapsed=end-start - printf "t=$elapsed $*\n" >&3 - fi -} -get_instance() { - echo $(basename $1) -} - -iflag= -uflag= -userfs= -instancefs= -start= -end= -debug=1 - -while getopts 'i:u:' OPTION -do - case $OPTION in - i) iflag=1 - instancefs="$OPTARG" - ;; - u) uflag=1 - userfs="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$iflag$uflag" != "1" -a "$iflag$uflag" != "11" ] -then - usage - exit 2 -fi - -if [[ -n $instancefs && ${instancefs:0:1} == / ]] -then - instancefs=${instancefs:1} -fi - -if [[ -n $userfs && ${userfs:0:1} == / ]] -then - userfs=${userfs:1} -fi - -if [[ "$iflag" == 1 && $(zfs get -H -o value -p type $instancefs) != filesystem ]] -then - printf "Supplied instance fs doesn't exist\n" >&2 - exit 1 -fi - -if [[ "$uflag" == 1 && $(zfs get -H -o value -p type $userfs) != filesystem ]] -then - printf "Supplied user fs doesn't exist\n" >&2 - exit 1 -fi -instance=$(get_instance $instancefs) -if [ -n "$debug" ] -then - exec 3<>$(dirname $0)/../../logs/del$instance.log -fi - -if [ "$iflag" == 1 ] -then - printf "Going to destroy $instancefs and its children\n" - logzfs "start: zfs destroy -r -f $instancefs " - zfs destroy -r -f $instancefs - rc=$? - logzfs "end: zfs destroy -r -f $instancefs " - if [ $rc -gt 0 ] - then - numc=$(zfs list -Hr $instancefs 2> /dev/null| wc -l) - if [ "$numc" -eq 1 ] - then - printf "Trying again to destroy instance fs $instancefs \n" >&2 - zfs destroy -r -f $instancefs - else - printf "Failed to destroy instance fs $instancefs, numchildren=$numc\n" >&2 - exit 5 - fi - fi -fi - -if [ "$uflag" == 1 ] -then - printf "Going to destroy $userfs and its children\n" - logzfs "start: zfs destroy -r -f $userfs" - zfs destroy -r -f $userfs - rc=$? - logzfs "end: zfs destroy -r -f $userfs" - if [ $rc -gt 0 ] - then - numc=$(zfs list -Hr $userfs 2> /dev/null| wc -l) - if [ "$numc" -eq 1 ] - then - printf "Trying again to destroy user fs $userfs \n" >&2 - zfs destroy -r -f $userfs - else - printf "Failed to destroy user fs $userfs, numchildren=$numc\n" >&2 - exit 5 - fi - fi -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/get_iqn.sh b/scripts/storage/zfs/iscsi/get_iqn.sh deleted file mode 100755 index e0403d021a6..00000000000 --- a/scripts/storage/zfs/iscsi/get_iqn.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash -# $Id: get_iqn.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/get_iqn.sh $ -# get_iqn.sh -- return iSCSI iqn of initiator (Linux) or target (OpenSolaris) - -usage() { - printf "Usage: %s \n" $(basename $0) >&2 -} - -linux() { - uname -a | grep "Linux" > /dev/null - return $? -} - -opensolaris() { - uname -a | grep "SunOS" > /dev/null - return $? -} - -hosted() { - uname -a | grep "101b" > /dev/null - return $? -} - -if [ $# -ne 0 ] -then - usage - exit 1 -fi - -if linux -then - initiator_iqn=$(cat /etc/iscsi/initiatorname.iscsi | cut -d'=' -f2) - printf "%s\n" $initiator_iqn - exit 0 -fi - -if opensolaris && hosted -then - printf "unique_iqn_per_zvol\n" - exit 0 -fi - -if opensolaris -then - tgt_iqn=$(itadm list-target | tail -1 | awk '{print $1}') - printf "%s\n" $tgt_iqn - exit 0 -fi - -printf "Unexpected operating system!\n" >&2 -exit 2 \ No newline at end of file diff --git a/scripts/storage/zfs/iscsi/listvmdisk.sh b/scripts/storage/zfs/iscsi/listvmdisk.sh deleted file mode 100755 index bca7518086c..00000000000 --- a/scripts/storage/zfs/iscsi/listvmdisk.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env bash -# $Id: listvmdisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/listvmdisk.sh $ -# listvmdisk.sh -- list disks of a VM (iscsi mode) -# Bugs: does not handle hexadecimal numbers. Decimal only! - -usage() { - printf "Usage: %s: -i [-r | -w | -d ] \n" $(basename $0) >&2 -} - -path_and_iqn() { - local ifs=$1 - local pattern=$2 - - local diskvol=$(zfs list -r -H -o name -t volume $ifs | grep $pattern) - if [ "$diskvol" != "" ] - then - local tgtname=$(iscsitadm list target $diskvol | grep Name | awk '{print $3}') - fi - if [ $? -gt 0 ] - then - return 6 - fi - if [ "$diskvol" != "" -a "$tgtname" != "" ] - then - printf "$diskvol,$tgtname\n" - return 0 - fi - return 0 -} - -#set -x - -iflag= -rflag= -dflag= -wflag= -disknum= -instancefs= - -while getopts 'i:d:rw' OPTION -do - case $OPTION in - i) iflag=1 - instancefs="$OPTARG" - ;; - d) dflag=1 - disknum="$OPTARG" - ;; - r) rflag=1 - ;; - w) wflag=1 - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$iflag" != "1" -a "$rflag$dflag$wflag" != "1" ] -then - usage - exit 2 -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - - -if [[ $(zfs get -H -o value -p type $instancefs) != filesystem ]] -then - printf "Supplied instance fs doesn't exist\n" >&2 - exit 1 -fi - - -if [ "$rflag" == 1 ] -then - path_and_iqn $instancefs "root" - exit $? -fi - -if [ "$wflag" == 1 ] -then - path_and_iqn $instancefs "swap" - exit $? -fi - -if [ "$dflag" == 1 ] -then - if [[ $disknum -eq 0 ]] - then - path_and_iqn $instancefs "root" - else - path_and_iqn $instancefs "datadisk"$disknum - fi - - exit $? -fi -exit 0 diff --git a/scripts/storage/zfs/iscsi/listvmdisksize.sh b/scripts/storage/zfs/iscsi/listvmdisksize.sh deleted file mode 100755 index ce9834cac81..00000000000 --- a/scripts/storage/zfs/iscsi/listvmdisksize.sh +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env bash -# $Id: listvmdisksize.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/listvmdisksize.sh $ -# listvmdisksize.sh -- list disk sizes of a VM (iscsi mode) -# - -usage() { - printf "Usage: %s: -d [-t | -a ] \n" $(basename $0) >&2 -} - - -##################################################################### -# Evaluate a floating point number expression. -function float_eval() -{ - local stat=0 - local result=0.0 - if [[ $# -gt 0 ]]; then - result=$(echo "scale=0; $*" | bc 2>/dev/null) - stat=$? - if [[ $stat -eq 0 && -z "$result" ]]; then stat=1; fi - fi - echo $result - return $stat -} - -kmg_to_number() -{ - local s=$1; - local size=${s:0:$((${#s}-1))} - local result=$1; - local suffix=${s:(-1)} - case $suffix in - G) result=$(float_eval "$size*1024*1024*1024") - ;; - M) result=$(float_eval "$size*1024*1024") - ;; - K) result=$(float_eval "$size*1024") - ;; - esac - - result=$(echo $result | cut -d"." -f1) #strip out decimal precision - echo $result -} - -#set -x - -aflag= -tflag= -aflag= -diskfs= - -while getopts 'd:ta' OPTION -do - case $OPTION in - d) dflag=1 - diskfs="$OPTARG" - ;; - t) tflag=1 - ;; - a) aflag=1 - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$dflag" != "1" -a "$tflag$aflag" != "1" ] -then - usage - exit 2 -fi - -if [ ${diskfs:0:1} == / ] -then - diskfs=${diskfs:1} -fi - - -if [[ $(zfs get -H -o value -p type $diskfs) != volume ]] -then - printf "Supplied disk volume doesn't exist\n" >&2 - exit 1 -fi - - -if [ "$aflag" == 1 ] -then - used=$(zfs list -H -o used -t volume $diskfs) - if [ $? -gt 0 ] - then - exit 5 - fi - result=$(kmg_to_number $used) - printf "$result\n" - exit 0 -fi - -if [ "$tflag" == 1 ] -then - total=$(zfs list -H -o volsize $diskfs) - if [ $? -gt 0 ] - then - exit 5 - fi - result=$(kmg_to_number $total) - printf "$result\n" - exit 0 -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/listvmtmplt.sh b/scripts/storage/zfs/iscsi/listvmtmplt.sh deleted file mode 100755 index a6c9433d13a..00000000000 --- a/scripts/storage/zfs/iscsi/listvmtmplt.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash -# $Id: listvmtmplt.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/listvmtmplt.sh $ -# listtmplt.sh -- list templates under a directory - -usage() { - printf "Usage: %s: -r \n" $(basename $0) >&2 -} - - -#set -x - -rflag= -rootdir= - -while getopts 'r:' OPTION -do - case $OPTION in - r) rflag=1 - rootdir="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$rflag" != "1" ] -then - usage - exit 2 -fi - -if [ ${rootdir:0:1} == / ] -then - rootdir=${rootdir:1} -fi - - -if [[ $(zfs get -H -o value -p type $rootdir) != filesystem ]] -then - printf "Supplied root directory fs doesn't exist\n" >&2 - exit 1 -fi - -for i in $(find /$rootdir -name template.properties -size +0 ); -do - d=$(dirname $i) - echo ${d#/} #remove leading slash -done - -exit 0 diff --git a/scripts/storage/zfs/iscsi/lu_info.sh b/scripts/storage/zfs/iscsi/lu_info.sh deleted file mode 100755 index 7245963d374..00000000000 --- a/scripts/storage/zfs/iscsi/lu_info.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -# $Id: lu_info.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/lu_info.sh $ - -iscsitadm list target $1 diff --git a/scripts/storage/zfs/iscsi/lu_share.sh b/scripts/storage/zfs/iscsi/lu_share.sh deleted file mode 100755 index bfda31310fd..00000000000 --- a/scripts/storage/zfs/iscsi/lu_share.sh +++ /dev/null @@ -1 +0,0 @@ -# $Id: lu_share.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/lu_share.sh $ diff --git a/scripts/storage/zfs/iscsi/managesnapshot.sh b/scripts/storage/zfs/iscsi/managesnapshot.sh deleted file mode 100755 index e96466bebf4..00000000000 --- a/scripts/storage/zfs/iscsi/managesnapshot.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env bash -# $Id: managesnapshot.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/managesnapshot.sh $ -# managesnapshot.sh -- manage snapshots (create, destroy, rollback) -# - -usage() { - printf "Usage: %s: -c -n \n" $(basename $0) >&2 - printf "Usage: %s: -d -n \n" $(basename $0) >&2 - printf "Usage: %s: -r -n \n" $(basename $0) >&2 - exit 2 -} - -create_snapshot() { - local fspath=$1 - local snapshotname=$2 - - zfs snapshot -r $fspath@$snapshotname - if [ $? -gt 0 ] - then - printf "***Failed to create snapshot $snapshotname for path $fspath\n" >&2 - return 5 - fi -} - -destroy_snapshot() { - local fspath=$1 - local snapshotname=$2 - - zfs destroy -rRf $fspath@$snapshotname - if [ $? -gt 0 ] - then - printf "***Failed to destroy snapshot $snapshotname for path $fspath\n" >&2 - return 6 - fi -} - -rollback_snapshot() { - local fspath=$1 - local snapshotname=$2 - - zfs rollback -r $fspath/datadisk1@$snapshotname - zfs rollback -r $fspath/rootdisk@$snapshotname - zfs rollback -r $fspath@$snapshotname - if [ $? -gt 0 ] - then - printf "***Failed to rollback to snapshot $snapshotname for path $fspath\n" >&2 - return 7 - fi -} - -#set -x - -cflag= -dflag= -rflag= -nflag= -pathval= -snapshot= - -while getopts 'c:d:r:n:' OPTION -do - case $OPTION in - c) cflag=1 - pathval="$OPTARG" - ;; - d) dflag=1 - pathval="$OPTARG" - ;; - r) rflag=1 - pathval="$OPTARG" - ;; - n) nflag=1 - snapshot="$OPTARG" - ;; - ?) usage - ;; - esac -done - -if [ "$nflag" != "1" ] -then - usage -fi - -if [ "$cflag$dflag$rflag" != "1" ] -then - printf "***Specify one of -c (create), -d (destroy), or -r (rollback) and a path for the target snapshot\n" >&2 - usage -fi - -if [ "$cflag" == "1" ] -then - create_snapshot $pathval $snapshot - exit $? -elif [ "$dflag" == "1" ] -then - destroy_snapshot $pathval $snapshot - exit $? -elif [ "$rflag" == "1" ] -then - rollback_snapshot $pathval $snapshot - exit $? -fi - -exit 0 diff --git a/scripts/storage/zfs/iscsi/managevolume.sh b/scripts/storage/zfs/iscsi/managevolume.sh deleted file mode 100755 index c7c294124d7..00000000000 --- a/scripts/storage/zfs/iscsi/managevolume.sh +++ /dev/null @@ -1,163 +0,0 @@ -#!/usr/bin/env bash -# $Id: managevolume.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/managevolume.sh $ -# modifyvolume.sh -- add or delete a disk volume -# - -usage() { - echo "Usage: modifydisk.sh -f -p -s [-d ] \n" -} - -check_params() { - # The folder, path, and size must be passed in - if [ "$fflag$pflag$sflag" != "111" ] - then - return 1 - else - return 0 - fi -} - -cleanup_and_exit_if_error() { - local return_code=$1 - local msg=$2 - local path=$3 - - if [ $return_code -gt 0 ] - then - delete_disk $path - exit_if_error $return_code "$msg" - fi -} - -exit_if_error() { - local return_code=$1 - local msg=$2 - - if [ $return_code -gt 0 ] - then - printf "${msg}\n" - exit 1 - fi -} - -make_folder() { - local folder=$1 - - if [ ! -d ${folder} ] - then - mkdir -p ${folder} - fi -} - -check_disk() { - local folder=$1 - local path=$2 - - make_folder $folder - - if [ -f $path ] - then - return 1 - else - return 0 - fi -} - -delete_disk() { - local path=$1 - - if [ -f $path ] - then - rm $path - fi - - return 0 -} - -create_disk() { - local path=$1 - local size=$2 - - size=$(convert_size_to_gb $size) - - if [ $? -gt 0 ] - then - return 1 - fi - - qemu-img create -f qcow2 $path $size - - return $? -} - -convert_size_to_gb() { - local size=$1 - - suffix=${size:(-1)} - case $suffix in - G) - ;; - [0-9]) size=${size}G - ;; - *) printf "Error in disk size: expect G as a suffix or no suffix\n" - return 1 - ;; - esac - - echo $size - return 0 -} - -# set -x - -fflag=0 -pflag=0 -sflag=0 -dflag=0 - -while getopts 'f:p:s:d:' OPTION -do - case $OPTION in - f) fflag=1 - folder="$OPTARG" - ;; - p) pflag=1 - path="$OPTARG" - ;; - s) sflag=1 - size="$OPTARG" - ;; - d) dflag=1 - ;; - ?) usage - exit 2 - ;; - esac -done - -# Check all parameters -check_params -exit_if_error $? "$(usage)" - -if [ "$dflag" == "0" ] -then - # Add the volume - - # Create the folder if necessary, and make sure there is no existing disk there - check_disk $folder $path - cleanup_and_exit_if_error $? "Failed to create disk at $path; path already exists." $path - - # Create the disk - create_disk $path $size - cleanup_and_exit_if_error $? "Failed to create disk at $path of size $datadisksize." $path - -else - # Delete the volume - - delete_disk $path - -fi - -exit 0 - - diff --git a/scripts/storage/zfs/iscsi/showdisks.sh b/scripts/storage/zfs/iscsi/showdisks.sh deleted file mode 100755 index c65bfc87dfe..00000000000 --- a/scripts/storage/zfs/iscsi/showdisks.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env bash -# $Id: showdisks.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/showdisks.sh $ -# mapiscsi.sh -- list of active iscsi sessions and the corresponding VM -# - -usage() { - printf "Usage: %s \n" $(basename $0) >&2 - exit 2 -} - -get_disktype () { - local vmdisk=$1 - if [[ $vmdisk =~ ^.*root.*$ ]] - then - echo "root"; - return 0 - fi - if [[ $vmdisk =~ ^.*swap.*$ ]] - then - echo "swap"; - return 0 - fi - if [[ $vmdisk =~ ^.*datadisk.*$ ]] - then - echo "datadisk"; - return 0 - fi -} - -mirror_state0() { - local vmname=$1 - local disktype=$2 - mirr=$(ls -l /dev/md/ | grep $vmname-$disktype | awk '{print $(NF-2)}') - mdadm --query /dev/md/$mirr &> /dev/null - if [ $? -ne 0 -o "$mirr" == "" ] - then - state="Not mirrored" - else - state=$(mdadm --detail /dev/md/$mirr | grep "State : " | awk '{print $3 $4 $5}') - fi - echo $state -} - -mirror_state1() { - local vmname=$1 - local disktype=$2 - local disk=$3 - mirr=$(ls -l /dev/md/ | grep $vmname-$disktype | awk '{print $(NF-2)}') - mdadm --query /dev/md/$mirr &> /dev/null - if [ $? -eq 0 -a "$mirr" != "" ] - then - state=$(mdadm --detail /dev/md/$mirr | grep "$disk" | awk '{print $(NF-2), $(NF-1)}') - fi - echo $state -} - -if [ "$1" == "" ] -then - usage -fi -vmname=$1 - -if ! xm list | grep -w $vmname > /dev/null -then - printf "%s: vm $vmname not found\n" $(basename $0) - exit 2 -fi - -#set -x - -disks=$(ls -l /dev/disk/by-vm | grep $vmname | awk '{print $NF}') -for d in $disks -do - vmdisk=$(ls -l /dev/disk/by-vm | grep -w $d | awk '{print $(NF-2)}') - disktype=$(get_disktype $vmdisk) - lasttoken=$(echo $vmdisk | awk -F"-" '{print $NF}') - case "$lasttoken" in - "root");; - "swap");; - "[0-9]") ;; - *) vmdisk=${vmdisk%-*} #strip the ip address of storage host;; - esac - - if [[ $vmdisk =~ ^.*datadisk.*$ ]]; then vmdisk=${vm%-*}; fi - disk=$d - d=${d##*/} - iqn=$(ls -l /dev/disk/by-path | grep -w $d | awk '{print $(NF-2)}') - ip=$(echo $iqn | awk -F: '{print $1}') - ip=${ip#ip-} - - mirrstate="[$(mirror_state0 $vmname $disktype)]" - diskstate="[$(mirror_state1 $vmname $disktype $disk)]" - - echo $vmname $disktype $disk $ip $mirrstate $diskstate - - -done -exit 0 - diff --git a/scripts/storage/zfs/iscsi/upgradevmdisk.sh b/scripts/storage/zfs/iscsi/upgradevmdisk.sh deleted file mode 100755 index 8075aefb7ed..00000000000 --- a/scripts/storage/zfs/iscsi/upgradevmdisk.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env bash -# $Id: upgradevmdisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/iscsi/upgradevmdisk.sh $ -# upgradevmdisk.sh -- upgrade size of disks of a VM (iscsi mode) - -usage() { - printf "Usage: %s: -f -d \n" $(basename $0) >&2 -} - -upgrade_disk() { - local ifs=$1 - local disk_size=$2 - - zfs set volsize=${disk_size}M $ifs - - if [ $? -gt 0 ] - then - return 6 - fi - - return 0 -} - -#set -x - -vflag= -dflag= -disksize= -instancefs= - -while getopts 'v:d:' OPTION -do - case $OPTION in - v) vflag=1 - instancefs="$OPTARG" - ;; - d) dflag=1 - disksize="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$vflag" != "1" -a "$dflag" != "1" ] -then - usage - exit 2 -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - - -if [[ $(zfs get -H -o value -p type $instancefs) != volume ]] -then - printf "Supplied instance fs doesn't exist\n" >&2 - exit 1 -fi - -if [ "$dflag" == 1 ] -then - if [[ $disksize -gt 0 ]] - then - upgrade_disk $instancefs $disksize - fi - - exit $? -fi -exit 0 diff --git a/scripts/storage/zfs/nfs/createvm.sh b/scripts/storage/zfs/nfs/createvm.sh deleted file mode 100755 index 9d4fba6f0a0..00000000000 --- a/scripts/storage/zfs/nfs/createvm.sh +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env bash -# $Id: createvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/nfs/createvm.sh $ -# createvm.sh -- create a vm image directory by cloning -# - -usage() { - printf "Usage: %s: -t -d -i -u \n" $(basename $0) >&2 -} - -#ensure that the instance fs is mounted within the user fs -check_valid_userfs() { - local ifs=$1 - local ufs=$2 - local child=${ifs#$ufs} - if [ ${#child} -eq $(( ${#ifs}-${#ufs} )) ] - then - return 0 - else - printf "instance fs $ifs is not contained within user fs $ufs. Bailing\n" >&2 - exit 3; - fi -} - -get_latest_snapshot() { - local fs=$1 - snap=$(zfs list -r -H -o name -S creation -t snapshot $fs| head -1) - if [ -z $snap ] - then - return 1 - fi - echo $snap - return 0 -} - -clone_contained_datadisks() { - local templatefs=$1 - local instancefs=$2 - for diskfs in $(find /$templatefs -type d | grep datadisk) - do - diskfs=${diskfs:1} #strip out leading slash - disksnap=$(get_latest_snapshot $diskfs) - if [ -z $disksnap ] - then - printf "No snapshots exist of disk filesystem $diskfs..bailing\n" >&2 - return 6 - fi - disk=$(basename $disksnap | cut -f1 -d'@') - disk="$instancefs/$disk" - printf "Cloning datadisk $disksnap to $disk\n" >&2 - zfs clone $disksnap $disk - #printf "disksnap=$disksnap target=$disk\n" - if [ $? -gt 0 ] - then - printf "Failed to clone datadisk $disksnap\n" >&2 - return 7 - fi - done -} - -#set -x - -tflag= -iflag= -uflag= -dflag= - -while getopts 't:i:u:d:' OPTION -do - case $OPTION in - t) tflag=1 - templatefs="$OPTARG" - ;; - i) iflag=1 - instancefs="$OPTARG" - ;; - u) uflag=1 - userfs="$OPTARG" - ;; - d) dflag=1 - diskfs="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$tflag$iflag$uflag" != "111" ] -then - usage - exit 2 -fi - -#if user has provided leading slash, strip it out -if [ ${userfs:0:1} == / ] -then - userfs=${userfs:1} -fi - -if [ ${templatefs:0:1} == / ] -then - templatefs=${templatefs:1} -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - -if [ -n "$diskfs" ] -then - if [ ${diskfs:0:1} == / ] - then - diskfs=${diskfs:1} - fi -fi - -check_valid_userfs $instancefs $userfs - -#if userfs doesn't exist, create it -if [ ! -d /$userfs ] -then - zfs create $userfs - if [ $? -gt 0 ] - then - printf "Failed to create user fs $userfs\n" >&2 - exit 5 - fi -fi - -#if user has provided the exact snapshot of the template fs, use it, -#else get the latest snapshot -tsnap=$(echo $templatefs | cut -f2 -d'@') -if [ $tsnap == $templatefs ] -then - tsnap=$(get_latest_snapshot $templatefs) - if [ -z $tsnap ] - then - printf "No snapshots exist of filesystem $templatefs..bailing\n" >&2 - exit 4 - fi -else - tsnap=$templatefs - templatefs=$(echo $templatefs | cut -f1 -d'@') #strip out snap version -fi - -if [ -n "$diskfs" ] -then - disksnap=$(get_latest_snapshot $diskfs) - if [ -z $disksnap ] - then - printf "No snapshots exist of disk filesystem $diskfs..bailing\n" >&2 - exit 6 - fi -fi - -#Clone root disk and associated files -printf "Cloning root disk $tsnap to $instancefs\n" >&2 -zfs clone $tsnap $instancefs -if [ $? -gt 0 ] -then - printf "Failed to clone root disk $snap\n" >&2 - exit 5 -fi - -#Clone datadisk -if [ -n "$diskfs" ] -then - zfs clone $disksnap $instancefs/datadisk1 -else - clone_contained_datadisks $templatefs $instancefs -fi - -exit 0 diff --git a/scripts/storage/zfs/nfs/delvm.sh b/scripts/storage/zfs/nfs/delvm.sh deleted file mode 100755 index 1b1032cfa8c..00000000000 --- a/scripts/storage/zfs/nfs/delvm.sh +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env bash -# $Id: delvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/nfs/delvm.sh $ -# delvm.sh -- delete a cloned image used for a vm -# - -usage() { - printf "Usage: %s: -i -u \n" $(basename $0) >&2 -} - - -#set -x - -iflag= -uflag= -userfs= -instancefs= - -while getopts 'i:u:' OPTION -do - case $OPTION in - i) iflag=1 - instancefs="$OPTARG" - ;; - u) uflag=1 - userfs="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$iflag$uflag" != "1" -a "$iflag$uflag" != "11" ] -then - usage - exit 2 -fi - -if [[ -n $instancefs && ${instancefs:0:1} == / ]] -then - instancefs=${instancefs:1} -fi - -if [[ -n $userfs && ${userfs:0:1} == / ]] -then - userfs=${userfs:1} -fi - -if [[ "$iflag" == 1 && $(zfs get -H -o value -p type $instancefs) != filesystem ]] -then - printf "Supplied instance fs doesn't exist\n" >&2 - exit 1 -fi - -if [[ "$uflag" == 1 && $(zfs get -H -o value -p type $userfs) != filesystem ]] -then - printf "Supplied user fs doesn't exist\n" >&2 - exit 1 -fi - -if [ "$iflag" == 1 ] -then - zfs destroy -r $instancefs - if [ $? -gt 0 ] - then - printf "Failed to destroy instance fs\n" >&2 - exit 5 - fi -fi - -if [ "$uflag" == 1 ] -then - zfs destroy -r $userfs - if [ $? -gt 0 ] - then - printf "Failed to destroy user fs\n" >&2 - exit 5 - fi -fi - -exit 0 diff --git a/scripts/storage/zfs/nfs/listclones.sh b/scripts/storage/zfs/nfs/listclones.sh deleted file mode 100755 index 233640e7461..00000000000 --- a/scripts/storage/zfs/nfs/listclones.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# $Id: listclones.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/nfs/listclones.sh $ -# listclones.sh -- list all cloned filesystems under a parent fs -# - -usage() { - printf "Usage: %s: -p \n" $(basename $0) >&2 -} - - -#set -x - -pflag= - -while getopts 'p:' OPTION -do - case $OPTION in - p) pflag=1 - parentFs="$OPTARG" - ;; - esac -done - -if [ "$pflag" != "1" ] -then - usage - exit 2 -fi - - -zfs list -H -r -o name,origin $parentFs | awk '$2 != "-" {print $1}' | grep -v datadisk diff --git a/scripts/storage/zfs/nfs/listvmdisk.sh b/scripts/storage/zfs/nfs/listvmdisk.sh deleted file mode 100755 index 1d1cc09a04c..00000000000 --- a/scripts/storage/zfs/nfs/listvmdisk.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env bash -# $Id: listvmdisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/nfs/listvmdisk.sh $ -# listvmdisk.sh -- list disks of a VM -# Bugs: does not handle hexadecimal numbers. Decimal only! - -usage() { - printf "Usage: %s: -i [-r | -d ] \n" $(basename $0) >&2 -} - - -#set -x - -iflag= -rflag= -dflag= -disknum= -instancefs= - -while getopts 'i:d:r' OPTION -do - case $OPTION in - i) iflag=1 - instancefs="$OPTARG" - ;; - d) dflag=1 - disknum="$OPTARG" - ;; - r) rflag=1 - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$iflag" != "1" -a "$rflag$dflag" != "1" ] -then - usage - exit 2 -fi - -if [ ${instancefs:0:1} == / ] -then - instancefs=${instancefs:1} -fi - - -if [[ $(zfs get -H -o value -p type $instancefs) != filesystem ]] -then - printf "Supplied instance fs doesn't exist\n" >&2 - exit 1 -fi - - -if [ "$rflag" == 1 ] -then - zfs list -r -H -o name -t filesystem $instancefs | grep -v datadisk - if [ $? -gt 0 ] - then - exit 5 - fi - exit 0 -fi - -if [ "$dflag" == 1 ] -then - if [[ $disknum -eq 0 ]] - then - zfs list -r -H -o name -t filesystem $instancefs | grep -v datadisk - else - zfs list -r -H -o name -t filesystem $instancefs | grep datadisk$disknum - fi - if [ $? -gt 0 ] - then - exit 0 - fi - exit 0 -fi -exit 0 diff --git a/scripts/storage/zfs/nfs/listvmdisksize.sh b/scripts/storage/zfs/nfs/listvmdisksize.sh deleted file mode 100755 index 83568812218..00000000000 --- a/scripts/storage/zfs/nfs/listvmdisksize.sh +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env bash -# $Id: listvmdisksize.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/nfs/listvmdisksize.sh $ -# listvmdisksize.sh -- list disk sizes of a VM -# - -usage() { - printf "Usage: %s: -d [-t | -a ] \n" $(basename $0) >&2 -} - - -##################################################################### -# Evaluate a floating point number expression. -function float_eval() -{ - local stat=0 - local result=0.0 - if [[ $# -gt 0 ]]; then - result=$(echo "scale=0; $*" | bc 2>/dev/null) - stat=$? - if [[ $stat -eq 0 && -z "$result" ]]; then stat=1; fi - fi - echo $result - return $stat -} - - -#set -x - -aflag= -tflag= -aflag= -diskfs= - -while getopts 'd:ta' OPTION -do - case $OPTION in - d) dflag=1 - diskfs="$OPTARG" - ;; - t) tflag=1 - ;; - a) aflag=1 - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$dflag" != "1" -a "$tflag$aflag" != "1" ] -then - usage - exit 2 -fi - -if [ ${diskfs:0:1} == / ] -then - diskfs=${diskfs:1} -fi - - -if [[ $(zfs get -H -o value -p type $diskfs) != filesystem ]] -then - printf "Supplied disk fs doesn't exist\n" >&2 - exit 1 -fi - - -if [ "$aflag" == 1 ] -then - used=$(zfs list -H -o used -t filesystem $diskfs) - if [ $? -gt 0 ] - then - exit 5 - fi - result=$used - size=${used:0:$((${#used}-1))} - suffix=${used:(-1)} - case $suffix in - G) result=$(float_eval "$size*1024*1024*1024") - ;; - M) result=$(float_eval "$size*1024*1024") - ;; - K) result=$(float_eval "$size*1024") - ;; - esac - - result=$(echo $result | cut -d"." -f1) #strip out decimal precision - printf "$result\n" - exit 0 -fi - -if [ "$tflag" == 1 ] -then - result=$(ls -l /$diskfs | grep vmi-root | awk '{print $5}') - if [ "$result" == "" ] - then - result=$(ls -l /$diskfs | grep vmi-data| awk '{print $5}') - fi - printf "$result\n" - exit 0 -fi - -exit 0 diff --git a/scripts/storage/zfs/nfs/rundomr.sh b/scripts/storage/zfs/nfs/rundomr.sh deleted file mode 100755 index f9ee7bd87de..00000000000 --- a/scripts/storage/zfs/nfs/rundomr.sh +++ /dev/null @@ -1,196 +0,0 @@ -#!/usr/bin/env bash -# $Id: rundomr.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/nfs/rundomr.sh $ -# rundomr.sh -- start a domR -# -# -#set -x - -usage() { - printf "Usage: %s: -v -i -m -a -A -p -P -n -N -g -l \n" $(basename $0) >&2 -} - -check_vnetd_running() { - /sbin/lsmod | grep vnet_module > /dev/null - local module_loaded=$? - if [[ ( -z $(pidof vnetd) ) && ( $module_loaded -ne 0 ) ]] - then - printf 'vnet: Neither userspace daemon running nor kernel module loaded!, not starting vm '"$vmname\n" >&2 - exit 2 - fi - -} - -# check if ip address is already used -check_ip() { - ping -c 1 -n -q $1 > /dev/null - if [ $? -eq 0 ] - then - printf "Error: ip address $1 already in use...exiting\n" >&2 - exit 2 - fi -} - - -create_vnet () { - local vnetid=$1 - local bridgeid="vnbr""$vnetid" - local vnifid="vnif""$vnetid" - local longvnetid="0000:0000:0000:0000:0000:0000:0000:""$vnetid" - - eval "$2=$bridgeid" - - # Create the vnet even if it already exists. /usr/sbin/vn operation is - # idempotent - vn vnet-create -b ${bridgeid} ${longvnetid} &> /dev/null - - #echo $bridgeid $vnifid $longvnetid - return 0 -} - - -vflag= -iflag= -mflag= -aflag= -gflag= -lflag= -nflag= -Aflag= -dflag= -bflag= -pflag= -Iflag= -Nflag= -dnsoptions= -xenbr= - -while getopts 'v:i:m:a:A:g:l:n:d:b:p:I:N:' OPTION -do - case $OPTION in - v) vflag=1 - vnetid="$OPTARG" - ;; - i) iflag=1 - eth1ip="$OPTARG" - ;; - m) mflag=1 - ram="$OPTARG" - ;; - a) aflag=1 - eth0mac="$OPTARG" - ;; - A) Aflag=1 - eth1mac="mac=$OPTARG" - ;; - g) gflag=1 - gateway="$OPTARG" - ;; - n) nflag=1 - eth1mask="$OPTARG" - ;; - l) lflag=1 - vmname="$OPTARG" - ;; - d) dflag=1 - dnsoptions="$OPTARG" - ;; - p) pflag=1 - eth2mac="$OPTARG" - ;; - I) Iflag=1 - eth2ip="$OPTARG" - ;; - N) Nflag=1 - eth2mask="$OPTARG" - ;; - b) bflag=1 - xenbr="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -#-d & -b is optional -if [ "$Aflag$vflag$mflag$iflag$aflag$nflag$gflag$lflag" != "11111111" ] -then - usage - exit 2 -fi - -shift $(($OPTIND - 1)) -imagedir=$1 - -if [ -z $imagedir ] -then - usage - exit 2 -fi - - -if xm list $vmname &>/dev/null -then - printf "Error: domR $vmname already exists\n" >&2 - exit 2 -fi - -#make sure vnetd is running -check_vnetd_running - -# grab the kernel, bootloader and disk images -kernel="$imagedir/"$(ls $imagedir | grep vmlinuz) -ramdisk="$imagedir/"$(ls $imagedir | grep initrd) -rootdisk="$imagedir/"$(ls $imagedir | grep vmi-root) -swapdisk="$imagedir/"$(ls $imagedir | grep swap) - -if [ "$rootdisk" == "$imagedir/" ] -then - printf "Error: No root disk found\nVM $vmname not started\n" >&2 - exit 2 -fi - - -if [ "$kernel" == "$imagedir/" ] || [ "$ramdisk" == "$imagedir/" ] -then - printf "Could not find kernel and initrd images, exiting\n" >&2 - exit 2 -fi - -#ensure no ip address clash -check_ip $eth1ip - - - -# Create the vnet locally if not already created -bridge="" -if ! create_vnet "$vnetid" bridge ; then - printf "Failed to create vnet, exiting\n" >&2 - exit 5 -fi - -eth2br= -if [ -n "$xenbr" ] -then - eth2br=",bridge=$xenbr" -fi -#echo $eth2br - -# create the domR. Pass eth1 ip configuration in the "extra" flag -xm new /dev/null kernel="$kernel" name="$vmname" disk="tap:aio:$rootdisk,xvda1,w" disk="tap:aio:$swapdisk,xvda2,w" ramdisk="$ramdisk" memory=$ram vif="mac=$eth0mac,bridge=$bridge" vif="$eth1mac,bridge=eth0" vif="mac=$eth2mac$eth2br" root="/dev/xvda1 ro" ip="$eth1ip" extra="fastboot eth1ip=$eth1ip eth1mask=$eth1mask eth2ip=$eth2ip eth2mask=$eth2mask gateway=$gateway $dnsoptions" - - -if [ $? -gt 0 ]; then - exit 10 -fi - -#Kick off the vm -xm start $vmname - -if [ $? -gt 0 ]; then - exit 20 -fi - -exit 0 - - diff --git a/scripts/storage/zfs/nfs/runvm.sh b/scripts/storage/zfs/nfs/runvm.sh deleted file mode 100755 index d989f5952b0..00000000000 --- a/scripts/storage/zfs/nfs/runvm.sh +++ /dev/null @@ -1,304 +0,0 @@ -#!/usr/bin/env bash -# $Id: runvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/nfs/runvm.sh $ -# runvm.sh -- start a vm from a directory containing the kernel and os images -# -# - -usage() { - printf "Usage: %s: -v -i -m -a -g -c -w -l -n <# cores> -u \n" $(basename $0) >&2 -} - -check_vnetd_running() { - /sbin/lsmod | grep vnet_module > /dev/null - local module_loaded=$? - if [[ ( -z $(pidof vnetd) ) && ( $module_loaded -ne 0 ) ]] - then - printf 'vnet: Neither userspace daemon running nor kernel module loaded!, not starting vm '"$vmname\n" >&2 - exit 2 - fi - -} - -is_xen_3_3 () { - local a; - local b; - a=$(xm info | grep xen_minor | cut -d":" -f2); - b=$(echo $a) - if [ $b -lt 3 ] - then - return 1 - fi - - return 0 -} - - -get_dom0_ip () { - if ifconfig eth0 &> /dev/null; - then - eval "$1=$(ifconfig eth0 | awk '/inet addr/ {split ($2,A,":"); print A[2]}')" - return 0 - elif ifconfig eth1 &> /dev/null; - then - eval "$1=$(ifconfig eth1 | awk '/inet addr/ {split ($2,A,":"); print A[2]}')" - return 0; - fi - return 1; -} - -create_vnet () { - local vnetid=$1 - local bridgeid="vnbr""$vnetid" - local vnifid="vnif""$vnetid" - local longvnetid="0000:0000:0000:0000:0000:0000:0000:""$vnetid" - - eval "$2=$bridgeid" - - # Create the vnet even if it already exists. /usr/sbin/vn operation is - # idempotent - vn vnet-create -b ${bridgeid} ${longvnetid} &> /dev/null - - #echo $bridgeid $vnifid $longvnetid - return 0 -} - - -# check if gateway domain is up and running -check_gw() { - ping -c 1 -n -q $1 > /dev/null - if [ $? -gt 0 ] - then - sleep 1 - ping -c 1 -n -q $1 > /dev/null - fi - return $?; -} - -#Append an entry into dhcp hosts file and knock the dhcp server on its head -add_dhcp_entry() { - local gw=$1 - local mac=$2 - local ip=$3 - local vm=$4 - ssh -o StrictHostKeyChecking=no -i ./id_rsa root@$gw "/root/edithosts.sh $mac $ip $vm" >/dev/null - if [ $? -gt 0 ] - then - $5=1 - return 1 - fi - return 0 -} - -#set -x - -vflag= -iflag= -mflag= -aflag= -gflag= -lflag= -cflag= -vcpus=0 -cpucap=0 -vncpwd="password" - -while getopts 'v:i:m:a:g:l:c:n:u:w:' OPTION -do - case $OPTION in - v) vflag=1 - vnetid="$OPTARG" - ;; - i) iflag=1 - ipaddr="$OPTARG" - ;; - m) mflag=1 - ram="$OPTARG" - ;; - a) aflag=1 - macaddr="$OPTARG" - ;; - g) gflag=1 - gateway="$OPTARG" - ;; - l) lflag=1 - vmname="$OPTARG" - ;; - c) cflag=1 - vncconsole="$OPTARG" - ;; - w) wflag=1 - vncpwd="$OPTARG" - ;; - n) nflag=1 - vcpus="$OPTARG" - ;; - u) uflag=1 - cpucap="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$vflag$mflag$iflag$aflag$gflag$lflag$cflag" != "1111111" ] -then - usage - exit 2 -fi - -wincpuopts="" -if [ "$vcpus" == 0 -a "$cpucap" == 0 ] -then - #Windows doesn't like it - wincpuopts="" -elif [ "$vcpus" == 0 ] -then - wincpuopts="cpu_cap=$cpucap" -elif [ "$cpucap" == 0 ] -then - wincpuopts="vcpus=$vcpus" -else - wincpuopts="vcpus=$vcpus cpu_cap=$cpucap" -fi - - -shift $(($OPTIND - 1)) -imagedir=$1 - -if [ -z $imagedir ] -then - usage - exit 2 -fi -if [ "$vmname" == gateway ] -then - printf "Error: $vmname is illegal (this is the hostname of domR)\n" >&2 - exit 2 -fi -if xm list $vmname &>/dev/null -then - printf "Error: vm $vmname already exists\n" >&2 - exit 2 -fi - -if [ "$ipaddr" == "10.1.1.1" ] -then - printf "Error: 10.1.1.1 is the gateway and cannot be assigned to a vm\n" >&2 - exit 2 -fi - -#make sure vnetd is running -check_vnetd_running - -# grab the kernel, bootloader and disk images -kernel="$imagedir/"$(ls $imagedir | grep vmlinuz) -ramdisk="$imagedir/"$(ls $imagedir | grep initrd) -rootdisk="$imagedir/"$(ls $imagedir | grep vmi-root) -swapdisk="$imagedir/"$(ls $imagedir | grep swap) -datadisk1="$imagedir/"$(ls $imagedir | grep vmi-data1) -datadisk2="$imagedir/"$(ls $imagedir | grep vmi-data2) - -#set -x - -if [ "$rootdisk" == "$imagedir/" ] -then - printf "Error: No root disk found\nVM $vmname not started\n" >&2 - exit 2 -fi -if [ "$datadisk1" == "$imagedir/" ] -then - #look for subdirs called 'datadisk' - i=0 - datadisks=( ) - for diskfs in $(find $imagedir -type d | grep datadisk) - do - datadisks[$i]=$(find $diskfs | grep vmi-data | head -1) #expect only 1 disk - let i=i+1 - done - datadisk1=${datadisks[0]}; - if [ -z "$datadisk1" ] - then - printf "Error: No data disk found\nVM $vmname not started\n" >&2 - exit 2 - fi -fi - -linux=0 -windows=0 -pygr=0 - -if [ "$kernel" != "$imagedir/" ] && [ "$ramdisk" != "$imagedir/" ] -then - #Linux kernel - linux=1 - builder="linux" - device_model="" -elif [ -f "$imagedir/pygrub" ] -then - #pygrub linux image - pygr=1 -else - kernel="/usr/lib/xen/boot/hvmloader" - windows=1 - builder="hvm" - device_model="/usr/lib64/xen/bin/qemu-dm" -fi - -#get dom 0 ip to figure out which ip to bind vnc to -dom0ip="" -get_dom0_ip dom0ip - -# check if gateway domain is up and running -if ! check_gw "$gateway" -then - printf "Unable to ping the gateway domain, exiting\n" >&2 - exit 3 -fi - -#Append an entry into dhcp hosts file and knock the dhcp server on its head -added=0 -if ! add_dhcp_entry $gateway $macaddr $ipaddr $vmname $added -then - printf "Unable add dhcp entry on gateway (reason=$added), exiting\n" >&2 - exit 4 -fi - -# Create the vnet locally if not already created -bridge="" -if ! create_vnet "$vnetid" bridge ; then - printf "Failed to create vnet, exiting\n" >&2 - exit 5 -fi - -#hvm disk prefix for 3.1 is file:, for 3.3 it is tap:aio -hvmdisk="tap:aio" -if ! is_xen_3_3 -then - hvmdisk="file" -fi - -# create the vm (linux) -if [ $linux -eq 1 ]; then - xm new /dev/null kernel="$kernel" name="$vmname" disk="tap:aio:$rootdisk,xvda1,w" disk="tap:aio:$swapdisk,xvda2,w" disk="tap:aio:$datadisk1,xvda3,w" ramdisk="$ramdisk" memory=$ram vif="mac=$macaddr,bridge=$bridge" dhcp="dhcp" root="/dev/xvda1 ro" vnc=1 vnclisten="$dom0ip" vfb="type=vnc,vncdisplay=$vncconsole,vncpasswd=$vncpwd" ip="$ipaddr" extra="fastboot" vcpus=$vcpus cpu_cap=$cpucap -elif [ $pygr -eq 1 ]; then - xm new /dev/null bootloader="/usr/bin/pygrub" name="$vmname" disk="tap:aio:$rootdisk,sda,w" disk="tap:aio:$datadisk1,sdb,w" memory=$ram vif="mac=$macaddr,bridge=$bridge" dhcp="dhcp" root="/dev/sda ro" vnc=1 vnclisten="$dom0ip" vfb="type=vnc,vncdisplay=$vncconsole,vncpasswd=$vncpwd" ip="$ipaddr" extra="fastboot" vcpus=$vcpus cpu_cap=$cpucap -else - #create the vm (windows/HVM) - xm new /dev/null kernel="$kernel" name="$vmname" disk="$hvmdisk:$rootdisk,hda,w" disk="$hvmdisk:$datadisk1,hdb,w" builder="$builder" device_model="$device_model" memory=$ram vif="mac=$macaddr,bridge=$bridge,type=ioemu" dhcp="dhcp" vnc=1 vnclisten="$dom0ip" vncdisplay="$vncconsole" vncpasswd="$vncpwd" usbdevice="tablet" localtime="yes" $wincpuopts -fi - -if [ $? -gt 0 ]; then - exit 10 -fi - -#Kick off the vm -xm start $vmname - -if [ $? -gt 0 ]; then - exit 20 -fi - -exit 0 - - diff --git a/scripts/storage/zfs/nfs/stopvm.sh b/scripts/storage/zfs/nfs/stopvm.sh deleted file mode 100755 index 4c03e0f5f5c..00000000000 --- a/scripts/storage/zfs/nfs/stopvm.sh +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env bash -# $Id: stopvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/nfs/stopvm.sh $ -# stopvm.sh -- stop one or all vm -# -# - -usage() { - printf "Usage: %s: <-a|-l > \n" $(basename $0) >&2 -} - -unmount_disks() { - disks=$(xm list -l $1 | grep tap:aio | cut -d":" -f3 | cut -d")" -f1) - imagedirs=$(for d in $disks; do dskdir=$(dirname $d); echo ${#dskdir}:$dskdir; done | sort -n -r | cut -d":" -f2 | uniq) - for i in $imagedirs - do - umount $i - printf "Unmounted $i result=$?\n" - done -} - -stop_one_vm() { - if ! xm list $1 &>/dev/null - then - printf "Error: vm $1 does not exist\n" >&2 - return 2 - fi - - - local domId=0; - if xm list $1 -l | grep domid - then - status=($(xm list $1 | grep $1)) - domId=${status[1]}; - fi - - if [ $domId -gt 0 ] - then - #Try a graceful shutdown - xm shutdown $1 -w - unmount_disks $1 - else - #printf "Domain $1 is already shutdown\n" - unmount_disks $1 - xm delete $1 - return 0 - fi - - if [ $? -gt 0 ]; then - #Try an undignified shutdown - xm destroy $1 -w - unmount_disks $1 - fi - - if [ $? -gt 0 ]; then - #Try an undignified shutdown - printf "Failed to terminate instance $1\n">&2 - return 20 - else - xm delete $1 - fi - - return 0; - -} - -stop_all_vms() { - for i in `xm list | grep -v Domain-0| grep -v Name| awk -F" " '{print $1}'` - do - stop_one_vm $i - done - -} - - - -lflag= -aflag= - -while getopts 'al:' OPTION -do - case $OPTION in - l) lflag=1 - vmname="$OPTARG" - ;; - a) aflag=1 - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$aflag$lflag" != "1" ] -then - usage - exit 2 -fi - -if [ "$aflag" == "1" ] -then - stop_all_vms; - exit 0 -fi - -stop_one_vm $vmname - -exit 0 - - diff --git a/scripts/storage/zfs/zfs_mount_recovery.sh b/scripts/storage/zfs/zfs_mount_recovery.sh deleted file mode 100755 index 2d4c35adb7d..00000000000 --- a/scripts/storage/zfs/zfs_mount_recovery.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env bash -# $Id: zfs_mount_recovery.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/zfs/zfs_mount_recovery.sh $ -# zfs_mount_recovery.sh -- recover from early boot zfs mount failure -# -# Usage: -# -# zfs_mount_recovery.sh [-f] -# -# Command line options: -# -# -f Force: Unmount/remount nonroot zfs filesystem even if the -# system/filesystem/local service is working properly. -# -# OpenSolaris - -usage() { - printf "Usage: %s [-f]\n" $(basename $0) >&2 -} - -#set -x - -if [ $# -gt 2 ] -then - usage - exit 1 -fi - -force_flag= - -while getopts 'f' OPTION -do - case $OPTION in - f) force_flag=1 - ;; - *) usage - exit 2 - ;; - esac -done - -state=$(svcs -a | grep system/filesystem/local | awk '{print $1}') - -if [ "$state" == "online" -a -z "$force_flag" ] -then - exit 0 -fi - -rootpool_name="rootpool" - -pool_name=$(zpool list -H | grep -v $rootpool_name | awk '{print $1}') - -if [ -z "$pool_name" ] -then - printf "no storage pool configured\n" >&2 - exit 3 -fi - -# unmount any mounted child filesystems of affected storage pool - -for path in $(zfs mount | grep $pool_name | awk '{print $1}') -do - zfs unmount -f $path 2>/dev/null -done - -rm -rf /${pool_name:-zzz} - -for path in $(zfs list -H -o name,type | grep ^$pool_name | grep filesystem | awk '{print $1}') -do - zfs mount -O $path -done - -svcadm clear system/filesystem/local - -exit 0 diff --git a/scripts/vm/storage/iscsi/comstar/iscsi_common.sh b/scripts/vm/storage/iscsi/comstar/iscsi_common.sh deleted file mode 100755 index 71e9d22c7ad..00000000000 --- a/scripts/vm/storage/iscsi/comstar/iscsi_common.sh +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env bash -# $Id: iscsi_common.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/comstar/iscsi_common.sh $ -# iscsi_common.sh -- mount volume from ISCSI server -# -# - -# check if server is up and running -check_iscsi_server() { - local pings=1 - while ! ping -c 1 -n -q $1 > /dev/null && [ $pings -ne $2 ] - do - let pings=pings+1 - done - - printf "##check_iscsi_server: number of pings=%s\n" $pings - [ $pings -eq $2 ] && return 1 - return 0; -} - -target_iqn() { # either iscsitgtd or comstar - if echo $1 | grep :lu: >/dev/null - then - echo $1 | cut -d':' -f1,2,3 - else - echo $1 - fi -} - -do_iscsi_login () { - local t_iqn=$(target_iqn $1) - local rc=0 - #create a record in the client database - iscsiadm -m node -T $t_iqn -p $2 -o new - rc=$? - if [ $rc -gt 0 ] - then - printf "Failed to create ISCSI initiator record for target rc=$rc\n" >&2 - return 6 - fi - # do not autologin upon restart - iscsiadm -m node -T $t_iqn -p $2 -o update -n node.startup -v manual - - #login to the target - iscsiadm -m node -T $t_iqn -p $2 -l - rc=$? - if [ $rc -gt 0 ] - then - printf "Failed to login to target, rc=$rc\n" >&2 - return 7 - fi -} - - -get_device_links() { - local n=20 - local dev= - local host=$1 - local iqn=$2 - local disktype=$3 - while [ -z "$dev" -a $n -gt 0 ] - do - sleep 3; - let n=n-1; - dev=$(ls -l /dev/disk/by-path/ip-$host*$iqn*| awk '{print $NF}' | awk -F"/" '{print $NF}' | head -1) - done - - if [ $n -eq 0 ] - then - printf "****Timed out waiting for $disktype device to register**\n" - fi - printf "$dev\n" -} - -do_iscsi_logout() { - local t_iqn=$(target_iqn $1) - local rc=0 - if [ "$1" == "" ] - then - return $rc - fi - iscsiadm -m node -T $t_iqn -u #logout - rc=$? - if [ $rc -gt 0 ] - then - printf "*****Warning: failed to logout of $1 rc=$rc\n" - fi - iscsiadm -m node -T $t_iqn -o delete #delete record from db - if [ $? -gt 0 ] - then - printf "*****Warning: failed to delete iscsi record $1 rc=$rc\n" - fi - return $rc -} - -# unmount a local directory and all data disks within -unmount_all() { - local rc=0 - local err=0 - local localdir=$1 - local vmname=$2 - local disks=$(ls -l $DISKDIR | grep $vmname | awk '{print $NF}') #/dev/sdb - for d in $disks ; - do - disknum=$(echo $d | awk -F"/" '{print $NF}') #sdb - tgt=$(ls -l /dev/disk/by-path | grep -w $disknum | awk '{print $(NF-2)}' | grep -v part | cut -d: -f2- | cut -d- -f3-) - softlink=$(ls -l $DISKDIR |grep $vmname| grep $d | awk '{print $(NF-2)}') #vmname-root or vmname-swap or vmname-data - rm $DISKDIR/$softlink #delete soft link - rc=$? - if [ $rc -gt 0 ] - then - printf "*****Warning: failed to delete $DISKDIR/$softlink rc=$rc\n" - let err=err+1 - fi - do_iscsi_logout $tgt - let err=err+$? - done - - #unmount the image filesystem from nfs - local errmsg=$(umount $localdir 2>&1) - rc=$? - if [ $rc -gt 0 ] - then - echo $errmsg | grep "not mounted" - if [ $? -eq 1 ] - then - printf "*****Warning: unmount failed rc=$rc\n" - let err=err+1 - fi - fi - rm -fr $localdir - - return $err -} - -#find the block device for a particular vm disk -get_blkdev() { - local vmname=$1 - local disktype=$2 - local disk=$(ls -l $DISKDIR | grep $vmname-$disktype | awk '{print $NF}') #/dev/sdb - echo $disk -} - -# unmount an iscsi disk -unmount_disk() { - local rc=0 - local err=0 - local vmname=$1 - local disktype=$2 - local disks=$(ls -l $DISKDIR | grep $vmname | grep $disktype | awk '{print $NF}') #/dev/sdb - for d in $disks ; - do - local disknum=$(echo $d | awk -F"/" '{print $NF}') #sdb - local tgt=$(ls -l /dev/disk/by-path | grep -w $disknum | awk '{print $(NF-2)}' | grep -v part | cut -d: -f2- | cut -d- -f3-) - local softlink=$(ls -l $DISKDIR |grep $vmname| grep $d | awk '{print $(NF-2)}') #vmname-root or vmname-swap or vmname-data - rm $DISKDIR/$softlink #delete soft link - rc=$? - if [ $rc -gt 0 ] - then - printf "*****Warning: failed to delete $DISKDIR/$softlink rc=$rc\n" - let err=err+1 - fi - do_iscsi_logout $tgt - let err=err+$? - done - return $err -} - -DISKDIR="/dev/disk/by-vm/" diff --git a/scripts/vm/storage/iscsi/comstar/mapiscsi.sh b/scripts/vm/storage/iscsi/comstar/mapiscsi.sh deleted file mode 100755 index b4b35ca6a8c..00000000000 --- a/scripts/vm/storage/iscsi/comstar/mapiscsi.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -# $Id: mapiscsi.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/comstar/mapiscsi.sh $ -# mapiscsi.sh -- list of active iscsi sessions and the corresponding VM -# -# COMSTAR version -# -# typical output: -# - -usage() { - printf "Usage: %s: \n" $(basename $0) >&2 -} - -#set -x - -iqn="iqn.2009-99.unk.nown:02:00000000-0000-0000-0000-000000000000:lu:00000000000000000000000000000000" - -for vm in $(ls -l /dev/disk/by-vm | grep dev | awk '{print $(NF-2)}') -do - lasttoken=$(echo $vm | awk -F"-" '{print $NF}') - case "$lasttoken" in - "root");; - "swap");; - [0-9]) ;; - *) vm=${vm%-*} #strip the ip address of storage host;; - esac - - if [[ $vm =~ ^.*datadisk.*$ ]]; then vm=${vm%-*}; fi - echo $iqn $vm -done diff --git a/scripts/vm/storage/iscsi/comstar/mountrootdisk.sh b/scripts/vm/storage/iscsi/comstar/mountrootdisk.sh deleted file mode 100755 index fb1a934a846..00000000000 --- a/scripts/vm/storage/iscsi/comstar/mountrootdisk.sh +++ /dev/null @@ -1,235 +0,0 @@ -#!/usr/bin/env bash -# $Id: mountrootdisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/comstar/mountrootdisk.sh $ -# mountrootdisk.sh -- mount image directory from NFS and ISCSI server -# -# - -dir=$(dirname $0) -. $dir/iscsi_common.sh -. $dir/mirror_common.sh - -usage() { - printf "Usage: %s: [-u | -m ] -h -r -t -w -l -n -b [-M -H -T -W ]\n" $(basename $0) >&2 - exit 2 -} - -login() { - local vmname=$1 - local iqn=$2 - local host=$3 - local localdir=$4 - do_iscsi_login $iqn $host - if [ $? -gt 0 ] - then - printf "***Failed to login to $iqn at $host\n" >&2 - unmount_all $localdir $vmname - exit 5 - fi -} - -make_links() { - local vmname=$1 - local host=$2 - local iqn=$3 - local disktype=$4 - local localdir=$5 - blkdev=$(get_device_links $host $iqn $disktype) - if [ "$blkdev" == "" ] - then - printf "***Failed to get device links for $iqn $vmname $disktype\n" >&2 - unmount_all $localdir $vmname - exit 8 - fi - echo "/dev/$blkdev" - ln -s /dev/$blkdev $DISKDIR/$vmname-$disktype-$host - return $? -} - -#set -x - -hflag= -rflag= -lflag= -uflag= -mflag= -nflag= -tflag= -Mflag= -Tflag= -Wflag= -bflag= -rootname= -swpname= -rootmirror= -swpmirror= -tgthost= -tgtmirror= -bootloader="PyGrub" - -while getopts 'umxw:t:n:h:H:r:l:T:W:Mb:' OPTION -do - case $OPTION in - h) hflag=1 - tgthost="$OPTARG" - ;; - H) Hflag=1 - tgtmirror="$OPTARG" - ;; - r) rflag=1 - remotedir="$OPTARG" - ;; - t) tflag=1 - rootname="$OPTARG" - ;; - T) Tflag=1 - rootmirror="$OPTARG" - ;; - w) wflag=1 - swpname="$OPTARG" - ;; - b) bflag=1 - bootloader="$OPTARG" - ;; - W) Wflag=1 - swpmirror="$OPTARG" - ;; - l) lflag=1 - localdir="$OPTARG" - ;; - n) nflag=1 - vmname="$OPTARG" - ;; - u) uflag=1 - ;; - m) mflag=1 - ;; - M) Mflag=1 - ;; - x) set -x - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$hflag$rflag$lflag$nflag$tflag" != "11111" ] && [ "$uflag$lflag$nflag" != "111" ] -then - usage -fi - -if [ "$uflag$mflag" != "1" ] -then - printf "***Specify one of -u (unmount) or -m (mount)\n" >&2 - usage -fi - - -if [ "$uflag" == "1" ] -then - if [ "$Mflag$uflag" == "1" ] - then - unmount_all $localdir $vmname - rc=$? - exit $rc - elif [ "$Mflag$uflag" == "11" ] - then - stop_mirror $vmname root - rc=$? - stop_mirror $vmname swap - unmount_all $localdir $vmname - rc=$? - exit $rc - fi -fi - - -#create the local dir if necessary -if ! mkdir -p $localdir -then - printf "***Unable to create local directory, exiting\n" >&2 -fi - -#create disk directory if needed -if [ ! -d $DISKDIR ]; -then - mkdir $DISKDIR -fi - -#check if the iscsi target portal is up and running -if ! check_iscsi_server "$tgthost" 4 -then - printf "***Unable to ping the iscsi target host $tgthost, exiting\n" >&2 - exit 3 -fi - -if [ "$Mflag" == 1 ] -then - if ! check_iscsi_server "$tgtmirror" 4 - then - printf "***Unable to ping the iscsi target host $tgtmirror, exiting\n" >&2 - exit 3 - fi -fi - -bootloader=$(echo $bootloader | tr [A-Z] [a-z]) -if [ "$bootloader" == "external" ] -then - #mount the local dir (for kernel, ramdisk, etc) - mount -t nfs $tgthost:$remotedir $localdir -o intr,rsize=32768,wsize=32768,hard - if [ $? -gt 0 ] - then - printf "***Failed to mount $remotedir at $localdir\n" >&2 - exit 5 - fi -fi - -login $vmname $rootname $tgthost $localdir -sleep 1 - -if [ -n "$swpname" ] -then - login $vmname $swpname $tgthost $localdir - sleep 1 -fi - -if [ -n "$rootmirror" ] -then - login $vmname $rootmirror $tgtmirror $localdir - sleep 1 -fi - -if [ -n "$swpmirror" ] -then - login $vmname $swpmirror $tgtmirror $localdir - sleep 1 -fi - -#figure out the device number and make a softlink -root0dev=$(make_links $vmname $tgthost $rootname root $localdir) - -if [ -n "$swpname" ] -then - swap0dev=$(make_links $vmname $tgthost $swpname swap $localdir) -fi - -if [ -n "$rootmirror" ] -then - root1dev=$(make_links $vmname $tgtmirror $rootmirror root $localdir) -fi - -if [ -n "$swpmirror" ] -then - swap1dev=$(make_links $vmname $tgtmirror $swpmirror swap $localdir) -fi - -if [ "$Mflag" == "1" ] -then - build_mirror $vmname root $root0dev $root1dev - if [ "$swap0dev" ] - then - build_mirror $vmname swap $swap0dev $swap1dev - fi -fi - -exit 0 diff --git a/scripts/vm/storage/iscsi/comstar/mountvm.sh b/scripts/vm/storage/iscsi/comstar/mountvm.sh deleted file mode 100755 index 980eb5e3a98..00000000000 --- a/scripts/vm/storage/iscsi/comstar/mountvm.sh +++ /dev/null @@ -1,469 +0,0 @@ -#!/usr/bin/env bash -# $Id: mountvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/comstar/mountvm.sh $ -# mountvm.sh -- mount image directory from NFS and ISCSI server -# -# COMSTAR version - -usage() { - printf "Usage: %s: [-u | -m ] -h -r -t -w -1 -l -n \n" $(basename $0) >&2 -} - -# check if server is up and running -check_iscsi_server() { - local pings=1 - while ! ping -c 1 -n -q $1 > /dev/null && [ $pings -ne $2 ] - do - let pings=pings+1 - done - - printf "##check_iscsi_server: number of pings=%s\n" $pings - [ $pings -eq $2 ] && return 1 - return 0 -} - -target_iqn() { # either iscsitgtd or comstar - echo $1 | cut -d':' -f1,2,3 -} - -get_lu_name() { # - # - echo $1 | cut -d':' -f5 -} - -do_iscsi_login () { # target-iqn # ip-addr - local t_iqn=$(target_iqn $1) - local rc=0 - - local sid= - # if already logged in, rescan scsi and return success - sid=$(iscsiadm -m session | grep $2 | grep $t_iqn | awk '{print $2}' | tr -d '[]') - if [ -n "$sid" ] - then - return $sid - fi - - #create a record in the client database - iscsiadm -m node -T $t_iqn -p $2 -o new - rc=$? - if [ $rc -gt 0 ] - then - printf "Failed to create ISCSI initiator record for target rc=$rc\n" >&2 - return -6 - fi - # do not autologin upon restart - iscsiadm -m node -T $t_iqn -p $2 -o update -n node.startup -v manual - - # login to the target - iscsiadm -m node -T $t_iqn -p $2 -l - rc=$? - if [ $rc -gt 0 ] - then - printf "Failed to login to target, rc=$rc\n" >&2 - return -7 - fi - - sid=$(iscsiadm -m session | grep $2 | grep $t_iqn | awk '{print $2}' | tr -d '[]') - if [ -n "$sid" ] - then - return $sid - fi -} - - -get_device_links() { # - local n=20 - local dev= - local lu_name=$(get_lu_name $2) - local disks= - local lu= - local sid=$1 - - # Let's unplug all the unused devices first - unplug_unused_scsi_by_sid $sid 1>&2 - - while [ $n -gt 0 ] - do - let n=n-1 - iscsiadm -m session -r $sid --rescan > /dev/null 2>&1 - disks=$(iscsiadm -m session -r $sid -P 3 | grep Attached | grep running | awk '{print $4}') - for d in $disks - do - lu=$(scsi_id -g -s /block/$d) - if [ "$lu" == "3$lu_name" ] - then - # we found it but now wait for the /dev to appear. - local m=10 - while [ $m -gt 0 ] - do - if ls -l /dev/$d > /dev/null 2>&1; then - printf "$d\n" - return 0 - fi - let m=m-1 - printf "Waiting for /dev/$d to appear\n" >&2 - sleep 1 - done - printf "Unable to get /dev/$d to appear\n" >&2 - return 2 - fi - done - sleep 3 - done - - if [ $n -eq 0 ] - then - printf "****Timed out waiting for $3 device to register**\n" >&2 - fi - return 1 -} - - -#unplug scsi disk by lun -unplug_scsi_by_lu() { # lu - local rc=0 - local unplug_lu=$1 - if [ -z "$unplug_lu" ] - then - return $rc - fi - disks=$(iscsiadm -m session -P 3 | grep Attached | grep running | awk '{print $4}') - for d in $disks - do - lu=$(scsi_id -g -s /block/$d) - if [ "$lu" == "$unplug_lu" ] - then - fsync /dev/$d > /dev/null 2>&1 - echo 1 >/sys/block/$d/device/delete - if [ $? -gt 0 ] - then - printf "*****Warning: fail to unplug iscsi disk $d\n" >&2 - else - printf "*****Info: succeed to unplug iscsi disk $d\n" >&2 - fi - fi - done -} - - -#unplug scsi disk -unplug_scsi_by_disk() { # disk sd* - local rc=0 - if [ "$1" == "" ] - then - return $rc - fi - echo 1 >/sys/block/$1/device/delete - if [ $? -gt 0 ] - then - printf "*****Warning: fail to unplug iscsi disk $1\n" >&2 - else - printf "*****Info: succeed to unplug iscsi disk $1\n" >&2 - fi -} - - - -# unmount a local directory and all data disks within -unmount_all() { - local rc=0 - local err=0 - local localdir=$1 - local vmname=$2 - local disks=$(ls -1 $DISKDIR/$vmname*) #/dev/sdb - for softlink in $disks - do - local disknum=$(ls -l $softlink | awk '{print $NF}' | awk -F"/" '{print $NF}') #sdb - printf " $disknum \n" >&2 - if [ -n "$softlink" ] - then - rm -f $softlink #delete soft link - rc=$? - if [ $rc -gt 0 ] - then - printf "*****Warning: failed to delete $softlink rc=$rc\n" >&2 - let err=err+1 - fi - fi - - lun=$(ls -l /dev/disk/by-path/ip* | grep -w $disknum | awk '{print $(NF-2)}' | grep -v part | cut -d: -f2- | cut -d- -f3-) - printf " $lun \n" >&2 - if [ -n "$lun" ] - then - pathids=$(ls -l /dev/disk/by-path/ip*$lun | awk -F"/" '{print $NF}') - printf " $pathids \n" >&2 - for pathid in $pathids - do - unplug_scsi_by_disk $pathid - let err=err+$? - done - fi - done - - #unmount the image filesystem from nfs - local errmsg=$(umount $localdir 2>&1) - rc=$? - if [ $rc -gt 0 ] - then - echo $errmsg | grep "not mounted" - if [ $? -eq 1 ] - then - printf "*****Warning: unmount failed rc=$rc\n" >&2 - let err=err+1 - fi - fi - rm -fr $localdir - - return $err -} - - -# unplug all unused scsi device under /dev/sd* -unplug_unused_scsi_by_sid() { # sid - local rc=0 - # clean LUN without disk map - local session=session$1 - local targets=$(ls /sys/class/iscsi_session/$session/device/ -1 | grep target) - if [ -z "$targets" ] - then - return 0 - fi - for target in $targets - do - local luns=$(ls /sys/class/iscsi_session/$session/device/$target/ | grep :) - if [ -z "$luns" ] - then - continue - fi - for lun in $luns - do - local disk=$(ls /sys/class/iscsi_session/$session/device/$target/$lun/ | grep "block:" | cut -d: -f2) - if [ -z "$disk" ] - then - echo 1 > /sys/class/iscsi_session/$session/device/$target/$lun/delete - if [ $? -gt 0 ] - then - printf "*****Warning: fail to delete lun $lun\n" >&2 - else - printf "*****Info: succeed to delete lun $lun\n" >&2 - fi - else - local lu=$(scsi_id -g -s /block/$disk) - if [ -z "$lu" ] - then - temp=$(ls -l /dev/disk/by-vm | grep "$disk$") - if [ -z "$temp" ] - then - unplug_scsi_by_disk $disk - fi - fi - fi - done - done - - return $err -} - -#set -x - -hflag= -rflag= -lflag= -uflag= -mflag= -nflag= -tflag= -dflag= -bflag= -tgtname= -swpname= -datatgtname= -bootloader='PyGrub' -DISKDIR="/dev/disk/by-vm" - -while getopts 'umxw:t:n:h:r:l:1:b:' OPTION -do - case $OPTION in - h) hflag=1 - iscsitgthost="$OPTARG" - ;; - r) rflag=1 - remotedir="$OPTARG" - ;; - t) tflag=1 - tgtname="$OPTARG" - ;; - w) wflag=1 - swpname="$OPTARG" - ;; - l) lflag=1 - localdir="$OPTARG" - ;; - 1) dflag=1 - datatgtname="$OPTARG" - ;; - n) nflag=1 - vmname="$OPTARG" - ;; - b) bflag=1 - bootloader="$OPTARG" - ;; - u) uflag=1 - ;; - m) mflag=1 - ;; - x) set -x - ;; - ?) usage - exit 2 - ;; - esac -done - -bootloader=$(echo $bootloader | tr '[A-Z]' '[a-z]') - -if [ "$hflag$rflag$lflag$nflag$tflag" != "11111" ] && [ "$uflag$lflag$nflag" != "111" ] -then - usage - exit 2 -fi - -if [ "$uflag$mflag" != "1" ] && [ "$uflag$mflag" != "" ] -then - printf "***Specify one of -u (unmount) or -m (mount)\n" >&2 - usage - exit 2 -fi - -if [ "$uflag" == "1" ] -then - unmount_all $localdir $vmname - rc=$? - exit $rc -fi - -#create the local dir if necessary -if ! mkdir -p $localdir -then - printf "***Unable to create local directory, exiting\n" >&2 - exit 2 -fi - -#create disk directory if needed -if [ ! -d $DISKDIR ] -then - mkdir $DISKDIR -fi - -#check if the iscsi target portal is up and running -if ! check_iscsi_server "$iscsitgthost" 4 -then - printf "***Unable to ping the iscsi target host $iscsitgthost, exiting\n" >&2 - exit 3 -fi - -if [ "$bootloader" == "external" ] -then - #mount the local dir (for kernel, ramdisk, etc) - mount -t nfs $iscsitgthost:$remotedir $localdir -o intr,rsize=32768,wsize=32768,hard - if [ $? -gt 0 ] - then - printf "***Failed to mount $remotedir at $localdir\n" >&2 - exit 4 - fi -fi - -do_iscsi_login $tgtname $iscsitgthost -rootsid=$? -if [ $rootsid -lt 0 ] -then - printf "***Failed to login to $tgtname at $iscsitgthost\n" >&2 - unmount_all $localdir $vmname - exit 5 -fi -sleep 1 - -swapsid= -if [ -n "$swpname" ] -then - do_iscsi_login $swpname $iscsitgthost - swapsid=$? - if [ $swapsid -lt 0 ] - then - printf "***Failed to login to $swapname at $iscsitgthost\n" >&2 - unmount_all $localdir $vmname - exit 6 - fi - sleep 1 -fi - -datasid= -if [ -n "$datatgtname" ] -then - do_iscsi_login $datatgtname $iscsitgthost - datasid=$? - if [ $datasid -lt 0 ] - then - printf "***Failed to login to $datatgtname at $iscsitgthost\n" >&2 - unmount_all $localdir $vmname - exit 7 - fi - sleep 1 -fi - -#figure out the device number and make a softlink -rootdev=$(get_device_links $rootsid $tgtname root) -if [ "$rootdev" == "" ] -then - printf "***Failed to get device links for $tgtname\n" >&2 - unmount_all $localdir $vmname - exit 8 -fi - -ln -s /dev/$rootdev $DISKDIR/$vmname-root -if [ $? -ne 0 ] -then - printf "***Failed to create softlink from /dev/$rootdev to $DISKDIR/$vmname-root\n" >&2 - exit 9 -fi - -printf "$DISKDIR/$vmname-root = $rootdev" - -swapdev= -if [ -n "$swpname" ] -then - swapdev=$(get_device_links $swapsid $swpname swap) - if [ "$swapdev" == "" ] - then - printf "***Failed to get device links for $swapname\n" >&2 - unmount_all $localdir $vmname - exit 9 - fi - ln -s /dev/$swapdev $DISKDIR/$vmname-swap - if [ $? -ne 0 ] - then - printf "***Failed to create softlink from /dev/$swapdev to $DISKDIR/$vmname-swap\n" >&2 - exit 10 - fi - printf "$DISKDIR/$vmname-swap = $swapdev" -fi - -datadev= -if [ -n "$datatgtname" ] -then - datadev=$(get_device_links $datasid $datatgtname data) - if [ "$datadev" == "" ] - then - printf "***Failed to get device links for $datatgtname\n" >&2 - unmount_all $localdir $vmname - exit 10 - fi - ln -s /dev/$datadev $DISKDIR/$vmname-datadisk-1 - if [ $? -ne 0 ] - then - printf "***Failed to create softlink from /dev/$datadev to $DISKDIR/$vmanme-datadisk-1\n" >&2 - exit 11 - fi - printf "$DISKDIR/$vmname-datadisk-1 = $datadev" -fi - -exit 0 diff --git a/scripts/vm/storage/iscsi/get_iqn.sh b/scripts/vm/storage/iscsi/get_iqn.sh deleted file mode 100755 index b54253315ea..00000000000 --- a/scripts/vm/storage/iscsi/get_iqn.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash -# $Id: get_iqn.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/get_iqn.sh $ -# get_iqn.sh -- return iSCSI iqn of initiator (Linux) or target (OpenSolaris) - -usage() { - printf "Usage: %s \n" $(basename $0) >&2 -} - -linux() { - uname -a | grep "Linux" > /dev/null - return $? -} - -opensolaris() { - uname -a | grep "SunOS" > /dev/null - return $? -} - -hosted() { - uname -a | grep "101b" > /dev/null - return $? -} - -if [ $# -ne 0 ] -then - usage - exit 1 -fi - -if linux -then - initiator_iqn=$(cat /etc/iscsi/initiatorname.iscsi | cut -d'=' -f2) - printf "%s\n" $initiator_iqn - exit 0 -fi - -if opensolaris && hosted -then - printf "unique_iqn_per_zvol\n" - exit 0 -fi - -if opensolaris -then - tgt_iqn=$(itadm list-target | tail -1 | awk '{print $1}') - printf "%s\n" $tgt_iqn - exit 0 -fi - -printf "Unexpected operating system!\n" >&2 -exit 2 \ No newline at end of file diff --git a/scripts/vm/storage/iscsi/iscsi_common.sh b/scripts/vm/storage/iscsi/iscsi_common.sh deleted file mode 100755 index 667158a0cd1..00000000000 --- a/scripts/vm/storage/iscsi/iscsi_common.sh +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/bin/env bash -# $Id: iscsi_common.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/iscsi_common.sh $ -# iscsi_common.sh -- mount volume from ISCSI server -# -# - -# check if server is up and running -check_iscsi_server() { - local pings=1 - while ! ping -c 1 -n -q $1 > /dev/null && [ $pings -ne $2 ] - do - let pings=pings+1 - done - - printf "##check_iscsi_server: number of pings=$pings\n" - [ $pings -eq $2 ] && return 1 - return 0; -} - -do_iscsi_login () { - local rc=0 - #create a record in the client database - iscsiadm -m node -T $1 -p $2 -o new - rc=$? - if [ $rc -gt 0 ] - then - printf "Failed to create ISCSI initiator record for target rc=$rc\n" >&2 - return 6 - fi - # do not autologin upon restart - iscsiadm -m node -T $1 -p $2 -o update -n node.startup -v manual - - #login to the target - iscsiadm -m node -T $1 -p $2 -l - rc=$? - if [ $rc -gt 0 ] - then - printf "Failed to login to target, rc=$rc\n" >&2 - return 7 - fi -} - - -get_device_links() { - local n=20 - local dev= - local host=$1 - local iqn=$2 - local disktype=$3 - while [ -z "$dev" -a $n -gt 0 ] - do - sleep 3; - let n=n-1; - dev=$(ls -l /dev/disk/by-path/ip-$host*$iqn*| awk '{print $NF}' | awk -F"/" '{print $NF}' | head -1) - done - - if [ $n -eq 0 ] - then - printf "****Timed out waiting for $disktype device to register**\n" - fi - printf "$dev\n" -} - -do_iscsi_logout() { - local rc=0 - if [ "$1" == "" ] - then - return $rc - fi - iscsiadm -m node -T $1 -u #logout - rc=$? - if [ $rc -gt 0 ] - then - printf "*****Warning: failed to logout of $1 rc=$rc\n" - fi - iscsiadm -m node -T $1 -o delete #delete record from db - if [ $? -gt 0 ] - then - printf "*****Warning: failed to delete iscsi record $1 rc=$rc\n" - fi - return $rc -} - -# unmount a local directory and all data disks within -unmount_all() { - local rc=0 - local err=0 - local localdir=$1 - local vmname=$2 - local disks=$(ls -l $DISKDIR | grep $vmname | awk '{print $NF}') #/dev/sdb - for d in $disks ; - do - disknum=$(echo $d | awk -F"/" '{print $NF}') #sdb - tgt=$(ls -l /dev/disk/by-path | grep -w $disknum | awk '{print $(NF-2)}' | grep -v part | cut -d: -f2- | cut -d- -f3-) - softlink=$(ls -l $DISKDIR |grep $vmname| grep $d | awk '{print $(NF-2)}') #vmname-root or vmname-swap or vmname-data - rm $DISKDIR/$softlink #delete soft link - rc=$? - if [ $rc -gt 0 ] - then - printf "*****Warning: failed to delete $DISKDIR/$softlink rc=$rc\n" - let err=err+1 - fi - do_iscsi_logout $tgt - let err=err+$? - done - - #unmount the image filesystem from nfs - local errmsg=$(umount $localdir 2>&1) - rc=$? - if [ $rc -gt 0 ] - then - echo $errmsg | grep "not mounted" - if [ $? -eq 1 ] - then - printf "*****Warning: unmount failed rc=$rc\n" - let err=err+1 - fi - fi - rm -fr $localdir - - return $err -} - -#find the block device for a particular vm disk -get_blkdev() { - local vmname=$1 - local disktype=$2 - local disk=$(ls -l $DISKDIR | grep $vmname-$disktype | awk '{print $NF}') #/dev/sdb - echo $disk -} - -# unmount an iscsi disk -unmount_disk() { - local rc=0 - local err=0 - local vmname=$1 - local disktype=$2 - local disks=$(ls -l $DISKDIR | grep $vmname | grep $disktype | awk '{print $NF}') #/dev/sdb - for d in $disks ; - do - local disknum=$(echo $d | awk -F"/" '{print $NF}') #sdb - local tgt=$(ls -l /dev/disk/by-path | grep -w $disknum | awk '{print $(NF-2)}' | grep -v part | cut -d: -f2- | cut -d- -f3-) - local softlink=$(ls -l $DISKDIR |grep $vmname| grep $d | awk '{print $(NF-2)}') #vmname-root or vmname-swap or vmname-data - rm $DISKDIR/$softlink #delete soft link - rc=$? - if [ $rc -gt 0 ] - then - printf "*****Warning: failed to delete $DISKDIR/$softlink rc=$rc\n" - let err=err+1 - fi - do_iscsi_logout $tgt - let err=err+$? - done - return $err -} - -DISKDIR="/dev/disk/by-vm/" diff --git a/scripts/vm/storage/iscsi/iscsikill.sh b/scripts/vm/storage/iscsi/iscsikill.sh deleted file mode 100755 index d4dbb34ae2a..00000000000 --- a/scripts/vm/storage/iscsi/iscsikill.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env bash -# $Id: iscsikill.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/iscsikill.sh $ -# -# iscsikill.sh -# -# kill all vms with disk to a iscsi connection and log out of the iscsi connection. -# - -usage() { - printf "Usage: %s: -r -t -p \n" $(basename $0) >&2 -} - -#set -x - -rflag= -tflag= -pflag=0 - -while getopts 'r:t:p:' OPTION -do - case $OPTION in - r) rflag=1 - sessionid="$OPTARG" - ;; - t) tflag=1 - target="$OPTARG" - ;; - p) pflag=1 - portal="$OPTARG" - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$rflag$tflag$pflag" != "111" ] -then - usage - exit 2 -fi - -state=`iscsiadm -m session -r $sessionid -P 3 | grep "iSCSI Session State:" | awk '{print $NF}'` -if [ $state == "FREE" -o $state == "FAILED" ] -then - for disk in `iscsiadm -m session -r $sessionid -P 3 | grep "Attached scsi disk" | awk '{print "/dev/"$4}'` - do - vmname=`ls -l /dev/disk/by-vm | grep $disk | grep -v datadisk | awk '{print $9}'` - if [ "$vmname" != "" ] - then - vmname=${vmname%-*} - echo "Shutting down vm: $vmname" - xm shutdown $vmname > /dev/null 2>&1 - if [ $? -eq 0 ] - then - echo "Deleting vm: $vmname" - xm delete $vmname > /dev/null 2>&1 - if [ $? -eq 0 ] - then - echo "Deleted vm: $vmname" - else - echo "Failed to delete vm: $vmname" - fi - else - echo "Failed to shutdown vm: $vmname" - fi - fi - done - - iscsiadm -m session -r $sessionid -u - iscsiadm -m node -T $target -p $portal -o delete -else - echo "session is no longer in FREE or FAILED state" -fi - - diff --git a/scripts/vm/storage/iscsi/iscsimon.sh b/scripts/vm/storage/iscsi/iscsimon.sh deleted file mode 100755 index 9dac2395558..00000000000 --- a/scripts/vm/storage/iscsi/iscsimon.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -# $Id: iscsimon.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/iscsimon.sh $ -# -# iscsimon.sh -# -# Monitor iscsi connections for failures, and stop vm's if necessary -# - -err=0 -for sid in `iscsiadm -m session | awk '{print $2}' | tr -d '[]'` -do - state=`iscsiadm -m session -r $sid -P 1 | grep "iSCSI Session State:" | awk '{print $NF}'` - if [ $state == "FREE" -o $state == "FAILED" ] - then - echo "DOWN" $sid `iscsiadm -m session -r $sid -P 1 | grep Target | awk '{print $2}'` `iscsiadm -m session -r $sid -P 1 | grep "Current Portal" | awk '{print $3}'` - err=1 - fi -done - -if [ $err -eq 0 ] -then - echo "OK" -fi diff --git a/scripts/vm/storage/iscsi/mapiscsi.sh b/scripts/vm/storage/iscsi/mapiscsi.sh deleted file mode 100755 index 536c068d996..00000000000 --- a/scripts/vm/storage/iscsi/mapiscsi.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -# $Id: mapiscsi.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/mapiscsi.sh $ -# mapiscsi.sh -- list of active iscsi sessions and the corresponding VM -# - -usage() { - printf "Usage: %s: \n" $(basename $0) >&2 -} - -#set -x -for i in $(iscsiadm -m session 2> /dev/null | awk '{print $4}') -do - ls -l /dev/disk/by-path/*$i* > /dev/null 2>&1 - if [ $? -eq 0 ]; then - disknum=$(ls -l /dev/disk/by-path/*$i*| grep -v part | awk '{print $NF}' | awk -F"/" '{print $NF}'); # sdb etc - vm=$(ls -l /dev/disk/by-vm | grep $disknum | awk '{print $(NF-2)}') - lasttoken=$(echo $vm | awk -F"-" '{print $NF}') - case "$lasttoken" in - "root");; - "swap");; - [0-9]) ;; - *) vm=${vm%-*} #strip the ip address of storage host;; - esac - - if [[ $vm =~ ^.*datadisk.*$ ]]; then vm=${vm%-*}; fi - fi - echo $i $vm -done diff --git a/scripts/vm/storage/iscsi/mirror.sh b/scripts/vm/storage/iscsi/mirror.sh deleted file mode 100755 index 33f29a0f6a0..00000000000 --- a/scripts/vm/storage/iscsi/mirror.sh +++ /dev/null @@ -1,259 +0,0 @@ -#!/usr/bin/env bash -# $Id: mirror.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/mirror.sh $ -# mirror.sh -- modify a mirrored disk -# -# - -dir=$(dirname $0) -. $dir/iscsi_common.sh -. $dir/mirror_common.sh - -usage() { - printf "Usage: %s: -m -h -t -w -n \n" $(basename $0) >&2 - printf "Usage: %s: -m -h -d -c -n \n" $(basename $0) >&2 - printf "Usage: %s: -u -h -T -W -n \n" $(basename $0) >&2 - printf "Usage: %s: -u -h -D -c -n \n" $(basename $0) >&2 - exit 2 -} - -login() { - local vmname=$1 - local iqn=$2 - local host=$3 - do_iscsi_login $iqn $host - if [ $? -gt 0 ] - then - printf "***Failed to login to $iqn at $host\n" >&2 - return 5 - fi -} - -make_links() { - local vmname=$1 - local host=$2 - local iqn=$3 - local disktype=$4 - blkdev=$(get_device_links $host $iqn $disktype) - if [ "$blkdev" == "" ] - then - printf "***Failed to get device links for $iqn $vmname $disktype\n" >&2 - return 8 - fi - echo "/dev/$blkdev" - ln -s /dev/$blkdev $DISKDIR/$vmname-$disktype-$host - return $? -} - -login_and_add_to_mirror() { - local vmname=$1 - local iqn=$2 - local host=$3 - local disktype=$4 - - part_of_mirror $vmname $disktype $iqn - if [ $? -eq 0 ] - then - return 0 - fi - - login $vmname $iqn $host - if [ $? -gt 0 ] - then - printf "Failed ISCSI login: $disktype disk for $vmname on $host\n" >&2 - return 5 - fi - blkdev=$(make_links $vmname $host $iqn $disktype) - if [ $? -gt 0 ] - then - unmount_disk $vmname $disktype-$host - printf "Failed to get block dev for $disktype disk on $host\n" >&2 - return 5 - fi - add_disk_to_mirror $vmname $disktype $blkdev - if [ $? -gt 0 ] - then - unmount_disk $vmname $disktype-$host - printf "Failed to add $disktype disk on $host to mirror for $vmname\n" >&2 - return 6 - fi - echo $blkdev -} - -validate_flags() { - if [ "$mflag" == "1" ] - then - if [ "$hflag$nflag" != "11" ] && [ "$Dflag$Tflag$Wflag" != "1" ] - then - usage - fi - if [ "$dflag$cflag" != "11" ] && [ "$tflag" != "1" ] - then - usage - fi - fi - - if [ "$uflag" == "1" ] - then - if [ "$uflag$hflag" != "11" ] - then - usage - fi - - if [ "$uflag$Tflag" != "11" ] && [ "$uflag$Dflag$cflag" != "111" ] - then - usage - fi - fi - - if [ "$uflag$mflag" != "1" ] || [ "$uflag$mflag" == "" ] - then - printf "***Specify one of -u (unmount) or -m (mount)\n" >&2 - usage - fi -} - - -hflag= -uflag= -mflag= -nflag= -cflag= -tflag= -Dflag= -Tflag= -Wflag= -rootname= -swpname= -dataname= -disknum= -datadisk= - -#set -x - - -while getopts 'umw:t:n:h:d:c:TWD' OPTION -do - case $OPTION in - h) hflag=1 - tgthost="$OPTARG" - ;; - t) tflag=1 - rootname="$OPTARG" - ;; - T) Tflag=1 - ;; - w) wflag=1 - swpname="$OPTARG" - ;; - W) Wflag=1 - ;; - d) dflag=1 - dataname="$OPTARG" - ;; - c) cflag=1 - disknum="$OPTARG" - datadisk=datadisk-$disknum - ;; - D) Dflag=1 - ;; - n) nflag=1 - vmname="$OPTARG" - ;; - u) uflag=1 - ;; - m) mflag=1 - ;; - ?) usage - exit 2 - ;; - esac -done - -validate_flags - -#create disk directory if needed -if [ ! -d $DISKDIR ]; -then - mkdir $DISKDIR -fi - -if [ "$uflag" == "1" ] #unmount -then - if [ "$Tflag" == "1" ] #root disk - then - disk=$(get_blkdev $vmname root-$tgthost) - remove_disk_from_mirror $vmname root $disk - rc=$? - if [ $rc -eq 0 ] - then - unmount_disk $vmname root-$tgthost - rc=$? - fi - fi - if [ "$Wflag" == "1" ] #swap disk - then - disk=$(get_blkdev $vmname swap-$tgthost) - remove_disk_from_mirror $vmname swap $disk - rc=$? - if [ $rc -eq 0 ] - then - unmount_disk $vmname swap-$tgthost - rc=$? - fi - fi - if [ "$Dflag" == "1" ] #data disk - then - disk=$(get_blkdev $vmname $datadisk-$tgthost) - remove_disk_from_mirror $vmname $datadisk $disk - rc=$? - if [ $rc -eq 0 ] - then - unmount_disk $vmname $datadisk-$tgthost - rc=$? - fi - fi - exit $rc -fi - -# rest of the script deals with mounting and adding a disk - -#check if the iscsi target portal is up and running -if ! check_iscsi_server "$tgthost" 4 -then - printf "***Unable to ping the iscsi target host $tgthost, exiting\n" >&2 - exit 3 -fi - -if [ -n "$rootname" ] -then - rootdev=$(login_and_add_to_mirror $vmname $rootname $tgthost root) - if [ $? -gt 0 ] - then - exit 5 - fi - if [ -n "$swpname" ] - then - swapdev=$(login_and_add_to_mirror $vmname $swpname $tgthost swap) - if [ $? -gt 0 ] - then - # undo the root disk configuration - remove_disk_from_mirror $vmname root $rootdev - unmount_disk $vmname root-$tgthost - unmount_disk $vmname swap-$tgthost - exit 5 - fi - fi - exit 0 -fi - - -if [ -n "$dataname" ] -then - datadev=$(login_and_add_to_mirror $vmname $dataname $tgthost $datadisk) - if [ $? -gt 0 ] - then - exit 5 - fi -fi - -exit 0 diff --git a/scripts/vm/storage/iscsi/mirror_common.sh b/scripts/vm/storage/iscsi/mirror_common.sh deleted file mode 100755 index 37245d27fb1..00000000000 --- a/scripts/vm/storage/iscsi/mirror_common.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env bash -# $Id: mirror_common.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/mirror_common.sh $ -# mirror_common.sh -- md operations -# -# -export MDADM_NO_UDEV=1 -# build a mirror of 2 disks -# $1 = vm name -# $2 = disk type (root/swap/data) -# $3 = block device #1 (/dev/sdX) -# $4 = block device #2 (/dev/sdX) -build_mirror() { - local vmname=$1 - local disktype=$2 - local bd1=$3 - local bd2=$4 - mkdir -p /var/md - mkdir -p /dev/md - mdadm --build /dev/md/$vmname-$disktype --level=mirror --raid-devices=2 $bd1 $bd2 --assume-clean -b /var/md/$vmname-$disktype - return $? -} - -# stop a mirror of 2 disks -# $1 = vm name -# $2 = disk type (root/swap/data) -stop_mirror () { - local vmname=$1 - local disktype=$2 - mdadm --stop /dev/md/$vmname-$disktype - rm -f /var/md/$vmname-$disktype - rm -f /dev/md/$vmname-$disktype - return $? -} - - -# remove one disk of a mirrored pair -# $1 = vm name -# $2 = disk type (root/swap/data) -# $3 = block device to remove -remove_disk_from_mirror() { - local vmname=$1 - local disktype=$2 - local bd=$3 - mdadm /dev/md/$vmname-$disktype --fail $bd - local rc=$? - local i=0 - while [ $rc -gt 0 -a $i -lt 5 ] #sometimes get device busy - do - sleep 2; - mdadm /dev/md/$vmname-$disktype --fail $bd - rc=$? - let i=i+1 - done - i=0 - mdadm /dev/md/$vmname-$disktype --remove $bd - rc=$? - while [ $rc -gt 0 -a $i -lt 5 ] #sometimes get device busy - do - sleep 2; - mdadm /dev/md/$vmname-$disktype --remove $bd - rc=$? - let i=i+1 - done - return $? -} - -# add one disk to a mirrored set -# $1 = vm name -# $2 = disk type (root/swap/data) -# $3 = block device to add -add_disk_to_mirror() { - local vmname=$1 - local disktype=$2 - local bd=$3 - mdadm /dev/md/$vmname-$disktype --add $bd - return $? -} - -# is iscsi disk part of the mirror already? -# $1 = vm name -# $2 = disk type (root/swap/data) -# $3 = iqn of the iscsi disk -part_of_mirror() { - local vmname=$1 - local disktype=$2 - local iqn=$3 - local mdisks=$(mdadm --detail /dev/md/$vmname-$disktype | grep "/dev/sd" | awk '{print $NF}') - local idisk=$(ls -al /dev/disk/by-path/ | grep -v part | grep $iqn | awk '{print $NF}' ) - idisk=${idisk##*/} #strip everything till last slash - for md in $mdisks - do - md=${md##*/} - if [ "$md" == "$idisk" ] - then - return 0 - fi - done - return 1 -} - - diff --git a/scripts/vm/storage/iscsi/mountdatadisk.sh b/scripts/vm/storage/iscsi/mountdatadisk.sh deleted file mode 100755 index 968b3a1f261..00000000000 --- a/scripts/vm/storage/iscsi/mountdatadisk.sh +++ /dev/null @@ -1,181 +0,0 @@ -#!/usr/bin/env bash -# $Id: mountdatadisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/mountdatadisk.sh $ -# mountdatadisk.sh -- mount/unmount data disk from ISCSI server -# -# - -dir=$(dirname $0) -. $dir/iscsi_common.sh -. $dir/mirror_common.sh - -usage() { - printf "Usage: %s: [-u | -m ] -h -d -c <0-9> -n \n" $(basename $0) >&2 - exit 2 -} - -login() { - local vmname=$1 - local iqn=$2 - local host=$3 - do_iscsi_login $iqn $host - if [ $? -gt 0 ] - then - printf "***Failed to login to $iqn at $host\n" >&2 - return 5 - fi -} - -make_links() { - local vmname=$1 - local host=$2 - local iqn=$3 - local disktype=$4 - - blkdev=$(get_device_links $host $iqn $disktype) - if [ "$blkdev" == "" ] - then - printf "***Failed to get device links for $iqn $vmname $disktype\n" >&2 - unmount_disk $vmname $disktype - return 8 - fi - echo "/dev/$blkdev" - ln -s /dev/$blkdev $DISKDIR/$vmname-$disktype-$host - return $? -} - -#set -x - -hflag= -rflag= -lflag= -uflag= -mflag= -nflag= -tflag= -dflag= -cflag= -Hflag= -Dflag= -Mflag= -tgtname= -tgthost1= -swpname= -datatgt0= -disknum= -datadisk= -datatgt1= -DISKDIR="/dev/disk/by-vm/" - -while getopts 'umn:h:d:c:MH:D:' OPTION -do - case $OPTION in - h) hflag=1 - tgthost0="$OPTARG" - ;; - H) Hflag=1 - tgthost1="$OPTARG" - ;; - d) dflag=1 - datatgt0="$OPTARG" - ;; - D) Dflag=1 - datatgt1="$OPTARG" - ;; - n) nflag=1 - vmname="$OPTARG" - ;; - c) cflag=1 - disknum="$OPTARG" - datadisk=datadisk-$disknum - ;; - u) uflag=1 - ;; - m) mflag=1 - ;; - M) Mflag=1 - ;; - ?) usage - ;; - esac -done - -if [ "$hflag$nflag$cflag" != "111" ] && [ "$uflag$nflag$cflag" != "111" ] -then - usage -fi - -if [ "$uflag$mflag" != "1" ] -then - printf "***Specify one of -u (unmount) or -m (mount)\n" >&2 - usage -fi - -if [ "$uflag" == "1" ] -then - if [ "$uflag$Mflag" == "1" ] - then - unmount_disk $vmname $datadisk - exit $? - elif [ "$uflag$Mflag" == "11" ] - then - stop_mirror $vmname $datadisk - unmount_disk $vmname $datadisk - exit $? - fi -fi - -#create disk directory if needed -if [ ! -d $DISKDIR ]; -then - mkdir $DISKDIR -fi - -#check if the iscsi target portal is up and running -if ! check_iscsi_server "$tgthost0" 4 -then - printf "***Unable to ping the iscsi target host $tgthost0, exiting\n" >&2 - exit 3 -fi - -login $vmname $datatgt0 $tgthost0 - -if [ $? -gt 0 ] -then - exit 5 -fi - -#figure out the device number and make a softlink -datadev0=$(make_links $vmname $tgthost0 $datatgt0 $datadisk ) - -if [ $? -gt 0 ] -then - exit 6 -fi - -login $vmname $datatgt1 $tgthost1 - -if [ $? -gt 0 ] -then - unmount_disk $vmname $datadisk - exit 5 -fi - -datadev1=$(make_links $vmname $tgthost1 $datatgt1 $datadisk ) - -if [ $? -gt 0 ] -then - unmount_disk $vmname $datadisk - exit 6 -fi - -if [ "$Mflag" == "1" ] -then - build_mirror $vmname $datadisk $datadev0 $datadev1 - if [ $? -gt 0 ] - then - unmount_disk $vmname $datadisk - exit 7 - fi -fi - -exit 0 diff --git a/scripts/vm/storage/iscsi/mountrootdisk.sh b/scripts/vm/storage/iscsi/mountrootdisk.sh deleted file mode 100755 index 0255b7d692c..00000000000 --- a/scripts/vm/storage/iscsi/mountrootdisk.sh +++ /dev/null @@ -1,235 +0,0 @@ -#!/usr/bin/env bash -# $Id: mountrootdisk.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/mountrootdisk.sh $ -# mountrootdisk.sh -- mount image directory from NFS and ISCSI server -# -# - -dir=$(dirname $0) -. $dir/iscsi_common.sh -. $dir/mirror_common.sh - -usage() { - printf "Usage: %s: [-u | -m ] -h -r -t -w -l -n -b [-M -H -T -W ]\n" $(basename $0) >&2 - exit 2 -} - -login() { - local vmname=$1 - local iqn=$2 - local host=$3 - local localdir=$4 - do_iscsi_login $iqn $host - if [ $? -gt 0 ] - then - printf "***Failed to login to $iqn at $host\n" >&2 - unmount_all $localdir $vmname - exit 5 - fi -} - -make_links() { - local vmname=$1 - local host=$2 - local iqn=$3 - local disktype=$4 - local localdir=$5 - blkdev=$(get_device_links $host $iqn $disktype) - if [ "$blkdev" == "" ] - then - printf "***Failed to get device links for $iqn $vmname $disktype\n" >&2 - unmount_all $localdir $vmname - exit 8 - fi - echo "/dev/$blkdev" - ln -s /dev/$blkdev $DISKDIR/$vmname-$disktype-$host - return $? -} - -#set -x - -hflag= -rflag= -lflag= -uflag= -mflag= -nflag= -tflag= -bflag= -Mflag= -Tflag= -Wflag= -rootname= -swpname= -rootmirror= -swpmirror= -tgthost= -tgtmirror= -bootloader="PyGrub" - -while getopts 'umxw:t:n:h:H:r:l:T:W:Mb:' OPTION -do - case $OPTION in - h) hflag=1 - tgthost="$OPTARG" - ;; - H) Hflag=1 - tgtmirror="$OPTARG" - ;; - r) rflag=1 - remotedir="$OPTARG" - ;; - t) tflag=1 - rootname="$OPTARG" - ;; - T) Tflag=1 - rootmirror="$OPTARG" - ;; - b) bflag=1 - bootloader="$OPTARG" - ;; - w) wflag=1 - swpname="$OPTARG" - ;; - W) Wflag=1 - swpmirror="$OPTARG" - ;; - l) lflag=1 - localdir="$OPTARG" - ;; - n) nflag=1 - vmname="$OPTARG" - ;; - u) uflag=1 - ;; - m) mflag=1 - ;; - M) Mflag=1 - ;; - x) set -x - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$hflag$rflag$lflag$nflag$tflag" != "11111" ] && [ "$uflag$lflag$nflag" != "111" ] -then - usage -fi - -if [ "$uflag$mflag" != "1" ] -then - printf "***Specify one of -u (unmount) or -m (mount)\n" >&2 - usage -fi - - -if [ "$uflag" == "1" ] -then - if [ "$Mflag$uflag" == "1" ] - then - unmount_all $localdir $vmname - rc=$? - exit $rc - elif [ "$Mflag$uflag" == "11" ] - then - stop_mirror $vmname root - rc=$? - stop_mirror $vmname swap - unmount_all $localdir $vmname - rc=$? - exit $rc - fi -fi - - -#create the local dir if necessary -if ! mkdir -p $localdir -then - printf "***Unable to create local directory, exiting\n" >&2 -fi - -#create disk directory if needed -if [ ! -d $DISKDIR ]; -then - mkdir $DISKDIR -fi - -#check if the iscsi target portal is up and running -if ! check_iscsi_server "$tgthost" 4 -then - printf "***Unable to ping the iscsi target host $tgthost, exiting\n" >&2 - exit 3 -fi - -if [ "$Mflag" == 1 ] -then - if ! check_iscsi_server "$tgtmirror" 4 - then - printf "***Unable to ping the iscsi target host $tgtmirror, exiting\n" >&2 - exit 3 - fi -fi - -bootloader=$(echo $bootloader | tr [A-Z] [a-z]) -if [ "$bootloader" == "external" ] -then - #mount the local dir (for kernel, ramdisk, etc) - mount -t nfs $tgthost:$remotedir $localdir -o intr,rsize=32768,wsize=32768,hard - if [ $? -gt 0 ] - then - printf "***Failed to mount $remotedir at $localdir\n" >&2 - exit 5 - fi -fi - -login $vmname $rootname $tgthost $localdir -sleep 1 - -if [ -n "$swpname" ] -then - login $vmname $swpname $tgthost $localdir - sleep 1 -fi - -if [ -n "$rootmirror" ] -then - login $vmname $rootmirror $tgtmirror $localdir - sleep 1 -fi - -if [ -n "$swpmirror" ] -then - login $vmname $swpmirror $tgtmirror $localdir - sleep 1 -fi - -#figure out the device number and make a softlink -root0dev=$(make_links $vmname $tgthost $rootname root $localdir) - -if [ -n "$swpname" ] -then - swap0dev=$(make_links $vmname $tgthost $swpname swap $localdir) -fi - -if [ -n "$rootmirror" ] -then - root1dev=$(make_links $vmname $tgtmirror $rootmirror root $localdir) -fi - -if [ -n "$swpmirror" ] -then - swap1dev=$(make_links $vmname $tgtmirror $swpmirror swap $localdir) -fi - -if [ "$Mflag" == "1" ] -then - build_mirror $vmname root $root0dev $root1dev - if [ "$swap0dev" ] - then - build_mirror $vmname swap $swap0dev $swap1dev - fi -fi - -exit 0 diff --git a/scripts/vm/storage/iscsi/mountvm.sh b/scripts/vm/storage/iscsi/mountvm.sh deleted file mode 100755 index 8e7c1b1ab18..00000000000 --- a/scripts/vm/storage/iscsi/mountvm.sh +++ /dev/null @@ -1,302 +0,0 @@ -#!/usr/bin/env bash -# $Id: mountvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/iscsi/mountvm.sh $ -# mountvm.sh -- mount image directory from NFS and ISCSI server -# -# - -usage() { - printf "Usage: %s: [-u | -m ] -h -r -t -w -1 -l -n \n" $(basename $0) >&2 -} - -# check if server is up and running -check_iscsi_server() { - local pings=1 - while ! ping -c 1 -n -q $1 > /dev/null && [ $pings -ne $2 ] - do - let pings=pings+1 - done - - printf "##check_iscsi_server: number of pings=$pings\n" - [ $pings -eq $2 ] && return 1 - return 0; -} - -do_iscsi_login () { - local rc=0 - #create a record in the client database - iscsiadm -m node -T $1 -p $2 -o new - rc=$? - if [ $rc -gt 0 ] - then - printf "Failed to create ISCSI initiator record for target rc=$rc\n" >&2 - return 6 - fi - # do not autologin upon restart - iscsiadm -m node -T $1 -p $2 -o update -n node.startup -v manual - - #login to the target - iscsiadm -m node -T $1 -p $2 -l - rc=$? - if [ $rc -gt 0 ] - then - printf "Failed to login to target, rc=$rc\n" >&2 - return 7 - fi -} - - -get_device_links() { - local n=20 - local dev= - while [ -z "$dev" -a $n -gt 0 ] - do - sleep 3; - let n=n-1; - dev=$(ls -l /dev/disk/by-path/ip-$1*$2*| awk '{print $NF}' | awk -F"/" '{print $NF}' | head -1) - done - - if [ $n -eq 0 ] - then - printf "****Timed out waiting for $3 device to register**\n" - fi - printf "$dev\n" -} - -do_iscsi_logout() { - local rc=0 - if [ "$1" == "" ] - then - return $rc - fi - iscsiadm -m node -T $1 -u #logout - rc=$? - if [ $rc -gt 0 ] - then - printf "*****Warning: failed to logout of $1 rc=$rc\n" - fi - iscsiadm -m node -T $1 -o delete #delete record from db - if [ $? -gt 0 ] - then - printf "*****Warning: failed to delete iscsi record $1 rc=$rc\n" - fi - return $rc -} - -# unmount a local directory and all data disks within -unmount_all() { - local rc=0 - local err=0 - local localdir=$1 - local vmname=$2 - local disks=$(ls -l $DISKDIR | grep $vmname | awk '{print $NF}') #/dev/sdb - for d in $disks ; - do - disknum=$(echo $d | awk -F"/" '{print $NF}') #sdb - tgt=$(ls -l /dev/disk/by-path | grep -w $disknum | awk '{print $(NF-2)}' | grep -v part | cut -d: -f2- | cut -d- -f3-) - softlink=$(ls -l $DISKDIR |grep $vmname| grep $d | awk '{print $(NF-2)}') #vmname-root or vmname-swap or vmname-data - rm $DISKDIR/$softlink #delete soft link - rc=$? - if [ $rc -gt 0 ] - then - printf "*****Warning: failed to delete $DISKDIR/$softlink rc=$rc\n" - let err=err+1 - fi - do_iscsi_logout $tgt - let err=err+$? - done - - #unmount the image filesystem from nfs - umount $localdir >&2 #ignore errors - rc=$? - if [ $rc -gt 0 ] - then - printf "*****Warning: unmount failed rc=$rc\n" - let err=err+1 - fi - rm -fr $localdir - - return $err -} - -#set -x - -hflag= -rflag= -lflag= -uflag= -mflag= -nflag= -tflag= -dflag= -tgtname= -swpname= -datatgtname= -DISKDIR="/dev/disk/by-vm/" - -while getopts 'umxw:t:n:h:r:l:1:' OPTION -do - case $OPTION in - h) hflag=1 - iscsitgthost="$OPTARG" - ;; - r) rflag=1 - remotedir="$OPTARG" - ;; - t) tflag=1 - tgtname="$OPTARG" - ;; - w) wflag=1 - swpname="$OPTARG" - ;; - l) lflag=1 - localdir="$OPTARG" - ;; - 1) dflag=1 - datatgtname="$OPTARG" - ;; - n) nflag=1 - vmname="$OPTARG" - ;; - u) uflag=1 - ;; - m) mflag=1 - ;; - x) set -x - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$hflag$rflag$lflag$nflag$tflag" != "11111" ] && [ "$uflag$lflag$nflag" != "111" ] -then - usage - exit 2 -fi - -if [ "$uflag$mflag" != "1" ] && [ "$uflag$mflag" != "" ] -then - printf "***Specify one of -u (unmount) or -m (mount)\n" >&2 - usage - exit 2 -fi - -if [ "$uflag" == "1" ] -then - unmount_all $localdir $vmname - rc=$? - do_iscsi_logout $tgtname #ignore error, tgtname could be null - do_iscsi_logout $swpname - do_iscsi_logout $datatgtname - exit $rc -fi - - -#create the local dir if necessary -if ! mkdir -p $localdir -then - printf "***Unable to create local directory, exiting\n" >&2 - exit 2 -fi - -#create disk directory if needed -if [ ! -d $DISKDIR ]; -then - mkdir $DISKDIR -fi - -#check if the iscsi target portal is up and running -if ! check_iscsi_server "$iscsitgthost" 4 -then - printf "***Unable to ping the iscsi target host $iscsitgthost, exiting\n" >&2 - exit 3 -fi - -#mount the local dir (for kernel, ramdisk, etc) -mount -t nfs $iscsitgthost:$remotedir $localdir -o intr,rsize=32768,wsize=32768,hard -if [ $? -gt 0 ] -then - printf "***Failed to mount $remotedir at $localdir\n" >&2 - exit 5 -fi - -do_iscsi_login $tgtname $iscsitgthost -if [ $? -gt 0 ] -then - printf "***Failed to login to $tgtname at $iscsitgthost\n" >&2 - unmount_all $localdir $vmname - exit 5 -fi -sleep 1 - -if [ -n "$swpname" ] -then - do_iscsi_login $swpname $iscsitgthost - if [ $? -gt 0 ] - then - printf "***Failed to login to $swapname at $iscsitgthost\n" >&2 - unmount_all $localdir $vmname - exit 6 - fi - sleep 1 -fi - -if [ -n "$datatgtname" ] -then - do_iscsi_login $datatgtname $iscsitgthost - if [ $? -gt 0 ] - then - printf "***Failed to login to $datatgtname at $iscsitgthost\n" >&2 - unmount_all $localdir $vmname - exit 7 - fi - sleep 1 -fi - -#figure out the device number and make a softlink -rootdev=$(get_device_links $iscsitgthost $tgtname root) -if [ "$rootdev" == "" ] -then - printf "***Failed to get device links for $tgtname\n" >&2 - unmount_all $localdir $vmname - exit 8 -fi - -ln -s /dev/$rootdev $DISKDIR/$vmname-root - -swapdev= -if [ -n "$swpname" ] -then - swapdev=$(get_device_links $iscsitgthost $swpname swap) - if [ "$swapdev" == "" ] - then - printf "***Failed to get device links for $swapname\n" >&2 - unmount_all $localdir $vmname - exit 9 - fi - ln -s /dev/$swapdev $DISKDIR/$vmname-swap -fi - -datadev= -if [ -n "$datatgtname" ] -then - datadev=$(get_device_links $iscsitgthost $datatgtname data) - if [ "$datadev" == "" ] - then - printf "***Failed to get device links for $datatgtname\n" >&2 - unmount_all $localdir $vmname - exit 10 - fi - ln -s /dev/$datadev $DISKDIR/$vmname-datadisk-1 -fi - - -if [ $? -gt 0 ] -then - printf "***Failed to mount $tgtname at $localdir\n" >&2 - exit 5 -fi - - -exit 0 diff --git a/scripts/vm/storage/nfs/mountvm.sh b/scripts/vm/storage/nfs/mountvm.sh deleted file mode 100755 index f25f531b1a4..00000000000 --- a/scripts/vm/storage/nfs/mountvm.sh +++ /dev/null @@ -1,142 +0,0 @@ -#!/usr/bin/env bash -# $Id: mountvm.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/storage/nfs/mountvm.sh $ -# mounvm.sh -- mount a remote nfs directory as the image directory -# -# - -usage() { - printf "Usage: %s: [-u | -m ] -h -r -l \n" $(basename $0) >&2 -} - -# check if server is up and running -check_nfs_server() { - ping -c 1 -n -q $1 > /dev/null - return $?; -} - -#check if somebody else has mounted this disk -#Only issue a warning since Solaris -#sometimes keeps around mounts for a longer time -check_in_use() { - local warn=0 - local nfshost=$1 - local remotedir=$2 - warn=$(ssh -o StrictHostKeyChecking=no -i ./id_rsa root@$nfshost "showmount -a | grep $remotedir" | wc -l) - if [ $warn -gt 1 ] - then - printf "!!!Warning!!!! $remotedir is already mounted by $warn other hosts: ">&2 - warn=$(ssh -o StrictHostKeyChecking=no -i ./id_rsa root@$nfshost "showmount -a | grep $remotedir" | cut -d":" -f1) - for ips in $warn - do - printf "$ips, " - done - printf "\n" - fi -} - -# unmount a local directory and all data disks within -unmount_all() { - local localdir=$1 - - #unmount all datadisks - for diskfs in $(find $localdir -type d | grep datadisk) - do - umount $diskfs >&2 #ignore errors - printf "Unmounting $diskfs result=$?\n" - done - - #unmount the root disk - umount $localdir >&2 #ignore errors - printf "Unmounting $localdir result=$?\n" -} - -#set -x - -hflag= -rflag= -lflag= -uflag= -mflag= - -while getopts 'umxh:r:l:' OPTION -do - case $OPTION in - h) hflag=1 - nfshost="$OPTARG" - ;; - r) rflag=1 - remotedir="$OPTARG" - ;; - l) lflag=1 - localdir="$OPTARG" - ;; - u) uflag=1 - ;; - m) mflag=1 - ;; - x) set -x - ;; - ?) usage - exit 2 - ;; - esac -done - -if [ "$hflag$rflag$lflag" != "111" ] && [ "$uflag$lflag" != "11" ] -then - usage - exit 2 -fi - -if [ "$uflag$mflag" != "1" ] && [ "$uflag$mflag" != "" ] -then - printf "Specify one of -u (unmount) or -m (mount)\n" >&2 - usage - exit 2 -fi - -if [ "$uflag" == "1" ] -then - unmount_all $localdir - exit 0 -fi - -#create the local dir if necessary -if ! mkdir -p $localdir -then - printf "Unable to create local directory, exiting\n" >&2 - exit 2 -fi - -#check if the nfs server is up and running -if ! check_nfs_server $nfshost -then - printf "Unable to ping the nfs host, exiting\n" >&2 - exit 3 -fi - -#warn if the remote disk has already been mounted by someone else -#check_in_use $nfshost $remotedir - -#mount the root disk -mount -t nfs $nfshost:$remotedir $localdir -o intr,rsize=32768,wsize=32768,hard -if [ $? -gt 0 ] -then - printf "Failed to mount $remotedir at $localdir\n" >&2 - exit 5 -fi - -#mount all datadisks as well -for diskfs in $(find $localdir -type d | grep datadisk) -do - disk=$(basename $diskfs) - mount -t nfs $nfshost:$remotedir/$disk $diskfs - if [ $? -gt 0 ] - then - printf "Failed to mount $remotedir/$disk at $diskfs\n" >&2 - unmount_all $localdir #undo what we did - exit 5 - fi -done - -exit 0