# The agent waits for the manifest to exist before starting, so the
# file should exist already, but this check is included for robustness.
if [ ! -f "$OCF_RESKEY_pod_manifest" ]; then
ocf_log err "external etcd pod manifest ($OCF_RESKEY_pod_manifest) not found"
exit "$OCF_ERR_INSTALLED"
fi
if ! env_var_value=$(jq -r ".spec.containers[].env[] | select( .name == \"$env_var_name\" ).value" "$OCF_RESKEY_pod_manifest"); then
rc=$?
ocf_log err "could not find environment variable $env_var_name in etcd pod manifest, error code: $rc"
exit "$OCF_ERR_INSTALLED"
fi
ocf_log debug "ETCD pod environment variable $env_var_name: $env_var_value"
echo "$env_var_value"
}
# etcd configuration file expects duration to be expressed in nanoseconds
convert_duration_in_nanoseconds() {
local duration=$1
local value unit nanoseconds
if [ -z "$duration" ]; then
ocf_log err "convert_duration_in_nanoseconds: no duration provided"
return 1
fi
if ! echo "$duration" | grep -qE '^[0-9]+[numµ]?s$'; then
ocf_log err "convert_duration_in_nanoseconds: invalid duration format \"$duration\". Expected format: <number><unit> where unit is one of s, ms, us, µs, ns"
return 1
fi
# Extract numeric value and unit from duration string
value=$(echo "$duration" | sed 's/[^0-9]*$//')
unit=$(echo "$duration" | sed 's/^[0-9]*//')
case "$unit" in
ns)
nanoseconds=$value
;;
us|µs)
nanoseconds=$((value * 1000))
;;
ms)
nanoseconds=$((value * 1000000))
;;
s)
nanoseconds=$((value * 1000000000))
;;
*)
# this should not happen as the input is already validated
ocf_log err "convert_duration_in_nanoseconds: unknown duration unit \"$unit\""
return 1
;;
esac
echo "$nanoseconds"
}
prepare_env() {
local name ip ipurl standalone_node
NODEIP="$(attribute_node_ip get)"
NODEIPURL=$(ip_url $NODEIP)
if is_force_new_cluster; then
ALL_ETCD_ENDPOINTS="$NODEIPURL:2379"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER="$NODENAME=$NODEIPURL:2380"
else
ETCD_INITIAL_CLUSTER_STATE="existing"
for node in $(echo "$OCF_RESKEY_node_ip_map" | sed "s/\s//g;s/;/ /g"); do
name=$(echo "$node" | cut -d: -f1)
ip=$(echo "$node" | cut -d: -f2-) # Grab everything after the first : this covers ipv4/ipv6
ipurl="$(ip_url $ip)"
if [ -z "$name" ] || [ -z "$ip" ]; then
ocf_exit_reason "name or ip missing for 1 or more nodes"