Imagine that you have two servers running the same services. If you need to change something in the configuration of these servers, you take turns to visit each server and change the configuration files, restart the services, and so on.
You can also do this with a script. And now imagine that you do not have 2 servers, but 100. In order to change the configuration of hundreds of servers and restart the services manually, it takes a very long time, writing for this script will become more and more difficult with time. It was for this purpose that such things as puppet, Chef, Ansible were invented. With their help you can easily manage a huge number of services and servers, the description of configs is usually on yaml or ruby.