I manage hosting for all sites networked within MetaZaku but the servers themselves are unmanaged; thus, I must manually configure all hosting accounts.
Administrative tasks such as this become tedious. We should automate it using Python.
Configuration File Architecture
Always think like a software architect before starting programming. I must abstract the idea of configuration file templates for general usage.
Assume that we have a folder /etc/sites
that contains all configuration files with the extension .conf
. Our structure should mirror the following:
$ ls /etc/sites
site1.conf site2.conf site3.conf
There must also be a single template file named template.conf
. In a template, the objective is to substitute values for the variables in the template file. We will denote variables by prefixing them with the dollar sign, $.
$ echo "server_name $domain_name" > /etc/sites/template.conf
In this sample template file, we want to replace the variable, $domain_name
with the domain name of the website that we will configure in the future.
With this file structure, our program should do the following:
- Open the template file for reading and create a new configuration file for writing
- Read the template file, line by line
- Substitute the variables with the desired value (in this case, the domain name)
- Write the substituted line into the new configuration file
- Close the files
Time to Program in Python
Create a new file named newconfig.py
and edit it with our favourite editor (vi for me):
$ vi /etc/sites/newconfig.py
Afterwards, write the code following the program flow that we described above.
#!/usr/bin/python
import sys
import io
# Create the new config file for writing
config = io.open(sys.argv[1] + '.conf', 'w')
# Read the lines from the template, substitute the values, and write to the new config file
for line in io.open('template.conf', 'r'):
line = line.replace('$domain_name', sys.argv[1]) + '\n')
config.write(line)
# Close the files
config.close()
That was easy.
Execution and Usage
Executing a Python file is straightforward at this point but one notable aspect is that the program takes one argument as depicted by sys.argv[1]
. That argument is the new domain name. We can execute the script as we execute all other Python scripts:
$ python /etc/sites/newconfig.py website.com
Upon successful execution, a new configuration file named website.com.conf
should be made containing the following data: server_name website.com
.
Conclusion
This is a very esoteric example for configuration files specifically but the script itself can be modified to process any file template quickly.
Have fun automating your system tasks.