Instead of running `virt-install` directly from the `create-dc.sh` script, it now relies on `newvm.sh`. This will ensure that VMs created to be domain controllers will conform to the same expectations as all other machines, such as using the libvirt domain metadata to build dynamic inventory. Similarly, the `create-dc.yml` playbook now imports the `host-setup.yml` playbook, which covers the basic setup of a new machine. Again, this ensures that the same policy is applied to DCs as to other machines. Finally, domain controller machines now no longer use _winbind_ for OS user accounts and authentication. This never worked particularly well on DCs anyway (particularly because of the way _winbind_ insists on using domain-prefixed user accounts when it runs on a DC), and is now worse with recent Fedora changes. Instead, DCs now have local users who authenticate via SSH certificates, the same as other current-generaton servers.
52 lines
1.3 KiB
Bash
52 lines
1.3 KiB
Bash
#!/bin/sh
|
|
# vim: set sw=4 ts=4 sts=4 et :
|
|
|
|
ipaddr=$1
|
|
fedora=$2
|
|
if [ -z "${ipaddr}" ]; then
|
|
printf 'usage: %s ipaddr [fedora]\n' "${0##*/}" >&2
|
|
exit 2
|
|
fi
|
|
|
|
ansible-playbook -l samba-dc facts.yml --become || exit
|
|
|
|
wordlist=$(
|
|
python -c 'from diceware.wordlist import *;print(get_wordlist_path("en_eff"))'
|
|
)
|
|
name=dc-$(sort -R "${wordlist}" | awk '{if(length($2) < 13){print $2;exit}}')
|
|
./newvm.sh "${name}" \
|
|
--ip-address "${ipaddr}/26" \
|
|
--nameserver 172.30.0.1 \
|
|
${fedora:+--fedora} ${fedora} \
|
|
--kickstart 'http://pxe.pyrocufflink.blue/kickstart/master/fedora-dc.ks' \
|
|
--network network=prod \
|
|
--domain pyrocufflink.blue \
|
|
--group samba-dc \
|
|
--no-console \
|
|
|| exit
|
|
|
|
printf 'Waiting for %s to come up ...\n' "${name}"
|
|
until ssh -l root "${ipaddr}" : >/dev/null 2>&1; do sleep 10; done
|
|
|
|
bootstrap_vars=host_vars/"${name}".pyrocufflink.blue/_bootstrap.yml
|
|
trap 'rm -fv "${bootstrap_vars}"' INT TERM EXIT QUIT
|
|
mkdir -p "${bootstrap_vars%/*}"
|
|
cat > "${bootstrap_vars}" <<EOF # lang: yaml
|
|
ansible_host: '${ipaddr}'
|
|
ansible_become: false
|
|
ansible_user: root
|
|
EOF
|
|
|
|
if [ -f .env ]; then
|
|
set -a
|
|
. ./.env
|
|
set +a
|
|
fi
|
|
|
|
ANSIBLE_STDOUT_CALLBACK=community.general.default_without_diff \
|
|
ansible-playbook -l "${name}".pyrocufflink.blue \
|
|
--become \
|
|
--diff \
|
|
create-dc.yml \
|
|
-e @join.creds
|