Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Try 'skip_role_on_error: True' in default_vars.yml for more uninterrupted installs of IIAB Apps ['./iiab-install --risky' if you want to live on the wild side, forcing it too to use 'skip_role_on_error: True'] #3262

Merged
merged 5 commits into from
Jun 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 4 additions & 4 deletions iiab-from-cmdline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
become: yes

vars_files:
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- /etc/iiab/iiab_state.yml
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- /etc/iiab/iiab_state.yml

roles:
- { role: 0-init }
Expand Down
8 changes: 4 additions & 4 deletions iiab-from-console.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
become: yes

vars_files:
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- /etc/iiab/iiab_state.yml
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- /etc/iiab/iiab_state.yml

roles:
- { role: 0-init }
Expand Down
86 changes: 57 additions & 29 deletions iiab-install
Original file line number Diff line number Diff line change
@@ -1,17 +1,57 @@
#!/bin/bash -e
# Running from a git repo
# Add cmdline options for passing to ansible
# Todo add proper shift to gobble up --debug --reinstall

PLAYBOOK=iiab-stages.yml
INVENTORY=ansible_hosts
IIAB_STATE_FILE=/etc/iiab/iiab_state.yml
ARGS=""
ARGS="--extra-vars {" # Needs boolean not string so use JSON list. bash forces {...} to '{...}' for Ansible

CWD=`pwd`
OS=`grep ^ID= /etc/os-release | cut -d= -f2`
OS=${OS//\"/}
OS=${OS//\"/} # Remove all '"'
MIN_RPI_KERN=5.4.0 # Do not use 'rpi-update' unless absolutely necessary: https://github.com/iiab/iiab/issues/1993
MIN_ANSIBLE_VER=2.11.6 # Ansible 2.8.3 and 2.8.6 had serious bugs, preventing their use with IIAB.
MIN_ANSIBLE_VER=2.12.7 # Ansible 2.8.3 and 2.8.6 had serious bugs, preventing their use with IIAB.

REINSTALL=false
DEBUG=false
SKIP_ROLE_ON_ERROR=false

usage() {
echo -e "\n\e[1mUse './iiab-install' for regular installs, or to continue an install."
echo -e "Use './iiab-install --risky' to force 'skip_role_on_error: True'"
echo -e "Use './iiab-install --reinstall' to force running all Stages 0-9, followed by the Network Role."
echo -e "Use './iiab-install --debug' to run Stage 0, followed by Stages 3-9, followed by the Network Role."
echo -e "Use './iiab-configure' to run Stage 0, followed by Stages 4-9."
echo -e "Use './runrole' to run Stage 0, followed by a single Stage or Role."
echo -e "Use './iiab-network' to run Stage 0, followed by the Network Role.\e[0m\n"
}

# https://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash/14203146#14203146
while [[ $# -gt 0 ]]; do
case $1 in
--reinstall)
REINSTALL=true
shift
;;
--debug)
DEBUG=true
shift
;;
-r|--risky)
SKIP_ROLE_ON_ERROR=true
shift
;;
*)
usage
exit 1
;;
esac
done

ARGS="$ARGS\"skip_role_on_error\":$SKIP_ROLE_ON_ERROR" # Needs boolean not
# string so use JSON list. Ansible permits these boolean values: (refresher)
# https://github.com/iiab/iiab/blob/master/roles/0-init/tasks/validate_vars.yml#L19-L43

if [ ! -f /etc/iiab/local_vars.yml ]; then

Expand All @@ -27,11 +67,11 @@ if [ ! -f /etc/iiab/local_vars.yml ]; then

echo -e "\nEXITING: /opt/iiab/iiab/iiab-install REQUIRES /etc/iiab/local_vars.yml\n" >&2

echo -e "(1) Please read http://wiki.laptop.org/go/IIAB/local_vars.yml to learn more" >&2
echo -e "(2) MIN/MEDIUM/BIG samples are included in /opt/iiab/iiab/vars" >&2
echo -e "(1) See http://FAQ.IIAB.IO -> What is local_vars.yml and how do I customize it?" >&2
echo -e "(2) SMALL/MEDIUM/LARGE samples are included in /opt/iiab/iiab/vars" >&2
echo -e "(3) NO TIME FOR DETAILS? RUN INTERNET-IN-A-BOX'S FRIENDLY 1-LINE INSTALLER:\n" >&2

