#!/bin/sh

set -e

SBCONF=/etc/supply-baremetal/supply-baremetal.conf

. /usr/share/openstack-pkg-tools/pkgos_func

if ! [ -e ${SBCONF} ] ; then
	echo "Missing config file"
	exit 1
fi

load_config_file () {
	# Load supply-baremetal.conf
	TMPF=$(mktemp -t $(basename $0)-load-cfg-file.XXXXXX)
	grep -v -E '^\[.*' ${SBCONF} >${TMPF}
	sed -i -e 's/[[:space:]]//g' ${TMPF}
	. ${TMPF}
	rm -f ${TMPF}
}

load_config_file

if [ -z "${machine_ip}" ] ; then
	machine_ip=$(hostname -i)
fi

if [ -z "${machine_hostname}" ] ; then
        machine_hostname=$(hostname --fqdn)
fi

if [ -z "${api_fqdn}" ] ; then
	api_fqdn=$(hostname --fqdn)
fi

if [ -z "${region_name}" ] ; then
	echo "Please set a region_name in supply-baremetal.conf"
fi

fix_random_pass () {
	local VAR_NAME
	VAR_NAME=${1}

	pkgos_inifile get ${SBCONF} passwords ${VAR_NAME}
	if [ "${RET}" = "NOT_FOUND" ] ; then
		PASS=$(openssl rand -hex 32)
		pkgos_add_directive ${SBCONF} passwords ${VAR_NAME}= "# ${VAR_NAME}" ${PASS}
	fi

	load_config_file

	pkgos_inifile get ${SBCONF} passwords ${VAR_NAME}
	if [ -z "${RET}" ] ; then
		PASS=$(openssl rand -hex 32)
		pkgos_inifile set ${SBCONF} passwords ${VAR_NAME} ${PASS}

		load_config_file
	fi
}

load_config_file
fix_random_pass pass_mysql_rootuser
fix_random_pass pass_mysql_backup

fix_random_pass pass_keystone_adminuser
fix_random_pass pass_keystone_db
fix_random_pass pass_keystone_messaging
fix_random_pass pass_keystone_credkey1
fix_random_pass pass_keystone_credkey2
fix_random_pass pass_keystone_fernkey1
fix_random_pass pass_keystone_fernkey2

fix_random_pass pass_haproxy_stats
fix_random_pass pass_nova_messaging
load_config_file

if ! [ -e /var/lib/supply/ssl/ca/supply-pki-supply-ca-chain.pem ] ; then
	supply-gen-pki-root-ca 1>/dev/null 2>/dev/null
fi

supply_pki_root_ca_cert=$(base64 /var/lib/supply/ssl/ca/supply-pki-root-ca.pem | tr -d "\n")
supply_pki_supply_ca_cert=$(base64 /var/lib/supply/ssl/ca/supply-pki-supply-ca.pem | tr -d "\n")
supply_pki_supply_ca_chain=$(base64 /var/lib/supply/ssl/ca/supply-pki-supply-ca-chain.pem | tr -d "\n")

if ! [ -e /var/lib/supply/ssl/slave-nodes/${machine_hostname}/${machine_hostname}.pem ] ; then
	supply-gen-pki-node ${machine_hostname}
fi

supply_pki_machine_cert=$(base64 /var/lib/supply/ssl/slave-nodes/${machine_hostname}/${machine_hostname}.crt | tr -d "\n")
supply_pki_machine_csr=$(base64 /var/lib/supply/ssl/slave-nodes/${machine_hostname}/${machine_hostname}.csr | tr -d "\n")
supply_pki_machine_key=$(base64 /var/lib/supply/ssl/slave-nodes/${machine_hostname}/${machine_hostname}.key | tr -d "\n")
supply_pki_machine_pem=$(base64 /var/lib/supply/ssl/slave-nodes/${machine_hostname}/${machine_hostname}.pem | tr -d "\n")

echo "---"
echo "classes:"
echo "   supply::baremetal::controller:"
echo "      machine_ip: ${machine_ip}"
echo "      machine_hostname: ${machine_hostname}"
echo "      region_name: ${region_name}"

echo "      api_fqdn: ${api_fqdn}"
echo "      controller_ips:"
# TODO: Understand more than one controller
echo "        - ${machine_ip}"
echo "      controller_hostnames:"
echo "        - ${machine_hostname}"
echo "      controller_ids:"
echo "        - 1"

echo "      supply_pki_root_ca_cert: ${supply_pki_root_ca_cert}"
echo "      supply_pki_supply_ca_cert: ${supply_pki_supply_ca_cert}"
echo "      supply_pki_supply_ca_chain: ${supply_pki_supply_ca_chain}"

echo "      supply_pki_machine_cert: ${supply_pki_machine_cert}"
echo "      supply_pki_machine_key: ${supply_pki_machine_key}"
echo "      supply_pki_machine_pem: ${supply_pki_machine_pem}"

# TODO: Make it possible to use an API name different than the machine name
# and understand multi-node setups.
echo "      supply_pki_api_cert: ${supply_pki_machine_cert}"
echo "      supply_pki_api_key: ${supply_pki_machine_key}"
echo "      supply_pki_api_pem: ${supply_pki_machine_pem}"

echo "      pass_mysql_rootuser: ${pass_mysql_rootuser}"
echo "      pass_mysql_backup: ${pass_mysql_backup}"

echo "      pass_keystone_adminuser: ${pass_keystone_adminuser}"
echo "      pass_keystone_db: ${pass_keystone_db}"
echo "      pass_keystone_messaging: ${pass_keystone_messaging}"
echo "      pass_keystone_credkey1: ${pass_keystone_credkey1}"
echo "      pass_keystone_credkey2: ${pass_keystone_credkey2}"
echo "      pass_keystone_fernkey1: ${pass_keystone_fernkey1}"
echo "      pass_keystone_fernkey2: ${pass_keystone_fernkey2}"

echo "      pass_haproxy_stats: ${pass_haproxy_stats}"
echo "      pass_nova_messaging:"

echo "      multinode: false"
echo "      vip_ip: undef"

exit 0
