Catching up with current dev
This commit is contained in:
49
bin/deploy-role
Executable file
49
bin/deploy-role
Executable file
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Role is first argument
|
||||
role="$1"
|
||||
if [ -z "$role" ]; then
|
||||
echo Need a role as first argument.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Handle verbosity
|
||||
if [ "$1" == "-v" ]; then
|
||||
set -x
|
||||
shift
|
||||
role="$1"
|
||||
fi
|
||||
|
||||
# Handle usage
|
||||
if [ "$role" == "-h" ] || [ "$role" == "--help" ]; then
|
||||
echo "Usage: $0 -h"
|
||||
echo " $0 \$role \$targetgroup [\$optional_inventory]"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Find the root of the git clone
|
||||
while [ ! -d .git ]; do
|
||||
cd ..
|
||||
if [ "$PWD" == '/' ]; then
|
||||
echo "This needs to be run from the Ubiqtorate checkout"
|
||||
exit 3
|
||||
fi
|
||||
done
|
||||
|
||||
# Get the targetgroup
|
||||
targetgroup="$2"
|
||||
if [ -z "$targetgroup" ]; then
|
||||
echo Need a group
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Allow an inventory override
|
||||
inventory="$3"
|
||||
if [ -z "$inventory" ]; then
|
||||
inventory=examples/msn0.yml
|
||||
fi
|
||||
|
||||
# Invoke the one-role playbook for the role on the targetgroup
|
||||
ansible-playbook -i "$inventory" -e "role=$role" -e "targets=$targetgroup" playbooks/one-role.yml
|
||||
# and return the exit status
|
||||
exit $?
|
24
bin/full-deploy
Executable file
24
bin/full-deploy
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Arguments
|
||||
inventory="$1"
|
||||
if [ "$inventory" == "-h" ] || [ "$inventory" == "--help" ]; then
|
||||
echo "Usage: $0 -h # Usage"
|
||||
echo " $0 # Run a complete deployment."
|
||||
exit 0
|
||||
elif [ -z "$inventory" ]; then
|
||||
inventory="examples/msn0.yml"
|
||||
fi
|
||||
|
||||
# Find the root of the git clone
|
||||
while [ ! -d .git ]; do
|
||||
cd ..
|
||||
if [ "$PWD" == '/' ]; then
|
||||
echo "This needs to be run from the Ubiqtorate checkout"
|
||||
exit 3
|
||||
fi
|
||||
done
|
||||
|
||||
ansible-playbook -i examples/msn0.yml playbooks/deploy.yml
|
||||
|
||||
|
95
bin/generate-systemd-vms.py
Executable file
95
bin/generate-systemd-vms.py
Executable file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env python3
|
||||
# File: generate-systemd-vms.py
|
||||
#
|
||||
# Description: This file generates the systemd.service files that run our VM's
|
||||
#
|
||||
# Package: AniNIX/Ubiqtorate
|
||||
# Copyright: WTFPL
|
||||
#
|
||||
# Author: DarkFeather <darkfeather@aninix.net>
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import yaml
|
||||
|
||||
filepath="roles/Node/files/vm-definitions/"
|
||||
|
||||
def WriteVMFile(content,hosttype,hostclass):
|
||||
### Create the service files for the hosts
|
||||
# param content: the yaml content to parse
|
||||
# param hosttype: managed or unmanaged
|
||||
# param hostclass: the type of host as classified in the yaml
|
||||
|
||||
global filepath
|
||||
|
||||
for host in content['all']['children'][hosttype]['children'][hostclass]['hosts']:
|
||||
|
||||
cores = 0
|
||||
memory = 0
|
||||
vnc = 0
|
||||
disks = ''
|
||||
mac = ''
|
||||
bridge = ''
|
||||
|
||||
# Make sure the host definition has all the critera
|
||||
try:
|
||||
cores = str(content['all']['children'][hosttype]['children'][hostclass]['hosts'][host]['cores'])
|
||||
memory = str(content['all']['children'][hosttype]['children'][hostclass]['hosts'][host]['memory'])
|
||||
vnc = str(content['all']['children'][hosttype]['children'][hostclass]['hosts'][host]['vnc'])
|
||||
disks = ' '.join(content['all']['children'][hosttype]['children'][hostclass]['hosts'][host]['disks'])
|
||||
mac = content['all']['children'][hosttype]['children'][hostclass]['hosts'][host]['mac']
|
||||
bridge = content['all']['children'][hosttype]['children'][hostclass]['hosts'][host]['bridge']
|
||||
except Exception as e:
|
||||
print('Host ' + host + " doesn't have the attributes needed to be a VM -- skipping.")
|
||||
print(e)
|
||||
1 == 1
|
||||
|
||||
# Write the file.
|
||||
with open(filepath+host+'-vm.service','w') as vmfile:
|
||||
vmfile.write('[Unit]\n')
|
||||
vmfile.write('Description=AniNIX/' + host + '\n')
|
||||
vmfile.write('After=network.target\n')
|
||||
vmfile.write('\n')
|
||||
vmfile.write('[Service]\n')
|
||||
vmfile.write('ExecStart=/usr/sbin/qemu-system-x86_64 -name AniNIX/' + host + ' -machine type=pc,accel=kvm')
|
||||
if 'uefi' in content['all']['children'][hosttype]['children'][hostclass]['hosts'][host].keys(): vmfile.write(' -bios /usr/share/edk2-ovmf/x64/OVMF.fd')
|
||||
vmfile.write(' -cpu qemu64 -smp ' + cores + ' ' + disks + ' -net nic,macaddr=' + mac + ',model=virtio -net bridge,br=' + bridge + ' -vga std -nographic -vnc :' + str(vnc) + ' -m size=' + str(memory) + 'G -device virtio-rng-pci\n')
|
||||
vmfile.write('ExecReload=/bin/kill -HUP $MAINPID\n')
|
||||
vmfile.write('KillMode=process\n')
|
||||
vmfile.write('Restart=always\n')
|
||||
vmfile.write('User=root\n')
|
||||
vmfile.write('Group=root\n')
|
||||
vmfile.write('\n')
|
||||
vmfile.write('[Install]\n')
|
||||
vmfile.write('WantedBy=multi-user.target\n')
|
||||
print(host+'-vm.service')
|
||||
|
||||
def GenerateFiles(file):
|
||||
### Open the file and parse it
|
||||
# param file: the file to work on
|
||||
|
||||
global filepath
|
||||
|
||||
try:
|
||||
shutil.rmtree(filepath)
|
||||
except:
|
||||
1 == 1
|
||||
finally:
|
||||
os.mkdir(filepath)
|
||||
|
||||
# Parse the yaml
|
||||
with open(file, 'r') as stream:
|
||||
content = yaml.safe_load(stream)
|
||||
|
||||
# Add service files for each host
|
||||
WriteVMFile(content,'managed','virtual')
|
||||
WriteVMFile(content,'unmanaged','ovas')
|
||||
#WriteVMFile(content,'unmanaged','appliances')
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 2:
|
||||
print("You need to supply an inventory file.")
|
||||
sys.exit(1)
|
||||
GenerateFiles(sys.argv[1])
|
||||
sys.exit(0)
|
18
bin/reverse-copy
Normal file
18
bin/reverse-copy
Normal file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
if [ "$USER" != root ]; then
|
||||
sudo $0 $@
|
||||
exit 0
|
||||
fi
|
||||
|
||||
grep -A 2 copy: tasks/main.yml | tr '\n' ' ' | sed 's/--/\n/g' | while read copyline; do
|
||||
dest="$(echo "$copyline" | sed 's/ /\n/g' | grep src: | awk '{ print $2; }' )"
|
||||
src="$(echo "$copyline" | sed 's/ /\n/g' | grep dest: | awk '{ print $2; }' )"
|
||||
if [ -d "$src" ]; then
|
||||
cp -r "$src"/* files/"$dest"
|
||||
else
|
||||
cp -r "$src" files/"$dest"
|
||||
fi
|
||||
chown -R "$SUDO_USER": files/"$dest"
|
||||
done
|
91
bin/tmux-hosts
Executable file
91
bin/tmux-hosts
Executable file
@@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
|
||||
# File: tmux-hosts
|
||||
#
|
||||
# Description: This script allows you to open groups of hosts in 2x2 tmux panes
|
||||
#
|
||||
# Package: AniNIX/Ubiqtorate
|
||||
# Copyright: WTFPL
|
||||
#
|
||||
# Author: DarkFeather <ircs://irc.aninix.net:6697/DarkFeather>
|
||||
|
||||
# Sanity
|
||||
set -Eo pipefail
|
||||
|
||||
# Defaults
|
||||
group=all
|
||||
offset=0
|
||||
unset inventory
|
||||
|
||||
function usage() {
|
||||
# Show helptext
|
||||
# param retcode: what to exit
|
||||
retcode="$1"
|
||||
echo "Usage: $0 [ -o offset ] [-g group ] -i inventory.yml"
|
||||
echo " $0 -h"
|
||||
echo "Group is optional -- add it if you only want to look at a specific subset."
|
||||
echo "Add -v for verbosity."
|
||||
exit "$retcode"
|
||||
}
|
||||
|
||||
function tmuxHosts() {
|
||||
# Open hosts in Tmux -- ported from pnp/misc-scripts.git geotmux
|
||||
# param host1: the first host
|
||||
# param host2: the second host
|
||||
# param host3: the third host
|
||||
# param host4: the fourth host
|
||||
host1="$1"
|
||||
host2="$2"
|
||||
host3="$3"
|
||||
host4="$4"
|
||||
name="ansible-tmux-$offset"
|
||||
|
||||
# If no TMUX session started, then add one with four panes.
|
||||
if [ -z "$TMUX" ]; then
|
||||
tmux new-session -s "$name" -d "/bin/bash -l -c ssh\\ $host1"
|
||||
tmux select-window -t "$name":0
|
||||
tmux split-window "/bin/bash -l -c ssh\\ $host2"
|
||||
tmux split-window -h -t 0 "/bin/bash -l -c ssh\\ $host3"
|
||||
tmux select-window -t "$name":1
|
||||
tmux split-window -h -t 2 "/bin/bash -l -c ssh\\ $host4"
|
||||
tmux setw synchronize-panes
|
||||
tmux a -d -t "$name"
|
||||
# Otherwise, add a new window to the current session with all four sessions.
|
||||
else
|
||||
tmux new-window -n "$name" "/bin/bash -l -c ssh\\ $host1"
|
||||
tmux select-window -t "$name"
|
||||
tmux split-window "/bin/bash -l -c ssh\\ $host2"
|
||||
tmux select-window -t "$name"
|
||||
tmux split-window -h -t 0 "/bin/bash -l -c ssh\\ $host3"
|
||||
tmux select-window -t "$name"
|
||||
tmux split-window -h -t 2 "/bin/bash -l -c ssh\\ $host4"
|
||||
tmux setw synchronize-panes
|
||||
tmux select-window -t "$name"
|
||||
fi
|
||||
}
|
||||
|
||||
# main
|
||||
if [ "$(basename $0)" == "tmux-hosts" ]; then
|
||||
while getopts 'g:hi:o:v' OPTION; do
|
||||
case "${OPTION}" in
|
||||
g) group="${OPTARG}" ;;
|
||||
h) echo Open Ansible hosts in TMUX panes.; usage 0 ;;
|
||||
i) inventory="${OPTARG}" ;;
|
||||
o) offset="${OPTARG}" ;;
|
||||
v) set -x ;;
|
||||
*) usage 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$inventory" ]; then
|
||||
echo Need an inventory.
|
||||
usage 2;
|
||||
fi
|
||||
|
||||
tmuxHosts $(ansible -i "$inventory" --list-hosts "$group"\
|
||||
| grep -v hosts\ \( \
|
||||
| sed 's/\s\+//g' \
|
||||
| if [ $offset -gt 0 ]; then head -n -"${offset}"; else cat; fi \
|
||||
| head -n 4 \
|
||||
| tr '\n' ' ')
|
||||
fi
|
Reference in New Issue
Block a user