Skip to content

Commit 453a1d4

Browse files
committed
Fix bin/setup to use stored values. Simplify Makefile.
1 parent 3646e98 commit 453a1d4

File tree

5 files changed

+78
-34
lines changed

5 files changed

+78
-34
lines changed

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ group_vars/
33
.vault_pass.txt
44
*.retry
55
.tmp*
6+
.bootstrap_done

Diff for: Makefile

+15-17
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Makefile for mail server setup
22
#
3-
.PHONY: all bootstrap mailserver rebootstrap reset clean \
4-
edit edit_secrets redo save help
3+
.PHONY: all bootstrap mailserver reset clean \
4+
edit edit_secrets save help setup rebootstrap
55

66
USER_VAR = deploy_user_name
77
VAR_FILE = group_vars/all/vars.yml
@@ -17,43 +17,41 @@ endif
1717

1818
EDITOR ?= vi
1919

20-
all:
21-
@if [ ! -r $(VAR_FILE) ]; then \
22-
./bin/setup; \
23-
if [ $$? -ne 0 ]; then exit $$?; fi; \
24-
make bootstrap; \
25-
fi; \
26-
make mailserver
20+
all: setup bootstrap mailserver
21+
22+
setup:
23+
@./bin/setup
2724

2825
help:
2926
@echo "all (default) - bootstrap if needed, then deploy mailserver."
3027
@echo "bootstrap - run the bootstrap playbook as user root"
28+
@echo "rebootstrap - run the bootstrap playbook as deploy user"
3129
@echo "mailserver - deploy mail server stack (as deploy user)"
32-
@echo "rebootstrap - run the bootstrap playbook as deploy user."
3330
@echo "reset - delete inventory and variables for a fresh start."
3431
@echo "clean - remove any *.retry files."
3532
@echo "edit - run EDITOR (default vi) on variables file."
3633
@echo "edit_secrets - decrypt, run EDITOR on secrets file, then encrypt."
37-
@echo "redo - re-run bootstrap and mailserver playbooks (as deploy user)"
3834
@echo "save - save variables and inventory in backup/domain-YYYYMMDD-hhmm.tgz"
3935
@echo "help - print this message."
4036

4137
mailserver:
4238
@echo "Running playbooks using $(DEPLOY_USER) user"
4339
ansible-playbook -u $(DEPLOY_USER) mailserver.yml
4440

45-
# bootstrap sets up a secure debian server (the first time)
41+
# bootstrap sets up a secure debian server
4642
bootstrap:
47-
ansible-playbook -u root -k bootstrap.yml
43+
@if [ -r .bootstrap_done ]; then \
44+
ansible-playbook -u $(DEPLOY_USER) bootstrap.yml; \
45+
else \
46+
ansible-playbook -u root -k bootstrap.yml; \
47+
fi
4848

49-
# since root ssh logins are disabled, need to run this when boostrapping again
49+
# bootstrap explicitly as deploy user
5050
rebootstrap:
5151
ansible-playbook -u $(DEPLOY_USER) bootstrap.yml
5252

53-
redo: rebootstrap all
54-
5553
# GENERATED FILES
56-
GEN = inventory group_vars .vault_pass.txt
54+
GEN = inventory group_vars .vault_pass.txt .bootstrap_done
5755

5856
# clean up and start over
5957
reset:

Diff for: README.md

+3
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ to be backed up.
120120
On your control host, the first time you run this, it will run `./bin/setup`
121121
and set your `./inventory` files and variable files in `./group_vars/all/`.
122122

123+
Subsequent runs of `./bin/setup` will read the stored values and present
124+
them as defaults.
125+
123126
Use `make reset` to remove these files and start over.
124127

125128
You can also `make redo` if you make changes to your

Diff for: bin/setup

+55-17
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,85 @@
44

55
cd $(dirname $0)/..
66

7-
mkdir -p group_vars/all
8-
97
VARS=group_vars/all/vars.yml
108
VAULT_VARS=group_vars/all/secret.yml
119
VAULT_PASS=".vault_pass.txt"
1210

