{ "info": { "author": "xv0x7c0", "author_email": "13061441+xv0x7c0@users.noreply.github.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3" ], "description": "# cfgtemplater\n\ncfgtemplater is a Jinja2 template CLI rendering tool. It allows to integrate metadata and defaults variables values within a YAML header. It is also integrates basic IP filters and tests since it's main development purpose is to generate network devices configuration files. It is as well able to load external filters and tests from other python modules.\n\n## Installation\n\n```\npip install cfgtemplater\n```\n\n## Usage\n\n```\nusage: cfgtemplater [-h] [-y YAML] [-p KEY=VALUE] [-e FILE] TEMPLATE\n\nA simple YAML/Jinja2 config generator.\n\npositional arguments:\n TEMPLATE template\n\noptional arguments:\n -h, --help show this help message and exit\n -y YAML YAML file\n -p KEY=VALUE key/value pair\n -e FILE Jinja2 extensions modules\n```\n\n## Usage examples\n\nLoad variables from a YAML file\n```\ncfgtemplater -y variables.yml template.j2\n```\n\nLoad variables from multiple YAML files (merged in order)\n```\ncfgtemplater -y default_variables.yml -y instance_variables.yml template.j2\n```\n\nOverride variables from CLI\n```\ncfgtemplater -y default_variables -p 'variable1=value1' template.j2\n```\n\nPass python literals from CLI\n\n```\ncfgtemplater -p \"variable1=[{'name':'varx', 'value':'x'}, {'name':'vary', 'value':'y'}]\" template.j2\n```\n\n## Template\n\n(Main) template may look like this:\n\n```jinja\n---\nname: Example template\n\nvariables:\n variable1:\n default: \"example\"\n description: \"example variable\"\n variable2:\n default:\n - value: 0\n name: zero\n - value: 1\n name: one\n---\nThis is an {{ variable1 }} file.\n\n{% for variable in variable2 %}\n This is a {{ variable.name }} : {{ variable.value }}\n{% endfor %}\n\n{{ variable3 }}\n```\n\nThe YAML header may contain template metadata (like name, description, whatever). It may as well contain default variables or variables descriptions or any variable metadata. Defaults values are injected in the template when rendering, and can be redefined using CLI or YAML file.\n\n## Extensions\n\nJinja2 filters and tests can be loaded from external files.\n\nLoad ansible ipaddr filter (ansible_ipaddr.py)\n```python\nimport netaddr\nfrom ansible.plugins.filter.ipaddr import *\n```\n\nRender template using ipaddr filters\n```\ncfgtemplater -e ansible_ipaddr.py template.j2\n```\n\n## Basic module usage\n\n```python\n>>> from cfgtemplater.config_template import ConfigTemplate\n>>> t = ConfigTemplate('examples/example1.j2')\n>>> t.name\n'Example template'\n>>> t.variables\n{'variable1': {'default': 'example', 'description': 'example variable'}, 'variable2': {'default': [{'value': 0, 'name': 'zero'}, {'value': 1, 'name': 'one'}]}}\n>>> t.content\n'This is an {{ variable1 }} file.\\n\\n{% for variable in variable2 %}\\n This is a {{ variable.name }} : {{ variable.value }}\\n{% endfor %}\\n\\n{{ variable3 }}\\n'\n>>> print(t.render({'variable3': 'TEST'}))\nThis is an example file.\n\n This is a zero : 0\n This is a one : 1\n\nTEST\n```\n\n## Integrated filters and tests\n\n### IP filters\n\n#### first_address\n\n```jinja\n{{ ipv4_net | first_address }}\n{{ ipv6_net | first_address }}\n```\n```\n192.0.2.1/24\n2001:db8::1/120\n```\n\n#### last_address\n\n```jinja\n{{ ipv4_net | last_address }}\n{{ ipv6_net | last_address }}\n```\n```\n192.0.2.254/24\n2001:db8::ff/120\n```\n\n#### address\n\n```jinja\n{{ ipv4_net | address }}\n{{ ipv6_net | address }}\n```\n```\n192.0.2.0\n2001:db8::\n```\n\n#### network\n\n```jinja\n{{ ipv4_net | first_address | network }}\n{{ ipv6_net | first_address | network }}\n```\n```\n192.0.2.0/24\n2001:db8::/120\n```\n\n#### broadcast\n\n```jinja\n{{ ipv4_net | broadcast }}\n{{ ipv6_net | broadcast }}\n```\n```\n192.0.2.255/24\n2001:db8::ff/120\n```\n\n#### prefixlen\n\n```jinja\n{{ ipv4_net | prefixlen }}\n{{ ipv6_net | prefixlen }}\n```\n```\n24\n120\n```\n\n#### netmask\n\n```jinja\n{{ ipv4_net | netmask }}\n{{ ipv6_net | netmask }}\n```\n```\n255.255.255.0\nffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00\n```\n\n#### hostmask\n\n```jinja\n{{ ipv4_net | first_address | hostmask }}\n{{ ipv6_net | first_address | hostmask }}\n```\n```\n0.0.0.255\n::ff\n```\n\n#### compress\n\n```jinja\n{{ '192.000.002.001' | compress }}\n{{ '2001:0db8:0000:0000:0000:0000:0000:0001' | compress }}\n```\n```\n192.0.2.1\n2001:db8::1\n```\n\n#### uncompress\n\n```jinja\n{{ '192.0.2.1' | uncompress }}\n{{ '2001:db8::1' | uncompress }}\n```\n```\n192.000.002.001\n2001:0db8:0000:0000:0000:0000:0000:0001\n```\n\n#### octets\n\n```jinja\n{% for octet in ipv4_net | octets %}\n {{ octet }}\n{% endfor %}\n```\n```\n 192\n 0\n 2\n 0\n```\n\n#### hextets\n\n```jinja\n{% for hextet in ipv6_net | hextets %}\n {{ hextet }}\n{% endfor %}\n```\n```\n 2001\n 0db8\n 0000\n 0000\n 0000\n 0000\n 0000\n 0000\n```\n\n### IP tests\n\n#### is_ip\n\n```jinja\n{{ ipv4_net | is_ip }}\n{{ ipv6_net | is_ip }}\n{{ 'test' | is_ip\n```\n```\nTrue\nTrue\nFalse\n```\n\n#### is_ipv4\n\n```jinja\n{{ ipv4_net | is_ipv4 }}\n{{ ipv6_net | is_ipv4 }}\n```\n```\nTrue\nFalse\n```\n\n#### is_ipv6\n\n```jinja\n{{ ipv6_net | is_ipv6 }}\n{{ ipv4_net | is_ipv6 }}\n```\n```\nTrue\nFalse\n```\n\n#### is_ip_net\n\n```jinja\n{{ ipv4_net | is_ip_net }}\n{{ ipv6_net | is_ip_net }}\n{{ ipv6_net | first_address | is_ip_net }}\n{{ ipv6_net | first_address | is_ip_net }}\n```\n```\nTrue\nTrue\nFalse\nFalse\n```\n\n#### is_ipv4_net\n\n```jinja\n{{ ipv4_net | is_ipv4_net }}\n{{ ipv6_net | is_ipv4_net }}\n{{ ipv4_net | first_address | is_ipv4_net }}\n{{ ipv6_net | first_address | is_ipv4_net }}\n```\n```\nTrue\nFalse\nFalse\nFalse\n```\n\n#### is_ipv6_net\n\n```jinja\n{{ ipv6_net | is_ipv6_net }}\n{{ ipv4_net | is_ipv6_net }}\n{{ ipv6_net | first_address | is_ipv4_net }}\n{{ ipv4_net | first_address | is_ipv4_net }}\n```\n```\nTrue\nFalse\nFalse\nFalse\n```\n\n#### is_ipv4_host\n\n```jinja\n{{ ipv4_net | first_address | is_ipv4_host }}\n{{ ipv4_net | is_ipv4_host }}\n```\n```\nTrue\nFalse\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "cfgtemplater", "package_url": "https://pypi.org/project/cfgtemplater/", "platform": "", "project_url": "https://pypi.org/project/cfgtemplater/", "project_urls": null, "release_url": "https://pypi.org/project/cfgtemplater/0.0.2/", "requires_dist": [ "jinja2 (>=2.10)", "ipaddress (>=1.0.22)", "pyyaml (>=5.1)" ], "requires_python": "", "summary": "A tool to generate templates based on Jinja and YAML", "version": "0.0.2" }, "last_serial": 5380838, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "cca5d99c42a8739c8ac47dc4bf2657e6", "sha256": "9c75fb7c60e0f9a2396d1766b83f9d3b6eb5ce43c871856cfe020259e1c3f945" }, "downloads": -1, "filename": "cfgtemplater-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "cca5d99c42a8739c8ac47dc4bf2657e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8512, "upload_time": "2019-03-31T17:03:30", "url": "https://files.pythonhosted.org/packages/a8/a2/5fd20d2b470935eedbd975ad28141d0f16c567dc29bcf83bc11bfc0b43d0/cfgtemplater-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e969345a662bb79b5eba7e5be3030f19", "sha256": "b1bebf1bfca5aecec47d706e6add7427bc4bb37b1923534658edbe84ef6804e2" }, "downloads": -1, "filename": "cfgtemplater-0.0.1.tar.gz", "has_sig": false, "md5_digest": "e969345a662bb79b5eba7e5be3030f19", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7188, "upload_time": "2019-03-31T17:03:32", "url": "https://files.pythonhosted.org/packages/b5/fb/700b863c86fdae21a5d5028011a2ee6598f59a282f5b4c1862a567a60d67/cfgtemplater-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "10c0fcce0ac886b97cfe8e132ccfc21e", "sha256": "7cbc0f92a548547cd2ea028c48ae844433fbc3fd6e0121c6debeeb1d3b4b95cf" }, "downloads": -1, "filename": "cfgtemplater-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "10c0fcce0ac886b97cfe8e132ccfc21e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8587, "upload_time": "2019-06-10T11:57:02", "url": "https://files.pythonhosted.org/packages/5a/41/d73465844cf68b50d28f89e4224204fe8e9273e0753097ff8242f7a55377/cfgtemplater-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74665c113ae34e9971660136855565df", "sha256": "49a9b0bf86c87c124f827e915b062bacf0e8e83afb7711eae092e18cc7b2b583" }, "downloads": -1, "filename": "cfgtemplater-0.0.2.tar.gz", "has_sig": false, "md5_digest": "74665c113ae34e9971660136855565df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7309, "upload_time": "2019-06-10T11:57:20", "url": "https://files.pythonhosted.org/packages/e2/16/cce8c3497f2951f142386b1899effee52672ed57d34e8a44f86a1184bf94/cfgtemplater-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "10c0fcce0ac886b97cfe8e132ccfc21e", "sha256": "7cbc0f92a548547cd2ea028c48ae844433fbc3fd6e0121c6debeeb1d3b4b95cf" }, "downloads": -1, "filename": "cfgtemplater-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "10c0fcce0ac886b97cfe8e132ccfc21e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8587, "upload_time": "2019-06-10T11:57:02", "url": "https://files.pythonhosted.org/packages/5a/41/d73465844cf68b50d28f89e4224204fe8e9273e0753097ff8242f7a55377/cfgtemplater-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74665c113ae34e9971660136855565df", "sha256": "49a9b0bf86c87c124f827e915b062bacf0e8e83afb7711eae092e18cc7b2b583" }, "downloads": -1, "filename": "cfgtemplater-0.0.2.tar.gz", "has_sig": false, "md5_digest": "74665c113ae34e9971660136855565df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7309, "upload_time": "2019-06-10T11:57:20", "url": "https://files.pythonhosted.org/packages/e2/16/cce8c3497f2951f142386b1899effee52672ed57d34e8a44f86a1184bf94/cfgtemplater-0.0.2.tar.gz" } ] }