echo -e ' http://download.iiab.io\n' >&2
echo -e ' https://download.iiab.io\n' >&2

exit 1
fi
Expand All @@ -57,16 +97,6 @@ if [ ! -f $PLAYBOOK ]; then
exit 1
fi

if [ "$1" != "--debug" ] && [ "$1" != "--reinstall" ] && [ "$1" != "" ]; then
echo "Use './iiab-install' for regular installs, or to continue an install."
echo "Use './iiab-install --reinstall' to force running all Stages 0-9, followed by the Network Role."
echo "Use './iiab-install --debug' to run Stage 0, followed by Stages 3-9, followed by the Network Role."
echo "Use './iiab-configure' to run Stage 0, followed by Stages 4-9."
echo "Use './runrole' to run Stage 0, followed by a single Stage or Role."
echo "Use './iiab-network' to run Stage 0, followed by the Network Role."
exit 1
fi

# Subroutine compares software version numbers. Generates rare false positives
# like "1.0 > 1" and "2.4.0 > 2.4". Avoid risks by structuring conditionals w/
# a consistent # of decimal points e.g. "if version_gt w.x.y.z a.b.c.d; then"
Expand Down Expand Up @@ -125,27 +155,23 @@ if [ -f /etc/iiab/iiab.env ]; then
fi
fi

if [ "$1" == "--reinstall" ]; then
if $($REINSTALL); then
STAGE=0
ARGS="$ARGS"" --extra-vars reinstall=True"
#ARGS="$ARGS"" --extra-vars reinstall=True"
ARGS="$ARGS,\"reinstall\":True" # Needs boolean not string so use JSON list
sed -i 's/^STAGE=.*/STAGE=0/' /etc/iiab/iiab.env
echo "Wrote STAGE=0 (counter) to /etc/iiab/iiab.env"
elif [ "$STAGE" -ge 2 ] && [ "$1" == "--debug" ]; then
elif [ "$STAGE" -ge 2 ] && $($DEBUG); then
STAGE=2
sed -i 's/^STAGE=.*/STAGE=2/' /etc/iiab/iiab.env
echo "Wrote STAGE=2 (counter) to /etc/iiab/iiab.env"
elif [ "$STAGE" -eq 9 ]; then
echo -e "\nEXITING: STAGE (counter) in /etc/iiab/iiab.env shows Stage 9 Is Already Done."
echo -e "Use './iiab-install --reinstall' to force running all Stages 0-9, followed by the Network Role."
echo -e "Use './iiab-install --debug' to run Stage 0, followed by Stages 3-9, followed by the Network Role."
echo -e "Use './iiab-configure' to run Stage 0, followed by Stages 4-9."
echo -e "Use './runrole' to run Stage 0, followed by a single Stage or Role."
echo -e "Use './iiab-network' to run Stage 0, followed by the Network Role.\n\n"

echo -e "\n\e[1mEXITING: STAGE (counter) in /etc/iiab/iiab.env shows Stage 9 Is Already Done.\e[0m"
usage
exit 0 # Allows rerunning http://download.iiab.io/install.txt
fi
fi
if [ "$STAGE" -lt 2 ] && [ "$1" == "--debug" ]; then
if [ "$STAGE" -lt 2 ] && $($DEBUG); then
echo -e "\n'--debug' *ignored* as STAGE (counter) < 2."
fi

Expand All @@ -168,6 +194,8 @@ export ANSIBLE_LOG_PATH="$CWD""/iiab-install.log"

ansible -m setup -i $INVENTORY localhost --connection=local | grep python
ansible -m setup -i $INVENTORY localhost --connection=local >> /dev/null # So vars are recorded in /opt/iiab/iiab/iiab-install.log
ansible-playbook -i $INVENTORY $PLAYBOOK ${ARGS} --connection=local
ARGS="$ARGS}"
echo -e "\nNOW RUN: ansible-playbook -i $INVENTORY $PLAYBOOK $ARGS --connection=local\n"
ansible-playbook -i $INVENTORY $PLAYBOOK $ARGS --connection=local

