Index: gs3-extensions/vm-manager/trunk/src/_local_config.bash
===================================================================
--- gs3-extensions/vm-manager/trunk/src/_local_config.bash	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/_local_config.bash	(revision 38640)
@@ -0,0 +1,35 @@
+
+echo ""
+echo "----"
+echo "- Sourcing settings in _local_config.bash"
+echo "----"
+
+# Edit the following to the name of the VM you want to create
+#export GSVM_INSTANCE=greenstone3-debian-ansible-test
+export GSVM_INSTANCE=gcloud-ansible
+
+export GSVM_USER=ateaspace
+export GSVM_TL_DOMAIN=sowemustthink.space
+
+gsvm_project=atea-storage
+gsvm_subproj=bluff
+
+gsvm_region=australia-southeast1
+gsvm_zone=australia-southeast1-b
+
+#
+# Defaults for these likely to be OK, as is
+#
+
+# FQDN = Fully Qualified Domain Name
+export GSVM_FQDN=$GSVM_INSTANCE.$GSVM_TL_DOMAIN
+
+gsvm_instance_disk=$GSVM_INSTANCE-disk
+gsvm_instance_nic=$GSVM_INSTANCE-nic
+
+echo "===="
+echo "= VM hostname: $GSVM_FQDN"
+echo "= VM username: $GSVM_USER"
+echo "= [$gsvm_project--$gsvm_subproj,region=$gsvm_region]"
+echo "===="
+echo ""
Index: gs3-extensions/vm-manager/trunk/src/create-dns-zone/README.txt
===================================================================
--- gs3-extensions/vm-manager/trunk/src/create-dns-zone/README.txt	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/create-dns-zone/README.txt	(revision 38640)
@@ -0,0 +1,94 @@
+Based on general Cloud DNS overview
+  https://cloud.google.com/dns/docs/set-up-dns-records-domain-name
+
+And:
+
+  https://cloud.google.com/dns/docs/update-name-servers
+
+gcloud dns --project=atea-storage managed-zones create cellblockhtml-zone-name --description="" --dns-name="cellblockhtml.org." --visibility="public" --dnssec-state="off"
+
+GET https://dns.googleapis.com/dns/v1/projects/atea-storage/managedZones/cellblockhtml-zone-name
+{
+  "cloudLoggingConfig": {
+    "enableLogging": false
+  },
+  "creationTime": "2024-01-26T01:16:48.494Z",
+  "description": "",
+  "dnsName": "cellblockhtml.org.",
+  "fingerprint": "22c472c7f1624dc30000018d435741ee",
+  "id": 2505253495798648259,
+  "location": "global",
+  "name": "cellblockhtml-zone-name",
+  "nameServers": [
+    "ns-cloud-b1.googledomains.com.",
+    "ns-cloud-b2.googledomains.com.",
+    "ns-cloud-b3.googledomains.com.",
+    "ns-cloud-b4.googledomains.com."
+  ],
+  "visibility": "public"
+}
+
+
+From:
+    https://console.cloud.google.com/net-services/dns/zones/cellblockhtml-zone-name/details?project=atea-storage
+
+Determine the IP numbers for the NS [Presumably, NameServer(s)]
+
+  ns-cloud-b1.googledomains.com
+  ns-cloud-b2.googledomains.com
+  ns-cloud-b3.googledomains.com
+  ns-cloud-b4.googledomains.com
+
+
+So:
+
+    $ dig  ns-cloud-b1.googledomains.com +short
+    216.239.32.107
+    $ dig  ns-cloud-b2.googledomains.com +short
+    216.239.34.107
+    $ dig  ns-cloud-b3.googledomains.com +short
+    216.239.36.107
+    $ dig  ns-cloud-b4.googledomains.com +short
+    216.239.38.107
+
+Verify things match:
+
+  dig -t NS cellblockhtml.org
+
+
+
+Add an A-record
+
+gcloud dns --project=atea-storage record-sets create cellblockhtml.org. --zone="cellblockhtml-zone-name" --type="A" --ttl="300" --rrdatas="35.213.231.194"
+
+i.e. the IP NIC assigned to gcloud-ansible
+
+
+====
+
+Name Server 1	ns.freeparking.co.nz		27.124.125.244,2a00:fd80:aaaa:ffff::ccdd:3	
+Name Server 2	ns2.freeparking.co.nz		27.124.125.245,2a00:fd80:aaaa:ffff::ccdd:4
+
+
+ dig -t NS cellblockhtml.org
+
+; <<>> DiG 9.18.12-0ubuntu0.22.04.3-Ubuntu <<>> -t NS cellblockhtml.org
+;; global options: +cmd
+;; Got answer:
+;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26875
+;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
+
+;; OPT PSEUDOSECTION:
+; EDNS: version: 0, flags:; udp: 65494
+;; QUESTION SECTION:
+;cellblockhtml.org.		IN	NS
+
+;; ANSWER SECTION:
+cellblockhtml.org.	3600	IN	NS	ns.freeparking.co.nz.
+cellblockhtml.org.	3600	IN	NS	ns2.freeparking.co.nz.
+
+;; Query time: 36 msec
+;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
+;; WHEN: Fri Jan 26 03:45:28 UTC 2024
+;; MSG SIZE  rcvd: 98
+
Index: gs3-extensions/vm-manager/trunk/src/create-dns-zone/_local_config.bash
===================================================================
--- gs3-extensions/vm-manager/trunk/src/create-dns-zone/_local_config.bash	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/create-dns-zone/_local_config.bash	(revision 38640)
@@ -0,0 +1,8 @@
+
+if [ "x$TL_DOMAIN" = "x" ] ; then
+    
+    TL_DOMAIN=atea.space
+
+    zone_name=$(echo $TL_DOMAIN | sed 's/\./-/g')--zone
+    dns_name=${TL_DOMAIN}.
+fi
Index: gs3-extensions/vm-manager/trunk/src/create-dns-zone/gcloud-dns-create-zone.sh
===================================================================
--- gs3-extensions/vm-manager/trunk/src/create-dns-zone/gcloud-dns-create-zone.sh	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/create-dns-zone/gcloud-dns-create-zone.sh	(revision 38640)
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+. ./_local_config.bash
+
+
+gcloud dns \
+       --project=atea-storage \
+       managed-zones create $zone_name \
+       --description="$zone_name created by Greenstone3's VM Manager Extension" \
+       --dns-name="$dns_name" \
+       --visibility="public" \
+       --dnssec-state="off"
Index: gs3-extensions/vm-manager/trunk/src/create-dns-zone/gcloud-dns-describe-zone.sh
===================================================================
--- gs3-extensions/vm-manager/trunk/src/create-dns-zone/gcloud-dns-describe-zone.sh	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/create-dns-zone/gcloud-dns-describe-zone.sh	(revision 38640)
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+. ./_local_config.bash
+
+gcloud dns \
+       --project=atea-storage \
+       managed-zones describe $zone_name $@
Index: gs3-extensions/vm-manager/trunk/src/create-dns-zone/gcloud-dns-list-ns.sh
===================================================================
--- gs3-extensions/vm-manager/trunk/src/create-dns-zone/gcloud-dns-list-ns.sh	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/create-dns-zone/gcloud-dns-list-ns.sh	(revision 38640)
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+. ./_local_config.bash
+
+ns_servers=$(./gcloud-dns-describe-zone.sh --format='value(nameServers)')
+
+
+IFS_store=$IFS
+IFS=';'
+for ns_server in $ns_servers ; do
+    echo $ns_server
+    dig $ns_server +short
+done
+IFS=$IFS_store
Index: gs3-extensions/vm-manager/trunk/src/example-java-code/CreateInstance.java
===================================================================
--- gs3-extensions/vm-manager/trunk/src/example-java-code/CreateInstance.java	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/example-java-code/CreateInstance.java	(revision 38640)
@@ -0,0 +1,104 @@
+/* 
+   Example from:
+     https://cloud.google.com/compute/docs/samples/compute-instances-create#compute_instances_create-java
+*/
+
+import com.google.api.gax.longrunning.OperationFuture;
+import com.google.cloud.compute.v1.AttachedDisk;
+import com.google.cloud.compute.v1.AttachedDisk.Type;
+import com.google.cloud.compute.v1.AttachedDiskInitializeParams;
+import com.google.cloud.compute.v1.InsertInstanceRequest;
+import com.google.cloud.compute.v1.Instance;
+import com.google.cloud.compute.v1.InstancesClient;
+import com.google.cloud.compute.v1.NetworkInterface;
+import com.google.cloud.compute.v1.Operation;
+import java.io.IOException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+public class CreateInstance {
+
+  public static void main(String[] args)
+      throws IOException, InterruptedException, ExecutionException, TimeoutException {
+    // TODO(developer): Replace these variables before running the sample.
+    String project = "your-project-id";
+    String zone = "zone-name";
+    String instanceName = "instance-name";
+    createInstance(project, zone, instanceName);
+  }
+
+
+  // Create a new instance with the provided "instanceName" value in the specified project and zone.
+  public static void createInstance(String project, String zone, String instanceName)
+      throws IOException, InterruptedException, ExecutionException, TimeoutException {
+    // Below are sample values that can be replaced.
+    // machineType: machine type of the VM being created.
+    // *   This value uses the format zones/{zone}/machineTypes/{type_name}.
+    // *   For a list of machine types, see https://cloud.google.com/compute/docs/machine-types
+    // sourceImage: path to the operating system image to mount.
+    // *   For details about images you can mount, see https://cloud.google.com/compute/docs/images
+    // diskSizeGb: storage size of the boot disk to attach to the instance.
+    // networkName: network interface to associate with the instance.
+    String machineType = String.format("zones/%s/machineTypes/n1-standard-1", zone);
+    String sourceImage = String
+        .format("projects/debian-cloud/global/images/family/%s", "debian-11");
+    long diskSizeGb = 10L;
+    String networkName = "default";
+
+    // Initialize client that will be used to send requests. This client only needs to be created
+    // once, and can be reused for multiple requests. After completing all of your requests, call
+    // the `instancesClient.close()` method on the client to safely
+    // clean up any remaining background resources.
+    try (InstancesClient instancesClient = InstancesClient.create()) {
+      // Instance creation requires at least one persistent disk and one network interface.
+      AttachedDisk disk =
+          AttachedDisk.newBuilder()
+              .setBoot(true)
+              .setAutoDelete(true)
+              .setType(Type.PERSISTENT.toString())
+              .setDeviceName("disk-1")
+              .setInitializeParams(
+                  AttachedDiskInitializeParams.newBuilder()
+                      .setSourceImage(sourceImage)
+                      .setDiskSizeGb(diskSizeGb)
+                      .build())
+              .build();
+
+      // Use the network interface provided in the networkName argument.
+      NetworkInterface networkInterface = NetworkInterface.newBuilder()
+          .setName(networkName)
+          .build();
+
+      // Bind `instanceName`, `machineType`, `disk`, and `networkInterface` to an instance.
+      Instance instanceResource =
+          Instance.newBuilder()
+              .setName(instanceName)
+              .setMachineType(machineType)
+              .addDisks(disk)
+              .addNetworkInterfaces(networkInterface)
+              .build();
+
+      System.out.printf("Creating instance: %s at %s %n", instanceName, zone);
+
+      // Insert the instance in the specified project and zone.
+      InsertInstanceRequest insertInstanceRequest = InsertInstanceRequest.newBuilder()
+          .setProject(project)
+          .setZone(zone)
+          .setInstanceResource(instanceResource)
+          .build();
+
+      OperationFuture<Operation, Operation> operation = instancesClient.insertAsync(
+          insertInstanceRequest);
+
+      // Wait for the operation to complete.
+      Operation response = operation.get(3, TimeUnit.MINUTES);
+
+      if (response.hasError()) {
+        System.out.println("Instance creation failed ! ! " + response);
+        return;
+      }
+      System.out.println("Operation Status: " + response.getStatus());
+    }
+  }
+}
Index: gs3-extensions/vm-manager/trunk/src/gcloud-create-vm.sh
===================================================================
--- gs3-extensions/vm-manager/trunk/src/gcloud-create-vm.sh	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/gcloud-create-vm.sh	(revision 38640)
@@ -0,0 +1,106 @@
+#!/bin/bash
+
+. ./_local_config.bash
+
+if [ ! -f $gsvm_project--$gsvm_subproj ] ; then
+    echo ""
+    echo "----"
+    echo "- Generating RSA key-pair for ssh access"
+    echo "- [Press enter twice to set with an empty passphrase]"
+    ssh-keygen -t rsa -f $gsvm_project--$gsvm_subproj -C $gsvm_project--$gsvm_subproj
+    echo "----"
+fi
+
+ssh_rsa_pubkey=$(cat $gsvm_project--$gsvm_subproj.pub | awk '{ print $2 }')
+
+
+echo ""
+echo "####"
+echo "# Assuming that the Google Cloud SDK has aready been initializied with:"
+echo "#    gcloud init"
+echo "# or on a headless server:"
+echo "#   gcloud auth login --no-launch-browser"
+echo "####"
+echo ""
+
+
+echo "Using gcloud to create a base Debian VM instance: $GSVM_INSTANCE"
+echo "[OK to ignore the warning about the set '40 GB' disk size being larger than the default '10 GB']"
+
+gcloud compute instances create $GSVM_INSTANCE \
+    --project=$gsvm_project \
+    --zone=$gsvm_zone \
+    --machine-type=e2-medium \
+    --network-interface=network-tier=STANDARD,stack-type=IPV4_ONLY,subnet=default,no-address \
+    --metadata="^%^ssh-keys=$GSVM_USER:ssh-rsa $ssh_rsa_pubkey ssh-$gsvm_project--$gsvm_subproj {\"userName\":\"$GSVM_USER@gmail.com\"}" \
+    --maintenance-policy=MIGRATE \
+    --provisioning-model=STANDARD \
+    --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append \
+    --tags=http-server,https-server \
+    --create-disk=auto-delete=yes,boot=yes,device-name=$gsvm_instance_disk,image=projects/debian-cloud/global/images/debian-11-bullseye-v20240110,mode=rw,size=40,type=projects/$gsvm_project/zones/$gsvm_zone/diskTypes/pd-balanced \
+    --no-shielded-secure-boot \
+    --shielded-vtpm \
+    --shielded-integrity-monitoring \
+    --labels=goog-ec-src=vm_add-gcloud \
+    --reservation-affinity=any
+
+if [ $? != 0 ] ; then
+    echo "" 2>&1
+    echo "Warning: Failed to run gcloud command to create instance" >&2
+    # exit 1
+fi
+echo ""
+
+echo "Using gcloud to see if statically reserved external IP for network interface already exists for: $gsvm_instance_nic"
+external_static_ip=$(gcloud compute addresses --project=$gsvm_project  describe $gsvm_instance_nic --region=$gsvm_region --format='value(address)' 2>/dev/null)
+
+if [ "x$external_static_ip" != "x" ] ; then
+    echo "  Network address exists: $external_static_ip"
+else
+    echo "Using gcloud to create statically reserved external IP for network interface: $gsvm_instance_nic"
+
+    gcloud compute addresses create $gsvm_instance_nic --project=$gsvm_project --network-tier=STANDARD --region=$gsvm_region
+    if [ $? != 0 ] ; then
+	echo "Warning: Failed to run gcloud command to create network interface with statically allocated IP" >&2
+	exit 1
+    fi
+fi
+
+echo ""
+echo "Using gcloud to retrieve allocated IP for network interface: $gsvm_instance_nic"
+external_static_ip=$(gcloud compute addresses --project=$gsvm_project  describe $gsvm_instance_nic --region=$gsvm_region --format='value(address)')
+
+if [ $? != 0 ] ; then
+    echo "Error: Failed to run gcloud command to retrieve allocated network interface for $gsvm_instance_nic" >&2
+    exit 1
+fi
+
+echo ""
+echo "Using gcloud to attach network interface '$gsvm_instance_nic' [$external_static_ip] to '$GSVM_INSTANCE'"
+gcloud compute instances add-access-config $GSVM_INSTANCE --project=atea-storage --zone=australia-southeast1-b --address=$external_static_ip --network-tier=STANDARD
+if [ $? != 0 ] ; then
+    echo "Error: Failed to run gcloud command to attached network interface $gsvm_instance_nic to VM instance $GSVM_INSTANCE" >&2
+    echo "" >&2
+    exit 1
+fi
+
+echo ""
+echo "Removing any existing ssh keys for $GSVM_FQDM from known_hosts"
+ssh-keygen -f "$HOME/.ssh/known_hosts" -R "$GSVM_FQDN" >/dev/null
+
+echo ""
+echo "----"
+echo "For your Greenstone3 VM to be publically accessible over the web, ensure the following"
+echo "DNS record has been create through your Domain Hosting provider (e.g., Freeparking):"
+echo "  A-Record: $GSVM_FQDN -> $external_static_ip"
+echo "----"
+
+echo ""
+
+echo "----"
+echo "To provision your VM to run Greenstone3 over https, run:"
+echo "    ./ssh-provision-vm.sh"
+echo "----"
+echo ""
+
+
Index: gs3-extensions/vm-manager/trunk/src/gcloud-describe-instance.sh
===================================================================
--- gs3-extensions/vm-manager/trunk/src/gcloud-describe-instance.sh	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/gcloud-describe-instance.sh	(revision 38640)
@@ -0,0 +1,1 @@
+gcloud compute instances describe greenstone3-debian-ansible-test --project=atea-storage
Index: gs3-extensions/vm-manager/trunk/src/get-and-run-gs3-playbooks.sh.in
===================================================================
--- gs3-extensions/vm-manager/trunk/src/get-and-run-gs3-playbooks.sh.in	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/get-and-run-gs3-playbooks.sh.in	(revision 38640)
@@ -0,0 +1,75 @@
+#!/bin/bash
+
+# Copy this script to the VM where you want to provision a Greenstone install
+
+sudo apt-get -y update
+
+sudo apt-get -y install wget subversion
+
+#sudo apt install software-properties-common
+#sudo add-apt-repository --yes --update ppa:ansible/ansible
+sudo apt-get -y install ansible
+
+
+echo "Getting latest version of DOWNLOAD-GS3-PLAYBOOKS.sh"
+wget -O DOWNLOAD-GS3-PLAYBOOKS.sh https://trac.greenstone.org/browser/main/trunk/greenstone3/src/ansible-playbooks/DOWNLOAD-GS3-PLAYBOOKS.sh?format=txt
+
+chmod +x DOWNLOAD-GS3-PLAYBOOKS.sh
+./DOWNLOAD-GS3-PLAYBOOKS.sh
+
+if [ -d gs3-ansible-playbooks ] ; then
+    # Note, the backslashes are using in the following to prevent (lexically fool)
+    # the 'cat | sed express' (that is turning this .sh.in file
+    # into .sh) from performing the substitute work on the backslashed versions
+
+    echo "Transforming gs3-ansible-playbooks/vars/default-core.yml for use by gcloud scripts"
+    echo "  #UNCOMMENT-IF-GCLOUD#"
+    echo "  #COMMENT-OUT-IF-GCLOUD#"
+    
+    sed -i \
+	-e "s/@GSVM\_USER@/@GSVM_USER@/g" \
+	-e "s/@GSVM\_INSTANCE@/@GSVM_INSTANCE@/g" \
+	-e "s/@GSVM\_TL\_DOMAIN@/@GSVM_TL_DOMAIN@/g" \
+	-e "s/@GSVM\_FQDN@/@GSVM_FQDN@/g" \
+	gs3-ansible-playbooks/vars/default-core.yml
+	
+    sed -i \
+	-e 's/#UNCOMMENT-IF-GCLOUD#//' \
+	-e 's/^\(.*\)#COMMENT-OUT-IF-GCLOUD#\(.*\)$/## \1#REVERT-NEXT-TWO-LINES-IF-NOT-GCLOUD#\2/' \
+	gs3-ansible-playbooks/vars/default-core.yml    
+fi
+
+cd gs3-ansible-playbooks/ \
+    && ./01-RUN-ANSIBLE-BASE-INSTALL.sh @GSVM_USER@ \
+    && ./02-RUN-ANSIBLE-REVPROXY.sh @GSVM_USER@
+
+if [ $? = 0 ] ; then
+    # An improvement would be to determine gsdl3srchome from vars/default-core.yml
+    # and use that.
+    cd ..
+    cd greenstone3-svn
+    ./ant-start-with-exts.sh
+
+    if [ $? = 0 ] ; then
+	echo ""
+	echo "===="
+	echo "= https://@GSVM_FQDN@/greenstone3/library"
+	echo "===="
+	echo ""
+    else
+	echo "" >&2
+	echo "!!!!" >&2
+	echo "! An error occurred in starting the Greenstone3 DL server" >&2
+	echo "!!!!" >&2
+	echo "" >&2	
+    fi
+    
+else
+    echo "" >&2
+    echo "!!!!" >&2
+    echo "! An error occurred in running the ansible playbooks" >&2
+    echo "! The Greenstone3 Tomcat server has *not* been started" >&2
+    echo "!!!!" >&2
+    echo "" >&2
+fi
+    
Index: gs3-extensions/vm-manager/trunk/src/ssh-login-vm.sh
===================================================================
--- gs3-extensions/vm-manager/trunk/src/ssh-login-vm.sh	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/ssh-login-vm.sh	(revision 38640)
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+. ./_local_config.bash
+
+#ssh -i atea-storage--bluff ateaspace@gcloud-ansible.sowemustthink.space
+
+# ssh -i $gsvm_project--$gsvm_subproj $GSVM_USER@gcloud-ansible.sowemustthink.space
+
+ssh -i $gsvm_project--$gsvm_subproj $GSVM_USER@$GSVM_FQDN
Index: gs3-extensions/vm-manager/trunk/src/ssh-provision-vm.sh
===================================================================
--- gs3-extensions/vm-manager/trunk/src/ssh-provision-vm.sh	(revision 38640)
+++ gs3-extensions/vm-manager/trunk/src/ssh-provision-vm.sh	(revision 38640)
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+. ./_local_config.bash
+
+echo "Copying get-and-run-gs3-playbooks.sh to $GSVM_USER@$GSVM_FQDN"
+echo "With the following substitutions:"
+echo "  \$GSVM_USER      -> $GSVM_USER"
+echo "  \$GSVM_INSTANCE  -> $GSVM_INSTANCE"
+echo "  \$GSVM_TL_DOMAIN -> $GSVM_TL_DOMAIN"
+echo "  \$GSVM_FQDN      -> $GSVM_FQDN"
+
+# scp -i $gsvm_project--$gsvm_subproj get-and-run-gs3-playbooks.sh $GSVM_USER@$GSVM_FQDN:.
+cat get-and-run-gs3-playbooks.sh.in \
+    | sed \
+	  -e "s/@GSVM_USER@/$GSVM_USER/g" \
+	  -e "s/@GSVM_INSTANCE@/$GSVM_INSTANCE/g" \
+	  -e "s/@GSVM_TL_DOMAIN@/$GSVM_TL_DOMAIN/g" \
+	  -e "s/@GSVM_FQDN@/$GSVM_FQDN/g" \
+    | ssh -i $gsvm_project--$gsvm_subproj $GSVM_USER@$GSVM_FQDN cat ">" get-and-run-gs3-playbooks.sh 
+
+if [ $? = 0 ] ; then 
+    echo "Running get-and-run-gs3-playbooks.sh on $GSVM_USER@$GSVM_FQDN"
+    ssh -i $gsvm_project--$gsvm_subproj $GSVM_USER@$GSVM_FQDN chmod a+x ./get-and-run-gs3-playbooks.sh \
+	&& ssh -i $gsvm_project--$gsvm_subproj $GSVM_USER@$GSVM_FQDN ./get-and-run-gs3-playbooks.sh
+else
+    echo "Failed to scp get-and-run-gs3-playbooks.sh to $GSVM_USER@$GSVM_FQDN:."
+fi
