You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.6 KiB

#!/usr/bin/env sh
# Deploy script for HPE iLO4
#
# The following environment variables are
# needed for the deploy script to work:
#
# ```sh
# export HPILO_USERNAME=admin
# export HPILO_PASSWORD=secret
# export HPILO_HOST=ilo.example.com
#
# acme.sh --deploy -d ilo.example.com --deploy-hook hpilo
# ```
######## Public functions #####################
#domain keyfile certfile cafile fullchain
hpilo_deploy() {
_cdomain="$1"
_ckey="$2"
_ccert="$3"
_cca="$4"
_cfullchain="$5"
if [ -f "$DOMAIN_CONF" ]; then
# shellcheck disable=SC1090
. "$DOMAIN_CONF"
fi
_debug _cdomain "$_cdomain"
_debug _ckey "$_ckey"
_debug _ccert "$_ccert"
_debug _cca "$_cca"
_debug _cfullchain "$_cfullchain"
# iLO host is optional, use _cdomain if not provided
if [ -n "$HPILO_HOST" ]; then
Le_Deploy_ilo_host="$HPILO_HOST"
_savedomainconf Le_Deploy_ilo_host "$Le_Deploy_ilo_host"
elif [ -z "$Le_Deploy_ilo_host" ]; then
_debug "Using _cdomain as iLO host, set HPILO_HOST if not correct."
Le_Deploy_ilo_host="$_cdomain"
fi
# iLO username is required
if [ -z "$HPILO_USERNAME" ]; then
if [ -z "$Le_Deploy_ilo_username" ]; then
_err "HPILO_USERNAME is not defined."
return 1
fi
else
Le_Deploy_ilo_username="$HPILO_USERNAME"
_savedomainconf Le_Deploy_ilo_username "$Le_Deploy_ilo_username"
fi
# iLO password is required
if [ -z "$HPILO_PASSWORD" ]; then
if [ -z "$Le_Deploy_ilo_password" ]; then
_err "HPILO_PASSWORD is not defined."
return 1
fi
else
Le_Deploy_ilo_password="$HPILO_PASSWORD"
_savedomainconf Le_Deploy_ilo_password "$Le_Deploy_ilo_password"
fi
_info "Attempting to deploy certificate '$_ccert' to '$Le_Deploy_ilo_host'"
ilo_credentials="${Le_Deploy_ilo_username}:${Le_Deploy_ilo_password}"
_secure_debug "HPILO_USERNAME:HPILO_PASSWORD" "$ilo_credentials"
ilo_credentials_encoded=$(printf "%s" "$ilo_credentials" | _base64)
export _H1="Authorization: Basic ${ilo_credentials_encoded}"
_debug3 _H1 "$_H1"
ilo_redfish_httpscert_uri="https://${Le_Deploy_ilo_host}/redfish/v1/Managers/1/SecurityService/HttpsCert/"
_debug2 ilo_redfish_httpscert_uri "$ilo_redfish_httpscert_uri"
ilo_redfish_httpscert_body="{ \"Action\": \"ImportCertificate\", \"Certificate\": \"$(cat "$_ccert")\" }"
# Do not check for a valid SSL certificate, because initially the cert is not valid, so it could not install the LE generated certificate
export HTTPS_INSECURE=1
_post "$ilo_redfish_httpscert_body" "$ilo_redfish_httpscert_uri" "" "POST" "application/json"
_ret="$?"
if [ "$_ret" != "0" ]; then
_err "Error code $_ret returned from iLO Redfish API"
fi
return $_ret
}