added initial test files
This commit is contained in:
parent
56cae79813
commit
251f879b1b
4 changed files with 141 additions and 1 deletions
10
README.md
10
README.md
|
@ -1 +1,9 @@
|
|||
This repository is used to build playbooks based on files that contain role name and version number.
|
||||
This repository is used to build playbooks based on files that contain role name and version number.
|
||||
|
||||
Usage:
|
||||
|
||||
First, define a branch to use in /ansible/branch.
|
||||
Next, download just the file build_ansible.sh with the following command:
|
||||
```curl -k "https://git.actcur.com/actcur-ansible/playbook-builder/raw/branch/prod/build_ansible.sh" -H "accept: application/raw" -o /ansible/build_ansible.sh```
|
||||
Note: the prod version of this script can be used. If there is a branch mismatch, this script will download the correct version and restart
|
||||
Finally, run build_ansible.sh
|
120
build_ansible.sh
Normal file
120
build_ansible.sh
Normal file
|
@ -0,0 +1,120 @@
|
|||
#!/bin/bash
|
||||
# ensure we are running the latest version of the script from the correct branch
|
||||
if [ -f /ansible/branch ];
|
||||
then
|
||||
branch=`cat /ansible/branch`
|
||||
else
|
||||
branch="prod"
|
||||
fi
|
||||
|
||||
#determine if we need to download the latest version
|
||||
regrab=false
|
||||
if [ -f /ansible/current ]; then
|
||||
latest=`cat /ansible/current`
|
||||
echo $latest
|
||||
l_branch=`echo "$latest" | grep -Po ".+:" | grep -Po "[^:]+"`
|
||||
l_time=`echo "$latest" | grep -Po ":.+" | grep -Po "[^:]+"`
|
||||
if [ ! "$l_branch" = "$branch" ]; then
|
||||
regrab=true
|
||||
else
|
||||
c_time=`date +%s`
|
||||
if [ `expr $c_time - $l_time` -gt 120 ]; then
|
||||
regrab=true
|
||||
fi
|
||||
fi
|
||||
else
|
||||
regrab=true
|
||||
fi
|
||||
|
||||
if $regrab;then
|
||||
# download latest version
|
||||
curl -k "https://git.actcur.com/actcur-ansible/playbook-builder/raw/branch/$branch/build_ansible.sh" -H "accept: application/raw" -o /tmp/build_ansible.sh
|
||||
|
||||
# verify that download was sucessful
|
||||
count=`grep -P "(#!/bin/bash)|(end of build_ansible.sh)" /tmp/build_ansible.sh | wc -l`
|
||||
if [ "$count" != "2" ];then
|
||||
echo "failed to grab latest build_ansible.sh file, exiting"
|
||||
exit
|
||||
fi
|
||||
|
||||
# update build_ansible file and update branch/timestamp info in current
|
||||
cp /tmp/build_ansible.sh /ansible/build_ansible.sh
|
||||
echo ${branch}:$c_time > /ansible/current
|
||||
|
||||
# verify the parent script is not build_ansible.sh (to prevent the possibility of recurring until the system crashes in the case of an issue)
|
||||
me=$(basename "$0")
|
||||
parent=$(ps -o args= $PPID)
|
||||
if [[ "$PARENT" != *"$ME"* ]];then
|
||||
/bin/bash /ansible/build_ansible.sh
|
||||
fi
|
||||
exit
|
||||
fi
|
||||
|
||||
fqdn=`hostnamectl hostname`
|
||||
curl -k "https://git.actcur.com/actcur-ansible/playbook-builder/raw/branch/$branch/playbook_templates/$fqdn" -H "accept: application/raw" -o /tmp/$fqdn
|
||||
|
||||
# verify file was downloaded successfully
|
||||
count=`grep -P "end of file" /tmp/$fqdn | wc -l`
|
||||
if [ "$count" != "2" ];then
|
||||
echo "failed to grab current playbook build file for $fqdn, exiting"
|
||||
exit
|
||||
fi
|
||||
|
||||
# build playbook, retrieve roles and add variables to roles
|
||||
mkdir /ansible/roles/
|
||||
mkdir -p /ansible/new/roles
|
||||
mkdir -p /ansible/prev/roles
|
||||
# delete roles from previous attempt to update them
|
||||
rm -r /ansible/new/roles/*
|
||||
|
||||
# create base playbook
|
||||
echo "- hosts: $fqdn
|
||||
become: true
|
||||
|
||||
roles:" > /ansible/new/$fqdn.yml
|
||||
|
||||
lines=`cat /tmp/$fqdn`
|
||||
for line in $lines
|
||||
do
|
||||
elements=()
|
||||
for element in $(echo $line | tr ";" "\n"); do elements+=("$e")
|
||||
case ${elements[0]} in
|
||||
"role")
|
||||
# format role:role name:branch/tag to use
|
||||
# clone role repo from specific tag/branch w/o history
|
||||
git clone -b ${elements[2]} --depth 1 https://git.actcur.com/actcur-ansible/role-${element[1]}.git:/ansible/new/${element[0]}
|
||||
|
||||
# verify branch was cloned successfully
|
||||
count=`ls /new/$role/ | wc -l`
|
||||
if [[ $count -lt 9 ]];then
|
||||
echo "issue grabbing role $role - dir/file count less than 9, exiting"
|
||||
exit
|
||||
fi
|
||||
mv /tmp/roles/${element[0]} /ansible/new/roles
|
||||
echo " - nginx-ssl" >> /ansible/new/$fqdn.yml
|
||||
|
||||
# retrieve var file if it exists
|
||||
curl -k "https://git.actcur.com/actcur-ansible/playbook-builder/raw/branch/$branch/var_files/${elements[0]}/$fqdn" -H "accept: application/raw" -o /ansible/new/roles/vars/main.yml
|
||||
|
||||
# verifty file was downloaded successfully
|
||||
count=`grep -P "(---)|(end of file)" /tmp/build_ansible.sh | wc -l`
|
||||
if [ "$count" != "2" ];then
|
||||
echo "issue grabbing vars file for ${element[0]} role on $fqdn - either file is invalid or download filed, exiting"
|
||||
exit
|
||||
fi
|
||||
;;
|
||||
"#*")
|
||||
# this is a comment, ignore it
|
||||
;;
|
||||
*)
|
||||
echo "skipping invalid entry in playbook build file for $fqdn"
|
||||
echo "entry: $line"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
rm -r /ansible/prev/*
|
||||
mv /ansible/$fqdn.yml /ansible/prev/
|
||||
mv /ansible/roles/ /ansible/prev
|
||||
mv /ansible/new /ansible
|
||||
|
||||
# end of build_ansible.sh
|
5
playbook_templates/privtorrents.actcur.com
Normal file
5
playbook_templates/privtorrents.actcur.com
Normal file
|
@ -0,0 +1,5 @@
|
|||
role:deluge:branch:testing
|
||||
role:nginx-ssl:branch:testing
|
||||
role:certbot:branch:testing
|
||||
|
||||
# end of file
|
7
var_files/nginx-ssl/privtorrents.actcur.com
Normal file
7
var_files/nginx-ssl/privtorrents.actcur.com
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
# vars file for nginx-ssl on privtorrents.actcur.com
|
||||
|
||||
privtorrents.actcur.com:
|
||||
port: 8112
|
||||
|
||||
# end of file
|
Loading…
Add table
Reference in a new issue