2018-11-11 08:19:04 -08:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
set -e
|
2018-08-27 20:37:35 -07:00
|
|
|
|
2018-09-06 10:34:24 -07:00
|
|
|
cd "$(dirname "$0")"/..
|
2018-12-22 12:34:30 -08:00
|
|
|
source ci/upload-ci-artifact.sh
|
2018-07-16 12:05:48 -07:00
|
|
|
|
2018-09-06 10:34:24 -07:00
|
|
|
zone=
|
2018-12-05 16:40:08 -08:00
|
|
|
bootstrapFullNodeAddress=
|
|
|
|
bootstrapFullNodeMachineType=
|
2018-09-06 10:34:24 -07:00
|
|
|
clientNodeCount=0
|
2018-12-05 16:40:08 -08:00
|
|
|
additionalFullNodeCount=10
|
2018-09-06 10:34:24 -07:00
|
|
|
publicNetwork=false
|
2019-04-26 21:09:25 -07:00
|
|
|
stopNetwork=false
|
2019-04-28 19:50:02 -07:00
|
|
|
reuseLedger=false
|
|
|
|
skipCreate=false
|
2019-04-02 10:54:30 -07:00
|
|
|
skipStart=false
|
|
|
|
externalNode=false
|
2019-04-27 21:31:36 -07:00
|
|
|
failOnValidatorBootupFailure=true
|
2018-11-07 13:32:48 -08:00
|
|
|
tarChannelOrTag=edge
|
2018-09-06 10:34:24 -07:00
|
|
|
delete=false
|
2018-09-26 10:27:31 -07:00
|
|
|
enableGpu=false
|
2019-01-09 15:59:44 -08:00
|
|
|
bootDiskType=""
|
2019-02-21 15:35:26 -08:00
|
|
|
blockstreamer=false
|
2019-04-30 09:21:07 -07:00
|
|
|
deployUpdateManifest=true
|
|
|
|
fetchLogs=true
|
2019-05-18 14:01:36 -07:00
|
|
|
maybeHashesPerTick=
|
2019-07-09 13:39:55 -07:00
|
|
|
maybeStakeNodesInGenesisBlock=
|
|
|
|
maybeExternalPrimordialAccountsFile=
|
|
|
|
maybeLamports=
|
2019-07-09 20:54:05 -07:00
|
|
|
maybeLetsEncrypt=
|
2018-08-27 20:37:35 -07:00
|
|
|
|
2018-09-06 10:34:24 -07:00
|
|
|
usage() {
|
|
|
|
exitcode=0
|
|
|
|
if [[ -n "$1" ]]; then
|
|
|
|
exitcode=1
|
|
|
|
echo "Error: $*"
|
|
|
|
fi
|
|
|
|
cat <<EOF
|
2019-04-05 10:45:28 -07:00
|
|
|
usage: $0 -p network-name -C cloud -z zone1 [-z zone2] ... [-z zoneN] [options...]
|
2018-09-06 10:34:24 -07:00
|
|
|
|
|
|
|
Deploys a CD testnet
|
|
|
|
|
2019-04-05 09:41:25 -07:00
|
|
|
mandatory arguments:
|
2019-04-05 10:45:28 -07:00
|
|
|
-p [network-name] - name of the network
|
2019-04-05 09:41:25 -07:00
|
|
|
-C [cloud] - cloud provider to use (gce, ec2)
|
|
|
|
-z [zone] - cloud provider zone to deploy the network into. Must specify at least one zone
|
2018-09-06 10:34:24 -07:00
|
|
|
|
|
|
|
options:
|
2018-11-07 10:33:20 -08:00
|
|
|
-t edge|beta|stable|vX.Y.Z - Deploy the latest tarball release for the
|
|
|
|
specified release channel (edge|beta|stable) or release tag
|
|
|
|
(vX.Y.Z)
|
2018-11-07 13:32:48 -08:00
|
|
|
(default: $tarChannelOrTag)
|
2018-12-05 16:40:08 -08:00
|
|
|
-n [number] - Number of additional full nodes (default: $additionalFullNodeCount)
|
|
|
|
-c [number] - Number of client bencher nodes (default: $clientNodeCount)
|
2019-02-21 15:35:26 -08:00
|
|
|
-u - Include a Blockstreamer (default: $blockstreamer)
|
2018-09-06 10:34:24 -07:00
|
|
|
-P - Use public network IP addresses (default: $publicNetwork)
|
2019-05-17 20:06:07 -07:00
|
|
|
-G - Enable GPU, and set count/type of GPUs to use (e.g n1-standard-16 --accelerator count=2,type=nvidia-tesla-v100)
|
2018-09-26 10:27:31 -07:00
|
|
|
-g - Enable GPU (default: $enableGpu)
|
2018-12-05 16:40:08 -08:00
|
|
|
-a [address] - Set the bootstrap fullnode's external IP address to this GCE address
|
2019-01-09 15:59:44 -08:00
|
|
|
-d [disk-type] - Specify a boot disk type (default None) Use pd-ssd to get ssd on GCE.
|
|
|
|
-D - Delete the network
|
2019-01-08 14:28:46 -08:00
|
|
|
-r - Reuse existing node/ledger configuration from a
|
2019-02-16 10:01:27 -08:00
|
|
|
previous |start| (ie, don't run ./multinode-demo/setup.sh).
|
2019-04-26 09:02:23 -07:00
|
|
|
-x - External node. Default: false
|
2019-04-28 19:50:02 -07:00
|
|
|
-e - Skip create. Assume the nodes have already been created
|
2019-04-26 09:02:23 -07:00
|
|
|
-s - Skip start. Nodes will still be created or configured, but network software will not be started.
|
|
|
|
-S - Stop network software without tearing down nodes.
|
2019-04-27 21:31:36 -07:00
|
|
|
-f - Discard validator nodes that didn't bootup successfully
|
2019-07-09 13:39:55 -07:00
|
|
|
--stake-internal-nodes NUM_LAMPORTS
|
|
|
|
- Amount to stake internal nodes. If set, airdrops are disabled.
|
|
|
|
--external-accounts-file FILE_PATH
|
|
|
|
- Path to external Primordial Accounts file, if it exists.
|
2019-05-18 14:01:36 -07:00
|
|
|
--hashes-per-tick NUM_HASHES|sleep|auto
|
|
|
|
- Override the default --hashes-per-tick for the cluster
|
2019-07-09 13:39:55 -07:00
|
|
|
--lamports NUM_LAMPORTS
|
|
|
|
- Specify the number of lamports to mint (default 100000000000000)
|
|
|
|
--skip-deploy-update
|
|
|
|
- If set, will skip software update deployment
|
|
|
|
--skip-remote-log-retrieval
|
|
|
|
- If set, will not fetch logs from remote nodes
|
2019-07-09 15:45:46 -07:00
|
|
|
--letsencrypt [dns name]
|
|
|
|
- Attempt to generate a TLS certificate using this DNS name
|
|
|
|
|
2018-09-06 10:34:24 -07:00
|
|
|
Note: the SOLANA_METRICS_CONFIG environment variable is used to configure
|
|
|
|
metrics
|
|
|
|
EOF
|
|
|
|
exit $exitcode
|
|
|
|
}
|
2018-09-06 08:29:43 -07:00
|
|
|
|
2019-04-05 09:41:25 -07:00
|
|
|
zone=()
|
2018-07-12 19:47:07 -07:00
|
|
|
|
2019-05-18 14:01:36 -07:00
|
|
|
shortArgs=()
|
|
|
|
while [[ -n $1 ]]; do
|
|
|
|
if [[ ${1:0:2} = -- ]]; then
|
|
|
|
if [[ $1 = --hashes-per-tick ]]; then
|
|
|
|
maybeHashesPerTick="$1 $2"
|
|
|
|
shift 2
|
2019-07-09 13:39:55 -07:00
|
|
|
elif [[ $1 = --lamports ]]; then
|
|
|
|
maybeLamports="$1 $2"
|
|
|
|
shift 2
|
|
|
|
elif [[ $1 = --stake-internal-nodes ]]; then
|
|
|
|
maybeStakeNodesInGenesisBlock="$1 $2"
|
|
|
|
shift 2
|
|
|
|
elif [[ $1 = --external-accounts-file ]]; then
|
|
|
|
maybeExternalPrimordialAccountsFile="$1 $2"
|
|
|
|
shift 2
|
|
|
|
elif [[ $1 = --skip-deploy-update ]]; then
|
|
|
|
deployUpdateManifest=false
|
|
|
|
shift 1
|
|
|
|
elif [[ $1 = --skip-remote-log-retrieval ]]; then
|
|
|
|
fetchLogs=false
|
|
|
|
shift 1
|
2019-07-09 15:45:46 -07:00
|
|
|
elif [[ $1 = --letsencrypt ]]; then
|
2019-07-09 20:54:05 -07:00
|
|
|
maybeLetsEncrypt="$1 $2"
|
2019-07-09 15:45:46 -07:00
|
|
|
shift 2
|
2019-05-18 14:01:36 -07:00
|
|
|
else
|
|
|
|
usage "Unknown long option: $1"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
shortArgs+=("$1")
|
|
|
|
shift
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2019-05-18 18:59:01 -07:00
|
|
|
while getopts "h?p:Pn:c:t:gG:a:Dd:rusxz:p:C:Sfew" opt "${shortArgs[@]}"; do
|
2018-09-06 10:34:24 -07:00
|
|
|
case $opt in
|
|
|
|
h | \?)
|
|
|
|
usage
|
2018-07-20 08:50:08 -07:00
|
|
|
;;
|
2019-04-05 10:45:28 -07:00
|
|
|
p)
|
2019-04-05 09:41:25 -07:00
|
|
|
netName=$OPTARG
|
|
|
|
;;
|
|
|
|
C)
|
|
|
|
cloudProvider=$OPTARG
|
|
|
|
;;
|
|
|
|
z)
|
|
|
|
zone+=("$OPTARG")
|
|
|
|
;;
|
2018-09-06 10:34:24 -07:00
|
|
|
P)
|
|
|
|
publicNetwork=true
|
|
|
|
;;
|
2018-09-07 08:05:52 -07:00
|
|
|
n)
|
2018-12-05 16:40:08 -08:00
|
|
|
additionalFullNodeCount=$OPTARG
|
2018-09-07 08:05:52 -07:00
|
|
|
;;
|
2018-09-06 10:34:24 -07:00
|
|
|
c)
|
|
|
|
clientNodeCount=$OPTARG
|
|
|
|
;;
|
2018-10-30 18:05:38 -07:00
|
|
|
t)
|
|
|
|
case $OPTARG in
|
2018-11-07 10:33:20 -08:00
|
|
|
edge|beta|stable|v*)
|
2018-11-07 13:32:48 -08:00
|
|
|
tarChannelOrTag=$OPTARG
|
2018-10-30 18:05:38 -07:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
usage "Invalid release channel: $OPTARG"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
;;
|
2018-09-26 10:27:31 -07:00
|
|
|
g)
|
|
|
|
enableGpu=true
|
|
|
|
;;
|
2018-09-27 13:42:24 -07:00
|
|
|
G)
|
|
|
|
enableGpu=true
|
2018-12-05 16:40:08 -08:00
|
|
|
bootstrapFullNodeMachineType=$OPTARG
|
2018-09-27 13:42:24 -07:00
|
|
|
;;
|
2018-09-06 10:34:24 -07:00
|
|
|
a)
|
2018-12-05 16:40:08 -08:00
|
|
|
bootstrapFullNodeAddress=$OPTARG
|
2018-09-06 10:34:24 -07:00
|
|
|
;;
|
|
|
|
d)
|
2019-01-09 15:59:44 -08:00
|
|
|
bootDiskType=$OPTARG
|
|
|
|
;;
|
|
|
|
D)
|
2018-09-06 10:34:24 -07:00
|
|
|
delete=true
|
2018-07-20 08:50:08 -07:00
|
|
|
;;
|
2019-01-08 14:28:46 -08:00
|
|
|
r)
|
2019-04-28 19:50:02 -07:00
|
|
|
reuseLedger=true
|
|
|
|
;;
|
|
|
|
e)
|
|
|
|
skipCreate=true
|
2019-01-08 14:28:46 -08:00
|
|
|
;;
|
2019-04-02 10:54:30 -07:00
|
|
|
s)
|
|
|
|
skipStart=true
|
|
|
|
;;
|
|
|
|
x)
|
|
|
|
externalNode=true
|
|
|
|
;;
|
2019-04-27 21:31:36 -07:00
|
|
|
f)
|
|
|
|
failOnValidatorBootupFailure=false
|
|
|
|
;;
|
2019-02-17 10:45:21 -08:00
|
|
|
u)
|
2019-02-21 15:35:26 -08:00
|
|
|
blockstreamer=true
|
2019-02-17 10:45:21 -08:00
|
|
|
;;
|
2019-04-26 09:02:23 -07:00
|
|
|
S)
|
|
|
|
stopNetwork=true
|
|
|
|
;;
|
2019-04-30 09:21:07 -07:00
|
|
|
w)
|
|
|
|
fetchLogs=false
|
|
|
|
deployUpdateManifest=false
|
|
|
|
;;
|
2018-07-20 08:50:08 -07:00
|
|
|
*)
|
2019-05-18 14:01:36 -07:00
|
|
|
usage "Unknown option: $opt"
|
2018-07-20 08:50:08 -07:00
|
|
|
;;
|
|
|
|
esac
|
2018-09-06 10:34:24 -07:00
|
|
|
done
|
2018-08-02 20:39:19 -07:00
|
|
|
|
2019-04-05 09:41:25 -07:00
|
|
|
[[ -n $netName ]] || usage
|
|
|
|
[[ -n $cloudProvider ]] || usage "Cloud provider not specified"
|
2019-04-05 09:41:25 -07:00
|
|
|
[[ -n ${zone[*]} ]] || usage "At least one zone must be specified"
|
2019-04-05 09:41:25 -07:00
|
|
|
|
2018-12-22 12:22:58 -08:00
|
|
|
shutdown() {
|
|
|
|
exitcode=$?
|
|
|
|
|
|
|
|
set +e
|
2018-12-23 09:11:15 -08:00
|
|
|
if [[ -d net/log ]]; then
|
|
|
|
mv net/log net/log-deploy
|
|
|
|
for logfile in net/log-deploy/*; do
|
|
|
|
if [[ -f $logfile ]]; then
|
|
|
|
upload-ci-artifact "$logfile"
|
|
|
|
tail "$logfile"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
2018-12-22 12:22:58 -08:00
|
|
|
exit $exitcode
|
|
|
|
}
|
2018-12-23 09:11:15 -08:00
|
|
|
rm -rf net/{log,-deploy}
|
2018-12-22 12:22:58 -08:00
|
|
|
trap shutdown EXIT INT
|
|
|
|
|
2018-09-06 10:34:24 -07:00
|
|
|
set -x
|
2018-07-23 14:49:51 -07:00
|
|
|
|
2019-04-05 09:41:25 -07:00
|
|
|
# Build a string to pass zone opts to $cloudProvider.sh: "-z zone1 -z zone2 ..."
|
2019-04-05 12:06:58 -07:00
|
|
|
zone_args=()
|
2019-04-05 09:41:25 -07:00
|
|
|
for val in "${zone[@]}"; do
|
2019-04-05 12:40:28 -07:00
|
|
|
zone_args+=("-z $val")
|
2019-04-05 09:41:25 -07:00
|
|
|
done
|
|
|
|
|
2019-04-26 09:02:23 -07:00
|
|
|
if $stopNetwork; then
|
2019-04-28 19:50:02 -07:00
|
|
|
skipCreate=true
|
2019-04-26 09:02:23 -07:00
|
|
|
fi
|
|
|
|
|
2019-04-26 20:12:27 -07:00
|
|
|
if $delete; then
|
2019-04-28 19:50:02 -07:00
|
|
|
skipCreate=false
|
2019-04-26 20:12:27 -07:00
|
|
|
fi
|
|
|
|
|
2019-04-26 09:02:23 -07:00
|
|
|
# Create the network
|
2019-04-28 19:50:02 -07:00
|
|
|
if ! $skipCreate; then
|
2019-01-08 14:28:46 -08:00
|
|
|
echo "--- $cloudProvider.sh delete"
|
2019-04-05 13:02:19 -07:00
|
|
|
# shellcheck disable=SC2068
|
2019-04-05 12:40:28 -07:00
|
|
|
time net/"$cloudProvider".sh delete ${zone_args[@]} -p "$netName" ${externalNode:+-x}
|
2019-01-08 14:28:46 -08:00
|
|
|
if $delete; then
|
|
|
|
exit 0
|
|
|
|
fi
|
2018-07-23 14:49:51 -07:00
|
|
|
|
2019-01-08 14:28:46 -08:00
|
|
|
echo "--- $cloudProvider.sh create"
|
|
|
|
create_args=(
|
|
|
|
-p "$netName"
|
|
|
|
-a "$bootstrapFullNodeAddress"
|
|
|
|
-c "$clientNodeCount"
|
|
|
|
-n "$additionalFullNodeCount"
|
|
|
|
)
|
2019-04-05 13:02:19 -07:00
|
|
|
# shellcheck disable=SC2206
|
2019-04-05 12:40:28 -07:00
|
|
|
create_args+=(${zone_args[@]})
|
2019-01-09 15:59:44 -08:00
|
|
|
|
2019-07-09 21:26:56 -07:00
|
|
|
if [[ -n $maybeLetsEncrypt ]]; then
|
|
|
|
# shellcheck disable=SC2206 # Do not want to quote $maybeLetsEncrypt
|
|
|
|
create_args+=($maybeLetsEncrypt)
|
|
|
|
fi
|
|
|
|
|
2019-02-21 15:35:26 -08:00
|
|
|
if $blockstreamer; then
|
2019-02-17 10:45:21 -08:00
|
|
|
create_args+=(-u)
|
|
|
|
fi
|
|
|
|
|
2019-01-09 15:59:44 -08:00
|
|
|
if [[ -n $bootDiskType ]]; then
|
|
|
|
create_args+=(-d "$bootDiskType")
|
|
|
|
fi
|
|
|
|
|
2019-01-08 14:28:46 -08:00
|
|
|
if $enableGpu; then
|
|
|
|
if [[ -z $bootstrapFullNodeMachineType ]]; then
|
|
|
|
create_args+=(-g)
|
|
|
|
else
|
|
|
|
create_args+=(-G "$bootstrapFullNodeMachineType")
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if $publicNetwork; then
|
|
|
|
create_args+=(-P)
|
|
|
|
fi
|
|
|
|
|
2019-04-02 10:54:30 -07:00
|
|
|
if $externalNode; then
|
|
|
|
create_args+=(-x)
|
|
|
|
fi
|
|
|
|
|
2019-04-27 21:31:36 -07:00
|
|
|
if ! $failOnValidatorBootupFailure; then
|
|
|
|
create_args+=(-f)
|
|
|
|
fi
|
|
|
|
|
2019-01-08 14:28:46 -08:00
|
|
|
time net/"$cloudProvider".sh create "${create_args[@]}"
|
|
|
|
else
|
|
|
|
echo "--- $cloudProvider.sh config"
|
|
|
|
config_args=(
|
|
|
|
-p "$netName"
|
|
|
|
)
|
2019-04-05 13:02:19 -07:00
|
|
|
# shellcheck disable=SC2206
|
2019-04-05 12:40:28 -07:00
|
|
|
config_args+=(${zone_args[@]})
|
2019-01-08 14:28:46 -08:00
|
|
|
if $publicNetwork; then
|
|
|
|
config_args+=(-P)
|
|
|
|
fi
|
|
|
|
|
2019-04-28 19:50:02 -07:00
|
|
|
if $externalNode; then
|
|
|
|
config_args+=(-x)
|
|
|
|
fi
|
|
|
|
|
2019-04-27 21:31:36 -07:00
|
|
|
if ! $failOnValidatorBootupFailure; then
|
|
|
|
config_args+=(-f)
|
|
|
|
fi
|
|
|
|
|
2019-01-08 14:28:46 -08:00
|
|
|
time net/"$cloudProvider".sh config "${config_args[@]}"
|
|
|
|
fi
|
2018-09-06 10:34:24 -07:00
|
|
|
net/init-metrics.sh -e
|
2018-09-06 20:38:11 -07:00
|
|
|
|
2019-01-16 09:46:56 -08:00
|
|
|
echo "+++ $cloudProvider.sh info"
|
|
|
|
net/"$cloudProvider".sh info
|
|
|
|
|
2019-04-26 09:02:23 -07:00
|
|
|
if $stopNetwork; then
|
|
|
|
echo --- net.sh stop
|
|
|
|
time net/net.sh stop
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2018-12-23 09:11:15 -08:00
|
|
|
ok=true
|
2019-04-02 10:54:30 -07:00
|
|
|
if ! $skipStart; then
|
|
|
|
(
|
2019-04-28 19:50:02 -07:00
|
|
|
if $skipCreate; then
|
2019-04-02 10:54:30 -07:00
|
|
|
# TODO: Enable rolling updates
|
|
|
|
#op=update
|
|
|
|
op=restart
|
|
|
|
else
|
|
|
|
op=start
|
|
|
|
fi
|
2019-04-28 19:50:02 -07:00
|
|
|
echo "--- net.sh $op"
|
2019-04-29 21:38:03 -07:00
|
|
|
args=("$op" -t "$tarChannelOrTag")
|
2019-04-28 19:50:02 -07:00
|
|
|
|
|
|
|
if ! $publicNetwork; then
|
2019-04-29 21:38:03 -07:00
|
|
|
args+=(-o rejectExtraNodes)
|
2019-04-28 19:50:02 -07:00
|
|
|
fi
|
|
|
|
if [[ -n $NO_VALIDATOR_SANITY ]]; then
|
2019-04-29 21:38:03 -07:00
|
|
|
args+=(-o noValidatorSanity)
|
2019-04-28 19:50:02 -07:00
|
|
|
fi
|
|
|
|
if [[ -n $NO_LEDGER_VERIFY ]]; then
|
2019-04-29 21:38:03 -07:00
|
|
|
args+=(-o noLedgerVerify)
|
2019-04-28 19:50:02 -07:00
|
|
|
fi
|
2019-06-05 15:31:29 -07:00
|
|
|
if [[ -n $NO_INSTALL_CHECK ]]; then
|
|
|
|
args+=(-o noInstallCheck)
|
|
|
|
fi
|
2019-05-18 14:01:36 -07:00
|
|
|
if [[ -n $maybeHashesPerTick ]]; then
|
|
|
|
# shellcheck disable=SC2206 # Do not want to quote $maybeHashesPerTick
|
|
|
|
args+=($maybeHashesPerTick)
|
|
|
|
fi
|
2019-04-28 19:50:02 -07:00
|
|
|
if $reuseLedger; then
|
2019-04-29 21:38:03 -07:00
|
|
|
args+=(-r)
|
|
|
|
fi
|
|
|
|
|
|
|
|
if ! $failOnValidatorBootupFailure; then
|
|
|
|
args+=(-F)
|
2019-04-28 19:50:02 -07:00
|
|
|
fi
|
2019-01-08 14:28:46 -08:00
|
|
|
|
2019-06-07 12:59:58 -07:00
|
|
|
if $deployUpdateManifest; then
|
|
|
|
rm -f update_manifest_keypair.json
|
|
|
|
args+=(--deploy-update linux)
|
|
|
|
args+=(--deploy-update osx)
|
2019-06-07 20:46:58 -07:00
|
|
|
args+=(--deploy-update windows)
|
2019-04-10 16:46:30 -07:00
|
|
|
fi
|
|
|
|
|
2019-07-09 13:39:55 -07:00
|
|
|
if [[ -n $maybeStakeNodesInGenesisBlock ]]; then
|
|
|
|
# shellcheck disable=SC2206 # Do not want to quote $maybeStakeNodesInGenesisBlock
|
|
|
|
args+=($maybeStakeNodesInGenesisBlock)
|
|
|
|
fi
|
|
|
|
if [[ -n $maybeExternalPrimordialAccountsFile ]]; then
|
|
|
|
# shellcheck disable=SC2206 # Do not want to quote $maybeExternalPrimordialAccountsFile
|
|
|
|
args+=($maybeExternalPrimordialAccountsFile)
|
|
|
|
fi
|
|
|
|
if [[ -n $maybeLamports ]]; then
|
|
|
|
# shellcheck disable=SC2206 # Do not want to quote $maybeLamports
|
|
|
|
args+=($maybeLamports)
|
|
|
|
fi
|
|
|
|
|
2019-04-29 21:38:03 -07:00
|
|
|
time net/net.sh "${args[@]}"
|
2019-04-02 10:54:30 -07:00
|
|
|
) || ok=false
|
|
|
|
|
2019-04-30 09:21:07 -07:00
|
|
|
if $fetchLogs; then
|
|
|
|
net/net.sh logs
|
|
|
|
fi
|
2019-04-02 10:54:30 -07:00
|
|
|
fi
|
2018-12-23 09:11:15 -08:00
|
|
|
|
|
|
|
$ok
|