Compare commits

...

10 commits

Author SHA1 Message Date
1bf9fc95ab Merge pull request 'testing' (#1) from testing into prod
Reviewed-on: #1
2024-12-25 22:44:33 -06:00
88f7f7ed55 updated build_ansible.sh and privtorrents template to include ansible tags 2024-12-25 22:42:19 -06:00
d1f0aa8848 update 2024-10-07 22:00:16 -05:00
6526d7bf2b update 2024-10-05 19:17:01 -05:00
1a6356a44a update 2024-10-05 18:50:14 -05:00
a34df88a5d testing 2024-10-05 18:39:21 -05:00
0912b451f2 Update 2024-10-05 18:21:13 -05:00
8e171bb79d fixed some issue 2024-10-05 18:11:45 -05:00
8dc583b44e "fixed a few issues" 2024-10-05 17:51:31 -05:00
251f879b1b added initial test files 2024-10-05 17:38:38 -05:00
6 changed files with 171 additions and 1 deletions

View file

@ -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

128
build_ansible.sh Normal file
View file

@ -0,0 +1,128 @@
#!/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" != "3" ];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}:`date +%s` > /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" != "1" ];then
echo "failed to grab current playbook build file for $fqdn, exiting"
exit
fi
# build playbook, retrieve roles and add variables to roles
mkdir -p /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: localhost
become: true
roles:" > /ansible/new/$fqdn.yml
while read line
do
elements=()
for e in $(echo $line | tr ":" "\n"); do elements+=("$e");done
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-${elements[1]}.git /ansible/new/roles/${elements[1]}
# verify branch was cloned successfully
count=`ls /ansible/new/roles/${elements[1]}/ | wc -l`
if [[ $count -lt 5 ]];then
echo "issue grabbing role $role - dir/file count less than 9, exiting"
exit
fi
#get tags and add role
if [ -n "${elements[3]}" ];then
tags="\"${elements[3]//,/\",\"}\""
echo " - { role: ${elements[1]}, tags: [${tags}] }" >> /ansible/new/$fqdn.yml
else
echo " - ${elements[1]}" >> /ansible/new/$fqdn.yml
fi
# retrieve var file if it exists
curl -k "https://git.actcur.com/actcur-ansible/playbook-builder/raw/branch/$branch/var_files/${elements[1]}/$fqdn" -H "accept: application/raw" -o /tmp/main.yml
# /ansible/new/roles/${elements[1]}/vars/main.yml
# verifty file was downloaded successfully
count=`grep -P "(---)|(end of file)" /tmp/main.yml | wc -l`
if [ "$count" == "2" ];then
mv /tmp/main.yml /ansible/new/roles/${elements[1]}/vars/main.yml
fi
;;
"#*")
# this is a comment, ignore it
;;
*)
echo "skipping invalid entry in playbook build file for $fqdn"
echo "entry: $line"
;;
esac
done </tmp/$fqdn
rm -r /ansible/prev/*
mv /ansible/$fqdn.yml /ansible/prev/
mv /ansible/roles/ /ansible/prev
mv /ansible/new/* /ansible/
cd /ansible
ansible-playbook ${fqdn}.yml
# end of build_ansible.sh

View file

@ -0,0 +1,7 @@
role:core:v1.0:core
role:mount:v1.0:core,mount
role:deluge:v1.0:workload,deluge
role:nginx-ssl:v1.0:common,nginx-ssl
role:certbot:v1.0:common,certbot
# end of file

View file

@ -0,0 +1,7 @@
---
# vars file for certbot on privtorrents.actcur.com
domains:
- domain: privtorrents.actcur.com
# end of file

View file

@ -0,0 +1,12 @@
---
# vars file for mount on privtorrents.actcur.com
mounts:
nfs:
- name: deluge
host: host.actcur.com
remote: /mnt/butter/video/deluge
local: /mnt/deluge
type: nfs
# end of file

View file

@ -0,0 +1,8 @@
---
# vars file for nginx-ssl on privtorrents.actcur.com
domains:
- domain: privtorrents.actcur.com
port: 8112
# end of file