208 lines
3.9 KiB
Bash
Executable File
208 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
WORKDIR="./.terraform"
|
|
TERRA="terraform"
|
|
PACKER_ROOT="./.packer"
|
|
|
|
[ -f /etc/lsb-release ] && source /etc/lsb-release
|
|
|
|
# FIXME
|
|
function needGitPull()
|
|
{
|
|
br=$(git branch --show-current)
|
|
diff=$(git rev-list HEAD...origin/master --count)
|
|
return ${diff}
|
|
}
|
|
|
|
## Install & Uninstall ##
|
|
function install_hashicorp_tools()
|
|
{
|
|
packer_version="1.6.1"
|
|
terraform_version="0.14.3"
|
|
ansible_version="2.9.19"
|
|
if [[ ${DISTRIB_ID} == "ManjaroLinux" ]]
|
|
then
|
|
pacman -Syq make ansible terraform packer --noconfirm
|
|
return ${?}
|
|
elif [[ ${DISTRIB_ID} == "Ubuntu" ]]
|
|
then
|
|
apt-get update
|
|
apt-get -y install software-properties-common make
|
|
gpg_key_url="https://apt.releases.hashicorp.com/gpg"
|
|
|
|
curl -fsSL ${gpg_key_url} | apt-key add -
|
|
apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
|
|
apt-add-repository --yes --update ppa:ansible/ansible
|
|
apt-get update
|
|
apt-get -y install --allow-downgrades ansible=${ansible_version} terraform=${terraform_version} packer=${packer_version}
|
|
return ${?}
|
|
fi
|
|
}
|
|
|
|
function setup_nginx()
|
|
{
|
|
root=${1}
|
|
|
|
if [ -d /etc/nginx/web.d ]
|
|
then
|
|
sed -i -e "s!%%ROOT%%!${root}!g" ${root}/.configs/nginx/fabrica.conf
|
|
ln -s ${root}/.configs/nginx/fabrica.conf /etc/nginx/web.d/
|
|
echo "Don't forget to restart nginx"
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
function install_fabrica()
|
|
{
|
|
root=${1}
|
|
[ ! -d ${root} ] && mkdir -p $root
|
|
cp -rp * ${root}
|
|
cp -rp .packer ${root}
|
|
cp -rp .terraform ${root}
|
|
cp -rp .configs ${root}
|
|
return ${?}
|
|
}
|
|
|
|
function install()
|
|
{
|
|
ROOT=${2}
|
|
ret=0
|
|
|
|
if [[ -z ${ROOT} ]]
|
|
then
|
|
echo "You need to provide an installation directory as paramter"
|
|
echo "./fabrica install /srv/fabrica"
|
|
return 1
|
|
fi
|
|
|
|
if [[ -e ${ROOT}/.ist ]]
|
|
then
|
|
echo "Flag file ${ROOT}/.ist exists !"
|
|
echo " ==> Fabrica is allready installed !"
|
|
echo "Nothing to do !"
|
|
return 0
|
|
fi
|
|
|
|
install_hashicorp_tools
|
|
ret=$((ret+${?}))
|
|
|
|
install_fabrica ${ROOT}
|
|
ret=$((ret+${?}))
|
|
|
|
setup_nginx ${ROOT}
|
|
ret=$((ret+${?}))
|
|
|
|
if [ ${ret} -eq 0 ]
|
|
then
|
|
touch ${ROOT}/.ist
|
|
fi
|
|
return ${ret}
|
|
}
|
|
|
|
## TERRAFORM ##
|
|
# Run Terraform command with the correct options
|
|
function trun()
|
|
{
|
|
#needGitPull
|
|
cd ${WORKDIR}
|
|
if [[ ${?} -ne 0 ]]
|
|
then
|
|
echo "Branch is not up 2 date !"
|
|
echo "--> Git pull needed !"
|
|
return 1
|
|
fi
|
|
|
|
VAR_FILES=$(ls tfvars/*.tfvars)
|
|
OPTS=""
|
|
for fl in ${VAR_FILES}
|
|
do
|
|
OPTS="${OPTS} -var-file ${fl}"
|
|
done
|
|
|
|
${TERRA} ${1} ${OPTS}
|
|
res=${?}
|
|
cd -
|
|
|
|
return ${res}
|
|
}
|
|
|
|
# Run terraform plan
|
|
function plan()
|
|
{
|
|
trun plan
|
|
return $?
|
|
}
|
|
|
|
# Run terraform apply
|
|
function apply()
|
|
{
|
|
trun apply
|
|
return $?
|
|
}
|
|
|
|
# Run terraform destroy
|
|
function destroy()
|
|
{
|
|
trun destroy
|
|
return $?
|
|
}
|
|
|
|
# Run terraform taint
|
|
function taint()
|
|
{
|
|
target=$1
|
|
resource=$2
|
|
|
|
cd ${WORKDIR}
|
|
|
|
$TERRA taint module.vms[${resource}].opennebula_template.vm_template
|
|
$TERRA taint module.vms[${resource}].opennebula_virtual_machine.vm
|
|
$TERRA taint module.vms[${resource}].opennebula_image.system
|
|
cd -
|
|
|
|
}
|
|
|
|
# Run terraform taint for all resources
|
|
function taint_all()
|
|
{
|
|
target=$1
|
|
resource=$2
|
|
cd ${WORKDIR}
|
|
|
|
$TERRA taint module.vms[${resource}].opennebula_template.vm_template
|
|
$TERRA taint module.vms[${resource}].opennebula_virtual_machine.vm
|
|
$TERRA taint module.vms[${resource}].opennebula_image.system
|
|
$TERRA taint module.vms[${resource}].opennebula_image.data
|
|
|
|
cd -
|
|
}
|
|
|
|
# Run terraform init
|
|
function init()
|
|
{
|
|
trun init
|
|
return ${?}
|
|
}
|
|
|
|
## PACKER ##
|
|
|
|
# Run packer build
|
|
function build()
|
|
{
|
|
target=$2
|
|
cd ${PACKER_ROOT}
|
|
echo "Building ${target}"
|
|
make ${target}
|
|
return ${?}
|
|
}
|
|
|
|
# List available recipes
|
|
function recipes()
|
|
{
|
|
echo "Need to be done"
|
|
}
|
|
|
|
$1 $@
|
|
exit ${?}
|