1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-16 22:50:10 +03:00

removed unused driver files

git-svn-id: http://svn.opennebula.org/one/trunk@711 3034c82b-c49b-4eb3-8279-a7acafdc01c0
This commit is contained in:
Rubén S. Montero 2009-07-21 15:17:12 +00:00
parent 635c79ad9d
commit f0167f2012
10 changed files with 0 additions and 734 deletions

View File

@ -1,323 +0,0 @@
/* -------------------------------------------------------------------------- */
/* Copyright 2002-2009, Distributed Systems Architecture Group, Universidad */
/* Complutense de Madrid (dsa-research.org) */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
/* not use this file except in compliance with the License. You may obtain */
/* a copy of the License at */
/* */
/* http://www.apache.org/licenses/LICENSE-2.0 */
/* */
/* Unless required by applicable law or agreed to in writing, software */
/* distributed under the License is distributed on an "AS IS" BASIS, */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
/* See the License for the specific language governing permissions and */
/* limitations under the License. */
/* -------------------------------------------------------------------------- */
import com.vmware.vim.*;
import com.vmware.apputils.*;
import com.vmware.apputils.vim.*;
import java.util.*;
import java.net.*;
import java.io.*;
import javax.net.ssl.*;
import org.w3c.dom.Document;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
/*
* Used to stage VMs in the ESXi Server
* Accepts a Source and Destination, of the form
* machineSource:path_to_source machineDest:path_to_dest
* although the path to dest will be used to extract the one-id
* and files stored in datastore/one-id
*/
public class TMClone
{
private String oneID = "";
// Helpers from VI samples
private static ServiceContent content;
private static AppUtil cb = null;
private static VimPortType service;
private String datastore = "";
private String datacenter = "";
private String pathToVm = "";
/* Copies a VM from local FS to ESXi
* @param pathToVm localpath of the VM
*/
private void copyVM() throws Exception
{
String [] listOfVMFiles = getDirFiles(pathToVm);
for(int i=0; i<listOfVMFiles.length; i++)
{
String remoteFilePath = "/" +oneID+"/"+listOfVMFiles[i];
String localFilePath = pathToVm+"/"+listOfVMFiles[i];
if(localFilePath.indexOf("vdisk") != -1)
{
String dataStoreName =
pathToVm.substring(pathToVm.lastIndexOf("#")+1);
remoteFilePath =
"/"+oneID+"/"+dataStoreName+"/"+listOfVMFiles[i];
/* if(localFilePath.indexOf("flat") == -1)
{
diskNames.add(dataStoreName+"/"+listOfVMFiles[i]);
} */
}
else
{
remoteFilePath = "/"+oneID+"/"+listOfVMFiles[i];
}
transferVMFiles(remoteFilePath,localFilePath);
}
}
/* Performs the actual copying through HTTP
* @param remoteFilePath remote path of the VM on the ESXi
* @param localFilePath localpath of the VM
*/
private void transferVMFiles(String remoteFilePath, String localFilePath)
throws Exception
{
String serviceUrl = cb.getServiceUrl();
serviceUrl = serviceUrl.substring(0,serviceUrl.lastIndexOf("sdk")-1);
String httpUrl = serviceUrl +"/folder" + remoteFilePath+"?dcPath="
+datacenter +"&dsName="+ datastore;
httpUrl = httpUrl.replaceAll("\\ ","%20");
HttpURLConnection conn = getConnection(httpUrl);
conn.setRequestProperty( org.apache.axis.transport.http.HTTPConstants.HEADER_CONTENT_LENGTH,"1024");
OutputStream out = conn.getOutputStream();
FileInputStream in = new FileInputStream(new File(localFilePath));
// Perform the actual staging
byte[] buf = new byte[1024];
int len = 0;
while ((len = in.read(buf)) > 0)
{
out.write(buf, 0, len);
out.flush();
}
conn.getResponseMessage();
conn.disconnect();
out.close();
}
/* Returns list of files available on a folder
* @param localDir local path containing files to be listed
* @return list of files or null if none
*/
private String [] getDirFiles(String localDir) throws Exception
{
File temp = new File(localDir);
String [] listOfFiles = temp.list();
if(listOfFiles != null)
{
return listOfFiles;
}
else
{
return null;
}
}
/*
* Gets http connection to ESXi server
* @param urlString contact point to the ESXi server
* @returns http connection to ESXi server
*/
private HttpURLConnection getConnection(String urlString) throws Exception
{
String cookieString = getCookie();
trustAllHttpsCertificates();
HostnameVerifier hv = new HostnameVerifier()
{
public boolean verify(String urlHostName, SSLSession session)
{
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty(
org.apache.axis.transport.http.HTTPConstants.HEADER_COOKIE,
cookieString);
conn.setRequestProperty(
org.apache.axis.transport.http.HTTPConstants.HEADER_CONTENT_TYPE,
"application/octet-stream");
conn.setRequestProperty(
org.apache.axis.transport.http.HTTPConstants.HEADER_EXPECT,
"100-continue");
conn.setRequestMethod("PUT");
return conn;
}
private static void trustAllHttpsCertificates() throws Exception
{
javax.net.ssl.TrustManager[] trustAllCerts =
new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new myTMan();
trustAllCerts[0] = tm;
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, null);
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
/*
* Get ESXi cookie
* @return string ESXi cookie
*/
private String getCookie() throws Exception
{
com.vmware.vim.VimPortType test = cb.getConnection().getService();
org.apache.axis.client.Stub st = (org.apache.axis.client.Stub)test;
org.apache.axis.client.Call callObj = st._getCall();
org.apache.axis.MessageContext msgContext = callObj.getMessageContext();
String cookieString
= (String)msgContext.getProperty(
org.apache.axis.transport.http.HTTPConstants.HEADER_COOKIE);
return cookieString;
}
TMClone(String source, String destiny) throws Exception
{
String[] connectionArgs = new String[6];
String hostName = destiny.substring(0,destiny.indexOf(":"));
pathToVm = source.substring(source.indexOf(":")+1,
source.length());
oneID = destiny.substring(destiny.indexOf(":")+1,
destiny.length());
oneID = oneID.substring(0,oneID.lastIndexOf("/") );
oneID = oneID.substring(0,oneID.lastIndexOf("/") );
oneID = oneID.substring(oneID.lastIndexOf("/")+1 );
connectionArgs[0]="--url";
connectionArgs[1]="https://" + hostName + ":8008/sdk";
connectionArgs[2]="--username";
connectionArgs[3]= System.getProperty("username");
connectionArgs[4]="--password";
connectionArgs[5]= System.getProperty("password");
cb = AppUtil.initialize("TMClone", null, connectionArgs);
cb.connect();
// Todo change hardcoding
ManagedObjectReference hostMor =
cb.getServiceUtil().getDecendentMoRef(null,
"HostSystem",
hostName);
// TODO make this dymamic.
datacenter = "ha-datacenter";
datastore = "datastore1";
com.vmware.apputils.vim.ServiceConnection sc = cb.getConnection();
content = sc.getServiceContent();
service = sc.getService();
}
protected void finalize() throws Throwable
{
cb.disConnect();
}
public static void main(String[] args)
{
boolean success = true;
// first, make redirection
PrintStream stdout = System.out;
PrintStream stderr = System.err;
System.setOut(stderr);
System.setErr(stdout);
if(args.length!=2)
{
success = false;
}
else
{
try
{
TMClone tmc = new TMClone(args[0],args[1]);
tmc.copyVM();
}
catch(Exception e)
{
e.printStackTrace();
success = false;
}
}
if (success)
{
System.exit(0);
}
else
{
System.exit(-1);
}
}
public static class myTMan implements javax.net.ssl.TrustManager,
javax.net.ssl.X509TrustManager
{
public java.security.cert.X509Certificate[] getAcceptedIssuers()
{
return null;
}
public boolean isServerTrusted(
java.security.cert.X509Certificate[] certs)
{
return true;
}
public boolean isClientTrusted(
java.security.cert.X509Certificate[] certs)
{
return true;
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException
{
return;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException
{
return;
}
}
}

View File

@ -1,62 +0,0 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
#Setup driver variables
DRIVER_NAME="tm_vmware"
if [ -z "${ONE_LOCATION}" ]; then
DRIVERRC=/etc/one/${DRIVER_NAME}/${DRIVER_NAME}rc
TMCOMMON=/usr/lib/one/mads/tm_common.sh
else
DRIVERRC=$ONE_LOCATION/etc/${DRIVER_NAME}/${DRIVER_NAME}rc
TMCOMMON=$ONE_LOCATION/lib/mads/tm_common.sh
fi
. $TMCOMMON
# Export the im_mad specific rc
export_rc_vars $DRIVERRC
echo $VMWARE_TRUSTORE
LOG_FILE=$DRIVER_NAME
MAD_FILE="TMClone"
if [ -z "${ONE_LOCATION}" ]; then
MAD_LOG_PATH=/var/log/one/$LOG_FILE.log
else
MAD_LOG_PATH=$ONE_LOCATION/var/$LOG_FILE.log
fi
# Execute the actual MAD
if [ -n "${ONE_MAD_DEBUG}" ]; then
exec_and_log "exec nice -n $PRIORITY java -cp .:$CLASSPATH \
-Djavax.net.ssl.trustStore=$VMWARE_TRUSTORE -Dusername=$USERNAME \
-Dpassword=$PASSWORD -Xmx1024M $MAD_FILE $*"
else
exec nice -n $PRIORITY java -cp .:$CLASSPATH \
-Djavax.net.ssl.trustStore=$VMWARE_TRUSTORE -Dusername=$USERNAME \
-Dpassword=$PASSWORD -Xmx1024M $MAD_FILE $* 2> /dev/null
fi

View File

@ -1,60 +0,0 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
SRC=$1
DST=$2
if [ -z "${ONE_LOCATION}" ]; then
TMCOMMON=/usr/lib/one/mads/tm_common.sh
else
TMCOMMON=$ONE_LOCATION/lib/mads/tm_common.sh
fi
. $TMCOMMON
SRC_PATH=`arg_path $SRC`
DST_PATH=`arg_path $DST`
# Get rid of path/images, we don't need it
DST_PATH=`dirname $DST_PATH`
SRC_HOST=`arg_host $SRC`
DST_HOST=`arg_host $DST`
log "$1 $2"
log "DST: $DST_PATH"
BASE_SRC=`basename $SRC_PATH`
BASE_DST=`basename $DST_PATH`
case $SRC in
http://*)
log "Downloading $SRC"
exec_and_log "ssh $DST_HOST wget -O $DST_PATH $SRC_PATH"
;;
*)
log "Cloning $SRC"
scp -r $SRC $DST_HOST:/vmfs/volumes/$DATASTORE/
ssh $DST_HOST "cd /vmfs/volumes/$DATASTORE ; mv $BASE_SRC $BASE_DST"
;;
esac
ssh $DST_HOST chmod a+w /vmfs/volumes/$DATASTORE/$BASE_DST

View File

@ -1,69 +0,0 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
# Parameters: a b c d e f g h
# SRC: a b c d e f g
# DST: h
while (( "$#" )); do
if [ "$#" == "1" ]; then
DST=$1
else
SRC="$SRC $1"
fi
shift
done
if [ -z "${ONE_LOCATION}" ]; then
TMCOMMON=/usr/lib/one/mads/tm_common.sh
else
TMCOMMON=$ONE_LOCATION/lib/mads/tm_common.sh
fi
. $TMCOMMON
DST_PATH=`arg_path $DST`
DST_FILE=`basename $DST_PATH`
DST_PATH=`dirname $DST_PATH`
DST_DIR=`dirname $DST_PATH`
DST_HASH=`echo -n $DST | md5sum | awk '{print $1}'`
TMP_DIR="$ONE_LOCATION/var/$DST_HASH"
ISO_DIR="$TMP_DIR/isofiles"
DST_HOST=`arg_host $DST`
DST_ONEID_FOLDER=`dirname $DST_PATH`
DST_ONEID_FOLDER=`basename $DST_ONEID_FOLDER`
exec_and_log "mkdir -p $ISO_DIR"
for f in $SRC; do
case $f in
http://*)
exec_and_log "wget -O $ISO_DIR $f"
;;
*)
exec_and_log "cp -R $f $ISO_DIR"
;;
esac
done
exec_and_log "mkisofs -o $TMP_DIR/$DST_FILE -J -R $ISO_DIR"
scp $TMP_DIR/$DST_FILE $DST_HOST:/vmfs/volumes/$DATASTORE/$DST_ONEID_FOLDER
exec_and_log "rm -rf $TMP_DIR"

View File

@ -1,38 +0,0 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
SRC=$1
DST=$2
if [ -z "${ONE_LOCATION}" ]; then
TMCOMMON=/usr/lib/one/mads/tm_common.sh
else
TMCOMMON=$ONE_LOCATION/lib/mads/tm_common.sh
fi
. $TMCOMMON
SRC_PATH=`arg_path $SRC`
SRC_HOST=`arg_host $SRC`
# We just need the <vid> bit
SRC_PATH=`basename $SRC_PATH`
log "Deleting $SRC_PATH"
exec_and_log "ssh $SRC_HOST rm -rf /vmfs/volumes/$DATASTORE/$SRC_PATH"

View File

@ -1,35 +0,0 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
SRC=$1
DST=$2
if [ -z "${ONE_LOCATION}" ]; then
TMCOMMON=/usr/lib/one/mads/tm_common.sh
TM_COMMANDS_LOCATION=/usr/lib/one/tm_commands/
else
TMCOMMON=$ONE_LOCATION/lib/mads/tm_common.sh
TM_COMMANDS_LOCATION=$ONE_LOCATION/lib/tm_commands/
fi
. $TMCOMMON
log "Link $SRC_PATH (non shared dir, will clone)"
#exec_and_log "ln -s $SRC_PATH $DST_PATH"
exec $TM_COMMANDS_LOCATION/ssh/tm_clone.sh $SRC $DST

View File

@ -1,50 +0,0 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
if [ -z "${ONE_LOCATION}" ]; then
TMCOMMON=/usr/lib/one/mads/tm_common.sh
else
TMCOMMON=$ONE_LOCATION/lib/mads/tm_common.sh
fi
. $TMCOMMON
SIZE=$1
FSTYPE=$2
DST=$3
DST_PATH=`arg_path $DST`
DST_HOST=`arg_host $DST`
DST_DIR=`dirname $DST_PATH`
# Get rid of path/images, we don't need it
DST_DIR=`dirname $DST_DIR`
DST_HASH=`echo -n $DST | md5sum | awk '{print $1}'`
TMP_DIR="$ONE_LOCATION/var/$DST_HASH"
NAME_OF_CONTEXT_FILE=`basename $DST_PATH`
DST_ONEID_FOLDER=`basename $DST_DIR`
exec_and_log "mkdir -p $TMP_DIR"
ssh $DST_HOST \"cd /vmfs/volumes/$DATASTORE; mkdir $DST_DIR\"
exec_and_log "dd if=/dev/zero of=$TMP_DIR/$NAME_OF_CONTEXT_FILE bs=1 count=1 seek=${SIZE}M"
exec_and_log "mkfs -t $FSTYPE -F $TMP_DIR/$NAME_OF_CONTEXT_FILE"
scp $TMP_DIR/$NAME_OF_CONTEXT_FILE $DST_HOST:/vmfs/volumes/$DATASTORE/$DST_ONEID_FOLDER
ssh $DST_HOST chmod a+rw $DST_PATH

View File

@ -1,69 +0,0 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
SRC=$1
DST=$2
if [ -z "${ONE_LOCATION}" ]; then
TMCOMMON=/usr/lib/one/mads/tm_common.sh
else
TMCOMMON=$ONE_LOCATION/lib/mads/tm_common.sh
fi
. $TMCOMMON
SRC_PATH=`arg_path $SRC`
DST_PATH=`arg_path $DST`
SRC_HOST=`arg_host $SRC`
DST_HOST=`arg_host $DST`
if [ $SRC_HOST -ne `hostname` ]; then
$VM_ID=`sed -e 's/.*\/\([0-9]\+\)\/images\/.*/\1/`
$VM_NAME=one-$VM_ID
$LAST_BIT_OF_PATH=`basename $SRC_PATH`
if [ $LAST_BIT_OF_PATH -eq "images" ]; then
SRC_PATH="/vmfs/volumes/$DATASTORE/"$VM_NAME
else
SRC_PATH="/vmfs/volumes/$DATASTORE/"$VM_NAME"/$LAST_BIT_OF_PATH
fi
fi
if [ $DST_HOST -ne `hostname` ]; then
$VM_ID=`sed -e 's/.*\/\([0-9]\+\)\/images\/.*/\1/`
$VM_NAME=one-$VM_ID
$LAST_BIT_OF_PATH=`basename $DST_PATH`
if [ $LAST_BIT_OF_PATH -eq "images" ]; then
DST_PATH="/vmfs/volumes/$DATASTORE/"$VM_NAME
else
DST_PATH="/vmfs/volumes/$DATASTORE/"$VM_NAME"/$LAST_BIT_OF_PATH
fi
fi
DST_DIR=`dirname $DST_PATH`
if [ -d $DST_PATH ]; then
DST_ONEID_FOLDER=`basename `
else
fi
log "Moving $SRC_PATH"
scp -r $SRC $DST_HOST:/vmfs/volumes/$DATASTORE/$
ssh $SRC_HOST rm -rf $SRC_PATH

View File

@ -1,6 +0,0 @@
CLONE = vmware/tm_clone.sh
LN = vmware/tm_ln.sh
MKSWAP = dummy/tm_dymmy.sh
MKIMAGE = vmware/tm_mkimage.sh
DELETE = vmware/tm_delete.sh
MV = vmware/tm_mv.sh

View File

@ -1,22 +0,0 @@
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
# Uncomment the following line to active MAD debug
#ONE_MAD_DEBUG=1
# Name of the ESX(i) datastore
DATASTORE=datastore1