13-
cp bin/all.yml group_vars/all/vars.yml
11+
if [ ! -d group_vars/all ]; then
12+
mkdir -p group_vars/all
13+
fi
14+
15+
tmp_vars=/tmp/tmpvars$$
16+
cp bin/all.yml $tmp_vars
17+
18+
cleanup()
19+
{
20+
rm -f $tmp_vars
21+
if [ -r $VAULT_PASS ]; then
22+
ansible-vault encrypt $VAULT_VARS
23+
fi
24+
}
25+
26+
trap cleanup EXIT
27+
28+
if [ -r $VAULT_VARS -a -r $VAULT_PASS ]; then
29+
ansible-vault decrypt $VAULT_VARS
30+
fi
31+
32+
get_stored_default()
33+
{
34+
case $1 in
35+
vault_*)
36+
__r=$(grep "$1" $VAULT_VARS 2>/dev/null| awk '{print $2}' )
37+
;;
38+
*)
39+
__r=$(grep "$1" $VARS 2>/dev/null| awk '{print $2}')
40+
;;
41+
esac
42+
__r=$(echo $__r | sed "s/^\([\"']\)\(.*\)\1\$/\2/g")
43+
if [ -z "$__r" ]; then echo "$2"; else echo "$__r"; fi
44+
}
1445

1546
prompt_with_default()
1647
{
17-
__prompt="$(eval echo \"$1 [\$$2\]: \")"
48+
__get="$3" # set to grab the stored values
49+
__def="$(eval echo \$$2)"
50+
if [ -n "$__get" ]; then __def="$(get_stored_default $2 $__def)"; fi
51+
__prompt="$(eval echo \"$1 [\$__def\]: \")"
1852
read -p "$__prompt" ans
19-
eval "$2=\${ans:-\$$2}"
53+
eval "$2=\${ans:-\$__def}"
2054
}
2155
2256
domain_name=domain.com
23-
prompt_with_default "Top level domain name" domain_name
57+
prompt_with_default "Top level domain name" domain_name -stored
2458
25-
echo ${domain_name} > inventory
59+
inventory_hostname=$domain_name
60+
if [ -r inventory ]; then inventory_hostname=$(cat inventory); fi
61+
prompt_with_default "Hostname (for Ansible inventory)" inventory_hostname
62+
echo ${inventory_hostname} > inventory
2663
2764
timezone='America/Los_Angeles'
28-
prompt_with_default "Server timezone" timezone
65+
prompt_with_default "Server timezone" timezone -stored
2966
3067
vault_root_password=MyR00tPa33w0rd
31-
prompt_with_default "root password" vault_root_password
68+
prompt_with_default "root password" vault_root_password -stored
3269
3370
deploy_user_name=deploy
34-
prompt_with_default "deploy user name" deploy_user_name
71+
prompt_with_default "deploy user name" deploy_user_name -stored
3572
vault_deploy_password=MyD3pl0yPas3w0rd
36-
prompt_with_default "deploy user password" vault_deploy_password
73+
prompt_with_default "deploy user password" vault_deploy_password -stored
3774
3875
admin_email=postmaster@${domain_name}
39-
prompt_with_default "Admin reports email (for logwatch, etc.)" admin_email
76+
prompt_with_default "Admin reports email (for logwatch, etc.)" admin_email -stored
4077
4178
vault_db_password=myDBpa88w0rd
42-
prompt_with_default "MariaDB root user password" vault_db_password
79+
prompt_with_default "MariaDB root user password" vault_db_password -stored
4380
4481
vault_user_password=postf1x001a9
45-
prompt_with_default "MariaDB postfix user password" vault_user_password
82+
prompt_with_default "MariaDB postfix user password" vault_user_password -stored
4683
4784
self_signed_certs=false
48-
prompt_with_default "Use self-signed certs (use for testing)" self_signed_certs
85+
prompt_with_default "Use self-signed certs (use for testing)" self_signed_certs -stored
4986
5087
echo ""
5188
echo "NOTE: When DB is initialized, database passwords are set."
@@ -54,7 +91,7 @@ echo ""
5491
5592
for i in domain_name deploy_user_name admin_email timezone self_signed_certs
5693
do
57-
echo "$i: $(eval echo \$$i)" >> $VARS
94+
echo "$i: $(eval echo \$$i)" >> $tmp_vars
5895
done
5996
6097
vault_root_encrypted_password=$(./bin/mkpasswd "$vault_root_password")
@@ -74,5 +111,6 @@ done
74111
75112
vault_pass='This is my c00l vault password'
76113
prompt_with_default "Your vault password" vault_pass
114+
77115
echo "$vault_pass" > $VAULT_PASS
78-
ansible-vault encrypt $VAULT_VARS
116+
cp $tmp_vars $VARS

Diff for: roles/secure-server/tasks/main.yml

+4
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,7 @@
9090
timezone: name={{ timezone }}
9191
notify:
9292
- Restart cron
93+
94+
- name: Create .bootstrap_done marker
95+
local_action: file path=.bootstrap_done state=touch
96+
become: false

0 commit comments

Comments
 (0)