Bash scripts will only get you so far and I can wholly recommend Ansible for automation.
Basically the main advantage of Ansible is that its builtin tasks are "idempotent" which means you can re-run them and end up with the same result. Of course it is possible to do the same with bash scripts, but you may require more checks in place.
The other advantage of Ansible is that there are hundreds of modules for configuring a lot of different things on your system(s) and most are clear and easy to understand.
Meanwhile I've been arguing with council about getting bike racks at a new-ish shopping centre (a few years old) that is legally required to have one.
(Technically they do have a bike rack, but it's on B2 of the carpark hidden behind a car wash and completely unsigned)