Add a copy of the nginx builder module
This commit is contained in:
parent
ee9e06b1ee
commit
261e9d9fbb
14 changed files with 1237 additions and 0 deletions
85
sysadmin/nginx/config/helpers.py
Normal file
85
sysadmin/nginx/config/helpers.py
Normal file
|
@ -0,0 +1,85 @@
|
|||
"""
|
||||
Convienence utilities for building nginx configs
|
||||
"""
|
||||
from multiprocessing import cpu_count
|
||||
|
||||
from .api import Config, Location, Section
|
||||
from .api.blocks import EmptyBlock
|
||||
|
||||
|
||||
def dumps(config_list):
|
||||
""" Dumps a string representation of a config. Accepts a list of config objects.
|
||||
|
||||
:param list config_list: A list of config objects from this module
|
||||
:rtype: str
|
||||
"""
|
||||
return ''.join([str(element) for element in config_list])
|
||||
|
||||
|
||||
def duplicate_options(key, values):
|
||||
""" There are many cases when building configs that you may have duplicate keys
|
||||
|
||||
This function will produce an EmptyBlock object with duplicate keys but unique values
|
||||
|
||||
Example::
|
||||
|
||||
from nginx.config.helpers import duplicate_options
|
||||
from nginx.config.api import Location
|
||||
loc = Location(
|
||||
'/',
|
||||
duplicate_options('uwsgi_cache_valid', (['404', '5s'], ['200', '60s'])),
|
||||
)
|
||||
|
||||
Which would produce::
|
||||
|
||||
location / {
|
||||
uwsgi_cache_valid 200 60s;
|
||||
uwsgi_cache_valid 404 5s;
|
||||
}
|
||||
|
||||
"""
|
||||
duplicates = EmptyBlock()
|
||||
|
||||
for value in values:
|
||||
duplicates.sections.add(EmptyBlock(**{key: value}))
|
||||
|
||||
return duplicates
|
||||
|
||||
|
||||
def simple_configuration(port=8080):
|
||||
""" Returns a simple nginx config.
|
||||
|
||||
Also serves as an example of how to build configs using this module.
|
||||
|
||||
:param int port: A port to populate the 'listen' paramter of the server block
|
||||
:rtype str:
|
||||
"""
|
||||
|
||||
http = Section(
|
||||
'http',
|
||||
access_log=['logs/access.log', 'combined'],
|
||||
)
|
||||
|
||||
http.sections.server = Section(
|
||||
'server',
|
||||
Location('/'),
|
||||
listen=port,
|
||||
)
|
||||
|
||||
events = Section(
|
||||
'events',
|
||||
worker_connections=4096
|
||||
)
|
||||
|
||||
top = EmptyBlock(
|
||||
worker_processes=cpu_count(),
|
||||
error_log='logs/error.log'
|
||||
)
|
||||
|
||||
config = Config(
|
||||
top,
|
||||
events,
|
||||
http,
|
||||
)
|
||||
|
||||
return config
|
Loading…
Add table
Add a link
Reference in a new issue