summaryrefslogtreecommitdiff
path: root/README.rst
blob: 06fce888626d26c6a1ac573faa61c19e8e4064ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
====================================================
Reconfigure - Python object mapping for config files
====================================================

`Browse API on SourceGraph <https://sourcegraph.com/github.com/Eugeny/reconfigure/tree>`_

----------
Quickstart
----------

::

    >>> from reconfigure.configs import FSTabConfig 
    >>> from reconfigure.items.fstab import FilesystemData
    >>> 
    >>> config = FSTabConfig(path='/etc/fstab')
    >>> config.load()
    >>> print config.tree
    {
        "filesystems": [
            {
                "passno": "0", 
                "device": "proc", 
                "mountpoint": "/proc", 
                "freq": "0", 
                "type": "proc", 
                "options": "nodev,noexec,nosuid"
            }, 
            {
                "passno": "1", 
                "device": "UUID=dfccef1e-d46c-45b8-969d-51391898c55e", 
                "mountpoint": "/", 
                "freq": "0", 
                "type": "ext4", 
                "options": "errors=remount-ro"
            }
        ]
    }
    >>> tmpfs = FilesystemData()
    >>> tmpfs.mountpoint = '/srv/cache'
    >>> tmpfs.type = 'tmpfs'
    >>> tmpfs.device = 'none'
    >>> config.tree.filesystems.append(tmpfs)
    >>> config.save()
    >>> quit()
    $ cat /etc/fstab
    proc    /proc   proc    nodev,noexec,nosuid     0       0
    UUID=dfccef1e-d46c-45b8-969d-51391898c55e / ext4 errors=remount-ro 0 1
    none    /srv/cache      tmpfs   none    0       0

This is actually a shortcut to::

    >>> from reconfigure.parsers import SSVParser
    >>> from reconfigure.builders import BoundBuilder
    >>> from reconfigure.items.fstab import FSTabData
    >>> content = open('/etc/fstab').read()
    >>> syntax_tree = SSVParser().parse(content)
    >>> syntax_tree
    <reconfigure.nodes.RootNode object at 0x7f1319eeec50>
    >>> print syntax_tree
    (None)
            (line)
                    (token)
                            value = proc
                    (token)
                            value = /proc
                    (token)
                            value = proc
                    (token)
                            value = nodev,noexec,nosuid
                    (token)
                            value = 0
                    (token)
                            value = 0
            (line)
                    (token)
                            value = UUID=83810b56-ef4b-44de-85c8-58dc589aef48
                    (token)
                            value = /
                    (token)
                            value = ext4
                    (token)
                            value = errors=remount-ro
                    (token)
                            value = 0
                    (token)
                            value = 1

    >>> builder = BoundBuilder(FSTabData)
    >>> data_tree = builder.build(syntax_tree)
    >>> print data_tree
    {
        "filesystems": [
            {
                "passno": "0", 
                "device": "proc", 
                "mountpoint": "/proc", 
                "freq": "0", 
                "type": "proc", 
                "options": "nodev,noexec,nosuid"
            }, 
            {
                "passno": "1", 
                "device": "UUID=83810b56-ef4b-44de-85c8-58dc589aef48", 
                "mountpoint": "/", 
                "freq": "0", 
                "type": "ext4", 
                "options": "errors=remount-ro"
            }
        ]
    }

Parsers and builders can be paired in almost any possible combination.

Reconfigure can be easily extended with your own parsers and builders - read the docs!

Supported configs:

  * Ajenti (``ajenti``)
  * BIND9 DNS (``bind9``)
  * Crontabs (``crontab``)
  * Samba CTDB (``ctdb``)
  * ISC DHCPD / uDHCPD (``dhcpd``)
  * NFS /etc/exports (``exports``)
  * /etc/fstab (``fstab``)
  * /etc/group (``group``)
  * /etc/hosts (``hosts``)
  * iptables-save dump (``iptables``)
  * Netatalk afp.conf (``netatalk``)
  * NSD DNS (``nsd``)
  * /etc/passwd (``passwd``)
  * /etc/resolv.conf (``resolv``)
  * Samba (``samba``)
  * Squid 3 (``squid``)
  * Supervisord (``supervisor``)

Included parsers:

  * BIND9 config (``bind9``)
  * Crontab (``crontab``)
  * NFS Exports (``exports``)
  * .ini (``ini``)
  * iptables-save (``iptables``)
  * nginx-like (``nginx``)
  * squid (``squid``)
  * nsd (``nsd``)
  * CSV-like space-separated values (``ssv``)
  * JSON (``jsonparser``)