echo -e "./iiab-install $* COMPLETED IN $CWD\n\n"
8 changes: 4 additions & 4 deletions iiab-network.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
become: yes

vars_files:
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- /etc/iiab/iiab_state.yml
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- /etc/iiab/iiab_state.yml

roles:
- { role: 0-init }
Expand Down
10 changes: 5 additions & 5 deletions iiab-stages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
become: yes

vars_files:
- roles/0-init/defaults/main.yml
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- /etc/iiab/iiab_state.yml
- roles/0-init/defaults/main.yml
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- /etc/iiab/iiab_state.yml

tasks:

Expand Down
6 changes: 3 additions & 3 deletions install-support.yml → install-support.yml.unused
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
become: yes

vars_files:
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml

roles:
- { role: 0-init }
Expand Down
8 changes: 4 additions & 4 deletions run-one-role.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
become: yes

vars_files:
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- /etc/iiab/iiab_state.yml
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- /etc/iiab/iiab_state.yml

roles:
- { role: 0-init }
Expand Down
7 changes: 4 additions & 3 deletions runrole
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ INSTALL=false
ENABLED=false
REINSTALL=false
CWD=`pwd`
ARGS="--extra-vars {" # bash forces {...} to '{...}' for Ansible, SEE BOTTOM
#ARGS="--extra-vars {"
ARGS="--extra-vars {\"skip_role_on_error\":False," # bash forces {...} to '{...}' for Ansible, SEE BOTTOM (IFS-like issue)
INVENTORY=ansible_hosts
PLAYBOOK=run-one-role.yml

Expand Down Expand Up @@ -44,7 +45,7 @@ fi
#fi

if [ "$1" == "--reinstall" ]; then
ARGS="$ARGS\"reinstall\":True," # Needs boolean not string so use JSON list
ARGS="$ARGS\"reinstall\":True," # Needs boolean not string so use JSON list
REINSTALL=true
shift
fi
Expand Down Expand Up @@ -110,7 +111,7 @@ else
export ANSIBLE_LOG_PATH="$CWD/iiab-debug.log"
fi

ARGS="$ARGS\"role_to_run\":\"$1\"}" # $1 works like \"$1\" if str validated
ARGS="$ARGS\"role_to_run\":\"$1\"}" # $1 works like \"$1\" if str type validated
CMD="ansible-playbook -i $INVENTORY $PLAYBOOK --connection=local $ARGS"
echo -e "\e[1mbash will now run this, adding single quotes around the {...} curly braces:\e[0m\n\n$CMD\n"
ansible -m setup -i $INVENTORY localhost --connection=local | grep python
Expand Down
6 changes: 3 additions & 3 deletions runroles-base.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
become: yes

vars_files:
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml
- vars/default_vars.yml
- vars/{{ ansible_local.local_facts.os_ver }}.yml
- /etc/iiab/local_vars.yml

roles:
- { role: 0-init }
10 changes: 5 additions & 5 deletions test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
become: yes # Optional privilege escalation

#vars_files:
#- roles/0-init/defaults/main.yml
#- vars/default_vars.yml
#- vars/{{ ansible_local.local_facts.os_ver }}.yml
#- /etc/iiab/local_vars.yml
#- /etc/iiab/iiab_state.yml
# - roles/0-init/defaults/main.yml
# - vars/default_vars.yml
# - vars/{{ ansible_local.local_facts.os_ver }}.yml
# - /etc/iiab/local_vars.yml
# - /etc/iiab/iiab_state.yml

#roles:
# - { role: 0-init }
Expand Down
6 changes: 5 additions & 1 deletion vars/default_vars.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@
iiab_base_ver: 8.0
iiab_revision: 0

skip_role_on_error: False
# 2022-06-23: ./iiab-install (with 'sudo iiab') follow the traditional linear
# install path, intentionally overriding this value, until "SOFTWARE INSTALL IS
# COMPLETE". But you can run './iiab-install --risky' if you truly need
# iiab-install to run with 'skip_role_on_error: True' (PRs #3255, #3256, #3262)
skip_role_on_error: True

iiab_etc_path: /etc/iiab

Expand Down