Create and modify nginx serverblock configs in Python
A module for easily creating and modifying nginx serverblock configurations in Python (including comments!).
pip install python-nginx
Create an nginx serverblock and save it to file:
>>> import nginx >>> c = nginx.Conf() >>> u = nginx.Upstream('php', ... nginx.Key('server', 'unix:/tmp/php-fcgi.socket') ... ) >>> c.add(u) >>> s = nginx.Server() >>> s.add( ... nginx.Key('listen', '80'), ... nginx.Comment('Yes, python-nginx can read/write comments!'), ... nginx.Key('server_name', 'localhost 127.0.0.1'), ... nginx.Key('root', '/srv/http'), ... nginx.Key('index', 'index.php'), ... nginx.Location('= /robots.txt', ... nginx.Key('allow', 'all'), ... nginx.Key('log_not_found', 'off'), ... nginx.Key('access_log', 'off') ... ), ... nginx.Location('~ \.php$', ... nginx.Key('include', 'fastcgi.conf'), ... nginx.Key('fastcgi_intercept_errors', 'on'), ... nginx.Key('fastcgi_pass', 'php') ... ) ... ) >>> c.add(s) >>> nginx.dumpf(c, '/etc/nginx/sites-available/mysite')
Load an nginx serverblock from a file:
>>> import nginx >>> c = nginx.loadf('/etc/nginx/sites-available/testsite') >>> c.children [] >>> c.server.children [, , , ] >>> c.as_dict {'conf': [{'server': [{'#': 'This is a test comment'}, {'server_name': 'localhost'}, {'root': '/srv/http'}, {'location /': [{'allow': 'all'}]}]}]}
Format an nginx serverblock into a string (change the amount of spaces (or tabs) for each indentation level by modifying
nginx.INDENTfirst):
>>> c.servers [] >>> c.as_strings ['server {\n', ' # This is a test comment\n', ' server_name localhost;\n', ' root /srv/http;\n', '\n location / {\n', ' allow all;\n', ' }\n\n', '}\n']
Find where you put your keys:
>>> import nginx >>> c = nginx.loadf('/etc/nginx/sites-available/testsite') >>> c.filter('Server') [] >>> c.filter('Server')[0].filter('Key', 'root') [] >>> c.filter('Server')[0].filter('Location') []
Or just get everything by its type:
>>> import nginx >>> c = nginx.loadf('/etc/nginx/sites-available/testsite') >>> c.servers [] >>> c.servers[0].keys [, ]