Metadata-Version: 1.2
Name: cfg-manager
Version: 1.1.5
Summary: git based config files manager and installer
Home-page: https://github.com/freddez/cfg
Author: Frédéric de ZORZI
Author-email: f@idez.net
License: UNKNOWN
Project-URL: Bug Reports, https://github.com/freddez/cfg/issues
Project-URL: Funding, https://donate.pypi.org
Project-URL: Say Thanks!, https://saythanks.io/to/freddez
Project-URL: Source, https://github.com/freddez/cfg
Description-Content-Type: text/x-rst
Description: cfg : git based config files manager and installer
        ==================================================
        
        This command line tool helps you to keep your customized system configuration files in a
        git repository.
        
        Installation
        ------------
        
        In addition of python3 and related modules, cfg depends of these binaries:
        
        - git
        - colordiff
        
        Latest release could be installed via::
        
          pip3 install cfg-manager
          
        Or frome these sources::
        
          sudo setup.py install
        
        Quickstart
        ----------
        
        A *cfg* based project is basically composed of:
        
        - a *git* repository with a ``src`` directory where your customized configuration files
          are located, for example::
        
            src/etc/aliases
            src/etc/apache2/ports.conf
            ...
        
        - a ``cfg_params.py`` file with at least the *TARGET* parameter set, for example::
        
            TARGET = "/"
        
        Once *TARGET* parameter is configured, you can add existing config file with::
        
          cfg add /etc/postfix/main.cf
        
        The previous command will create ``src/etc/postfix/main.cf`` file and commit it to the
        repository. Don't forget to ``git push`` your work.
        
        To see if your ``src`` and target directory differs, do a::
        
          cfg check
        
        It will compare the two directories and eventually output differences::
        
          checking content...
          /etc/aliases :
          2a3
          > root:        f@idez.net
        
        And then::
        
          cfg install
        
        Will install the modified files, producing the same output. Original dest files are
        backed up with ``.old`` extension.
        
        Template files
        --------------
        
        For multiple environments usage (duplicated servers, sub-configurations), a pattern
        substitution system is provided:
        
        For example let's say you have in your ``cfg_params.py``:
        
        .. code-block:: python
        
          import socket
          import sys
          HOSTNAME = socket.gethostname()
          if HOSTNAME == "master-kf":
              TARGET = "/"
              HOST_IP = "5.223.34.110"
              PEER_IP = "5.68.252.23"
          elif HOSTNAME == "backup-kf":
              TARGET = "/"
              HOST_IP = "5.68.252.23"
              PEER_IP = "5.223.34.110"
          elif HOSTNAME == "bic":
              TARGET = "/home/fredz/tmp/dst_cfg"
              HOST_IP = "127.0.0.1"
              PEER_IP = "666.666.666.666"
          else:
              print("cfg_params.py : uknown host :", HOSTNAME)
              sys.exit(0)
        
        If you want to use these parameters in one of your config files, let's say ``/etc/keepalived/keepalived.conf``:
        
        1. add it to your repo with ``cfg add``,
        2. rename it to ``/etc/keepalived/cfg.keepalived.conf``
        3. use ``cfg[PATTERN]`` in your file:
        
           .. code-block:: squid
        
            vrrp_instance VI_1 {
                state BACKUP
                interface ens3
                unicast_src_ip =cfg[HOST_IP]
                unicast_peer {
                    =cfg[PEER_IP]
                }
            
                virtual_router_id 101
                priority 101
                advert_int 4
                nopreempt
                virtual_ipaddress {
                    666.999.999.666
                }
                notify /usr/local/bin/ovh_ip_up.py
            }
        
        Notes:
        
        - As shown in previous example, you can use python code to face various environment
          configurations.
        - **Only uppercase parameters names are exported**.
        
        Per-host files
        --------------
        
        When configuration files are too different, you can provide host-dedicated versions of
        config files : simply prefix desired filenames with "cfg-[HOSTNAME]." where [HOSTNAME] is
        the target *hostname*. For example:
        
           src/etc/cfg-bic.aliases
        
        
        Permissions
        -----------
        
        Because git repositories only handle executable flag permissions,target files
        permissions are preserved. It is the more simple and safe approach because most of the
        times, target files already exists.
        
        In a future release, I could had *in repository* permission management, but I have no
        simple approach yet.
        
        
        Internals
        ---------
        
        For safety and fast processing, src and target directories files contents are compared
        using git hashes:
          - pre-computed src git sha1 hashes for src
          - ``git hash-object --stdin-paths`` for src, in one system call.
        
Keywords: system configuration files git deploy
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: System Administrators
Classifier: Topic :: Software Development :: Build Tools
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=3.5.*, <4
