Add Vagrantfile and testing script

This commit is contained in:
David Stephens 2018-12-23 23:55:28 +00:00
parent 4d5213756b
commit a7081691f9
5 changed files with 68 additions and 297 deletions

View file

@ -14,6 +14,6 @@ install:
- pip install ansible-lint
script:
- cp ${PWD}/tests/all.yml.test ${PWD}/group_vars/test.yml
- cp ${PWD}/tests/test.yml ${PWD}/group_vars/all.yml
- ansible-lint ${PWD}/nas.yml
- ${PWD}/tests/test.sh

View file

@ -102,8 +102,9 @@ Getting help is easy! You can:
Contributions are welcome, please feel free to raise a PR!
- Please restrict pull requests to one piece of functionality or bugfix at a time.
- Please run `ansible-lint` against the playbook before committing. (There is a VSCode task set up to run the right command for you)
- Restrict pull requests to one piece of functionality or bugfix at a time.
- Test your new functionality or bugfix using the included `tests/test-vagrant.sh` script to spin up a test VM.
- Run `ansible-lint` against the playbook before committing. (There is a VSCode task set up to run the right command for you)
- Please know that your efforts are appreciated, thanks! :+1:
Development of Ansible-NAS is carried out in [Visual Studio Code](https://code.visualstudio.com/) - you'll get some nice

18
Vagrantfile vendored Normal file
View file

@ -0,0 +1,18 @@
Vagrant.require_version ">= 1.7.0"
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/bionic64"
config.ssh.insert_key = false
config.vm.network "private_network", ip: "172.30.1.5"
config.vm.provision "ansible_local" do |ansible|
ansible.galaxy_role_file = "requirements.yml"
ansible.playbook = "nas.yml"
ansible.become = true
ansible.raw_arguments = [
"--extra-vars @tests/test.yml"
]
end
end

View file

@ -1,294 +0,0 @@
###
### Ansible NAS Features
###
# Set these options to true or false to toggle specific features
# External Access
# Traefik will allow access to certain applications externally. To enable this you'll need a domain name that points to your
# home static IP address, or use a dynamic DNS provider like no-ip. You'll also need to map ports 80 and 443 from your router
# to your ansible-nas server.
traefik_enabled: true
# BitTorrent
# If you plan to use Transmission with OpenVPN, you'll need to copy group_vars/vpn_credentials.yml.dist
# to group_vars/vpn_credentials.yml, then update it with your own settings.
transmission_with_openvpn_enabled: false
transmission_enabled: false
# Plex
plex_enabled: false
tautulli_enabled: false
# Emby
emby_enabled: false
# Media Sourcing
sonarr_enabled: false
sickrage_enabled: false
couchpotato_enabled: false
radarr_enabled: false
# System Management
portainer_enabled: true
glances_enabled: true
stats_enabled: false
guacamole_enabled: false
# Backup & Restore
duplicati_enabled: true
nextcloud_enabled: false
gitea_enabled: false
# IRC bouncer
znc_enabled: false
###
### General
###
# Sets the hostname of your Ansible NAS
ansible_nas_hostname: ansible-nas-test
# Sets the timezone for your Ansible NAS
# You can find a list here https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ansible_nas_timezone: Etc/UTC
# Update all apt packages when playbook is run
keep_packages_updated: false
# Will be added to the docker group to give user command line access to docker
ansible_nas_user: david
# Your email and domain, used for LetsEncrypt SSL certs
ansible_nas_email: me@example.com
# Applications will have subdomain SSL certificates created, eg ansible-nas.<your-domain>, nextcloud.<your-domain>
ansible_nas_domain: example.com
###
### Docker
###
# Where you want Docker to store its images and container data.
docker_home: /mnt/Volume2/docker
# Docker storage driver, see https://docs.docker.com/storage/storagedriver/select-storage-driver/#supported-backing-filesystems
# You'll need to change this if your docker_home isn't on zfs and Docker won't start (you'll probably want overlay2 instead)
docker_storage_driver: overlay2
###
### Samba
###
# The location where all shares will be created by default. Can be overridden on a per-share basis.
# This path will be mounted to backup containers, Duplicati
samba_shares_root: /mnt/Volume3
# Where stuff downloaded will be stored
downloads_root: "{{ samba_shares_root }}/downloads"
# Where your movies are stored
movies_root: "{{ samba_shares_root }}/movies"
# Where your TV episodes are stored
tv_root: "{{ samba_shares_root }}/tv"
# Where torrent files are stored (picked up by Transmission for downloading)
torrents_root: "{{ samba_shares_root }}/torrents"
# The account used when Samba shares are accessed. Shouldn't need to change this unless you want to
# mess with Samba user permissions.
samba_guest_account: nobody
# Shares you want published over Samba.
samba_shares:
- name: downloads
comment: 'Stuff downloaded'
guest_ok: yes
public: yes
writable: yes
path: "{{ downloads_root }}"
- name: movies
comment: 'Movies'
guest_ok: yes
public: yes
writable: yes
path: "{{ movies_root }}"
- name: tv
comment: 'TV Episodes'
guest_ok: yes
public: yes
writable: yes
path: "{{ tv_root }}"
- name: dump
comment: 'File dump'
guest_ok: yes
public: yes
writable: yes
path: "{{ samba_shares_root }}/dump"
- name: games
comment: 'Games'
guest_ok: yes
public: yes
writable: yes
path: "{{ samba_shares_root }}/games"
- name: photos
comment: 'Pictures'
guest_ok: yes
public: yes
writable: yes
path: "{{ samba_shares_root }}/photos"
##################################################################
###### You shouldn't need to edit anything below this point ######
##################################################################
###
### Traefik
###
traefik_docker_image: traefik:1.7
traefik_data_directory: "{{ docker_home }}/traefik"
###
### Heimdall
###
heimdall_docker_image: linuxserver/heimdall:latest
heimdall_data_directory: "{{ docker_home }}/heimdall"
###
### Transmission
###
transmission_config_directory: "{{ docker_home }}/transmission/config"
transmission_download_directory: "{{ downloads_root }}"
transmission_watch_directory: "{{ torrents_root }}"
transmission_user_id: 0
transmission_group_id: 0
transmission_local_network: "192.168.1.0/24"
###
### Plex
###
plex_config_directory: "{{ docker_home }}/plex/config"
plex_movies_directory: "{{ movies_root }}"
plex_tv_directory: "{{ tv_root }}"
plex_user_id: 0
plex_group_id: 0
###
### Emby
###
emby_config_directory: "{{ docker_home }}/emby/config"
emby_movies_directory: "{{ movies_root }}"
emby_tv_directory: "{{ tv_root }}"
emby_user_id: 0
emby_group_id: 0
###
### Tautulli
###
tautulli_config_directory: "{{ docker_home }}/tautulli/config"
tautulli_user_id: 0
tautulli_group_id: 0
###
### Duplicati
###
duplicati_data_directory: "{{ docker_home }}/duplicati/config"
###
### Sonarr
###
sonarr_data_directory: "{{ docker_home }}/sonarr/config"
sonarr_tv_directory: "{{ tv_root }}"
sonarr_download_directory: "{{ downloads_root }}"
sonarr_user_id: 0
sonarr_group_id: 0
###
### Radarr
###
radarr_movies_directory: "{{ movies_root }}"
radarr_download_directory: "{{ downloads_root }}"
radarr_data_directory: "{{ docker_home }}/radarr"
radarr_user_id: 0
radarr_group_id: 0
###
### Couchpotato
###
couchpotato_config_directory: "{{ docker_home }}/couchpotato/config"
couchpotato_movies_directory: "{{ movies_root }}"
couchpotato_downloads_directory: "{{ downloads_root }}"
couchpotato_torrents_directory: "{{ torrents_root }}"
couchpotato_user_id: 0
couchpotato_group_id: 0
###
### Sickrage
###
sickrage_config_directory: "{{ docker_home }}/sickrage/config"
sickrage_tv_directory: "{{ tv_root }}"
sickrage_downloads_directory: "{{ downloads_root }}"
sickrage_user_id: 0
sickrage_group_id: 0
###
### OpenVPN
###
openvpn_config_directory: "{{ docker_home }}/openvpn"
###
### Portainer
###
portainer_data_directory: "{{ docker_home }}/portainer/config"
###
### ZNC
###
znc_data_directory: "{{ docker_home }}/znc"
znc_user_id: 0
znc_group_id: 0
###
### Stats
###
telegraf_data_directory: "{{ docker_home }}/telegraf"
influxdb_data_directory: "{{ docker_home }}/influxdb"
grafana_data_directory: "{{ docker_home }}/grafana"
stat_collection_interval: 15s
###
### Gitea
###
gitea_data_directory: "{{ docker_home }}/gitea"
###
### Nextcloud
###
nextcloud_data_directory: "{{ docker_home }}/nextcloud"
###
### nginx
###
nginx_data_directory: "{{ docker_home }}/nginx"
###
### Guacamole
###
guacamole_docker_image: guacamole/guacamole:0.9.14
guacamole_guacd_docker_image: guacamole/guacd:0.9.14
guacamole_data_directory: "{{ docker_home }}/guacamole"

46
tests/test-vagrant.sh Executable file
View file

@ -0,0 +1,46 @@
#!/bin/bash
DIR=$(dirname "$0")
PLAYBOOK_DIR=$DIR/..
header() {
clear
cat << EndOfMessage
▄▄▄ ███▄ █ ██████ ██▓ ▄▄▄▄ ██▓ ▓█████ ███▄ █ ▄▄▄ ██████
▒████▄ ██ ▀█ █ ▒██ ▒ ▓██▒▓█████▄ ▓██▒ ▓█ ▀ ██ ▀█ █ ▒████▄ ▒██ ▒
▒██ ▀█▄ ▓██ ▀█ ██▒░ ▓██▄ ▒██▒▒██▒ ▄██▒██░ ▒███ ▓██ ▀█ ██▒▒██ ▀█▄ ░ ▓██▄
░██▄▄▄▄██ ▓██▒ ▐▌██▒ ▒ ██▒░██░▒██░█▀ ▒██░ ▒▓█ ▄ ▓██▒ ▐▌██▒░██▄▄▄▄██ ▒ ██▒
▓█ ▓██▒▒██░ ▓██░▒██████▒▒░██░░▓█ ▀█▓░██████▒░▒████▒ ▒██░ ▓██░ ▓█ ▓██▒▒██████▒▒
▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░░▓ ░▒▓███▀▒░ ▒░▓ ░░░ ▒░ ░ ░ ▒░ ▒ ▒ ▒▒ ▓▒█░▒ ▒▓▒ ▒ ░
▒ ▒▒ ░░ ░░ ░ ▒░░ ░▒ ░ ░ ▒ ░▒░▒ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░░ ░ ▒░ ▒ ▒▒ ░░ ░▒ ░ ░
░ ▒ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
EndOfMessage
sleep 5
}
log() {
printf "${TIME_FORMAT} %b\n" "$*";
}
fatal_error() {
printf "${TIME_FORMAT} \e[41mERROR:\033[0m %b\n" "$*" >&2;
exit 1
}
test_needs() {
command -v $1 >/dev/null 2>&1 || fatal_error "Testing Ansible-NAS requires $1 but it's not installed. Please install it and try again."
}
testing_init() {
log "Checking Vagrant installation"
test_needs vagrant
}
header
testing_init
log "Starting Vagrant and running playbook"
vagrant up
log "Vagrant up completed, you can connect to the VM at http://172.30.1.5:10080. When you've finished testing, run 'vagrant destroy' to kill the VM."