Files
configpolicy/create-dc.sh
Dustin C. Hatch 7929176b4e create-dc: Update to use new provisioning process
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.
2025-10-27 12:53:27 -05:00

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