[NO TESTS] WIP
This commit is contained in:
parent
916220af0e
commit
bb612c6ffa
9 changed files with 132 additions and 100 deletions
|
@ -18,7 +18,8 @@ RECORD_LINE_PATTERN = re.compile(
|
|||
r"(?P<rrset_ttl>\S+)\s+"
|
||||
r"IN\s+"
|
||||
r"(?P<rrset_type>\S+)\s+"
|
||||
r"(?P<rrset_values>.+)$"
|
||||
r"(?P<rrset_values>[^\s#]+)"
|
||||
r"(?P<comment>\s*#.*?)$"
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -22,15 +22,13 @@ relay {{ ttl }} IN A {{ link }}
|
|||
pxe {{ ttl }} IN A {{ link }}
|
||||
{% endfor %}
|
||||
|
||||
# Secrets service
|
||||
ssvc {{ ttl }} IN A 10.0.0.22
|
||||
|
||||
# Host records
|
||||
## The hand-rolled hosts
|
||||
feed.host.dia0.site {{ ttl }} IN A 10.0.0.5
|
||||
sucker.host.dia0.site {{ ttl }} IN A 10.0.0.16
|
||||
chisel.host.dia0.site {{ ttl }} IN A 10.0.0.20
|
||||
heiroglyph.host.dia0.site {{ ttl }} IN A 10.0.0.22
|
||||
## The modes
|
||||
fuhok-migir.host.dia0.site {{ ttl }} IN A 10.0.0.24
|
||||
kadib-mifin.host.dia0.site {{ ttl }} IN A 10.0.0.25
|
||||
banat-kukol.host.dia0.site {{ ttl }} IN A 10.0.0.26
|
||||
## The old blue laptop
|
||||
gamis-nakag.host.dia0.site {{ ttl }} IN A 10.0.0.27
|
||||
gamis-nikag.host.dia0.site {{ ttl }} IN A 10.0.0.27
|
||||
|
|
11
projects/smith/BUILD
Normal file
11
projects/smith/BUILD
Normal file
|
@ -0,0 +1,11 @@
|
|||
py_project(
|
||||
name = "smith",
|
||||
lib_deps = [
|
||||
py_requirement("ibis"),
|
||||
py_requirement("toml"),
|
||||
],
|
||||
main_deps = [
|
||||
py_requirement("click"),
|
||||
],
|
||||
main = "src/python/smith/__main__.py",
|
||||
)
|
18
projects/smith/README.md
Normal file
18
projects/smith/README.md
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Smith
|
||||
> An agent
|
||||
![Mr. Smith](./smith.jpeg)
|
||||
|
||||
|
||||
Smith is, in many ways, a clean sheet implementation of [cram](https://git.arrdem.com/arrdem/cram).
|
||||
|
||||
Cram as a tool has been quite successful at implementing an agentless (get it) masterless configuration.
|
||||
Clone a git repo and apply the config.
|
||||
|
||||
The miss of Cram is that it's really only designed to install static files, and really only to a homedir.
|
||||
Installing packages is frankly a dirty hack.
|
||||
|
||||
In contrast to Cram's static configurations and mostly static actions, Smith has much more in common with Ansible, Puppet or Saltstack.
|
||||
|
||||
Like these full up configuration management systems, Smith features an inventory system, a package manager abstraction, templating features and - unlike these other systems - a core action model and changelog.
|
||||
|
||||
Also like those other systems, Smith uses a "real" configuration language for defining "modules".
|
BIN
projects/smith/smith.jpeg
Normal file
BIN
projects/smith/smith.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 295 KiB |
49
projects/smith/src/python/smith/__main__.py
Normal file
49
projects/smith/src/python/smith/__main__.py
Normal file
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import click
|
||||
|
||||
|
||||
@click.group
|
||||
def cli():
|
||||
pass
|
||||
|
||||
|
||||
@cli.group("inventory")
|
||||
def inventory():
|
||||
pass
|
||||
|
||||
|
||||
@inventory.command("config")
|
||||
def inventory_config():
|
||||
"""Show the configured inventory plugins."""
|
||||
pass
|
||||
|
||||
|
||||
@inventory.command("show")
|
||||
def inventory_show():
|
||||
"""Evaluate host inventory data & display that configuration."""
|
||||
pass
|
||||
|
||||
|
||||
@cli.group("config")
|
||||
def config():
|
||||
pass
|
||||
|
||||
|
||||
@config.command("state")
|
||||
def config_state():
|
||||
"""Show the current configuration state from the last apply."""
|
||||
|
||||
|
||||
@config.command("diff")
|
||||
def config_diff():
|
||||
"""Show changes from applying the new configuration."""
|
||||
|
||||
|
||||
@config.command("apply")
|
||||
def config_apply():
|
||||
"""Apply changes from the new configuration."""
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
cli()
|
|
@ -4,7 +4,7 @@
|
|||
# But ... that's exactly what we want to do.
|
||||
# So this script exists to find a 'compliant' Python install and use that.
|
||||
|
||||
PYTHONREV="3.10"
|
||||
PYTHONREV="3.11"
|
||||
CMD="python${PYTHONREV}"
|
||||
|
||||
if [ -x "$(command -v "$CMD")" ]; then
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
ExifRead
|
||||
aiohttp
|
||||
aiohttp_basicauth
|
||||
async_lru
|
||||
|
@ -7,10 +8,10 @@ black
|
|||
cachetools
|
||||
click
|
||||
colored
|
||||
ExifRead
|
||||
flake8
|
||||
flask
|
||||
hypothesis
|
||||
ibis
|
||||
icmplib
|
||||
isort
|
||||
jinja2
|
||||
|
@ -42,3 +43,4 @@ sphinxcontrib-programoutput
|
|||
unify
|
||||
yamllint
|
||||
yaspin
|
||||
toml
|
||||
|
|
|
@ -1,128 +1,92 @@
|
|||
aiohttp==3.8.4
|
||||
aiohttp-basicauth==1.0.0
|
||||
aiosignal==1.2.0
|
||||
alabaster==0.7.12
|
||||
async-lru==1.0.3
|
||||
aiosignal==1.3.1
|
||||
alabaster==0.7.13
|
||||
async-lru==2.0.2
|
||||
async-timeout==4.0.2
|
||||
attrs==22.1.0
|
||||
autoflake==2.0.1
|
||||
Babel==2.11.0
|
||||
bases==0.2.1
|
||||
beautifulsoup4==4.11.2
|
||||
attrs==22.2.0
|
||||
autoflake==2.0.2
|
||||
Babel==2.12.1
|
||||
beautifulsoup4==4.12.0
|
||||
black==23.1.0
|
||||
blake3==0.3.1
|
||||
bleach==4.1.0
|
||||
borg==2012.4.1
|
||||
cachetools==5.3.0
|
||||
cbor2==5.4.3
|
||||
certifi==2022.9.24
|
||||
chardet==4.0.0
|
||||
charset-normalizer==2.1.1
|
||||
certifi==2022.12.7
|
||||
charset-normalizer==3.1.0
|
||||
click==8.1.3
|
||||
colored==1.4.4
|
||||
commonmark==0.9.1
|
||||
coverage==6.2
|
||||
Cython==0.29.30
|
||||
dataclasses==0.6
|
||||
coverage==7.2.2
|
||||
decorator==5.1.1
|
||||
deepmerge==1.1.0
|
||||
Deprecated==1.2.13
|
||||
docutils==0.19
|
||||
exceptiongroup==1.1.0
|
||||
exceptiongroup==1.1.1
|
||||
ExifRead==3.0.0
|
||||
flake8==6.0.0
|
||||
Flask==2.2.3
|
||||
frozenlist==1.3.3
|
||||
graphviz==0.19.1
|
||||
hypothesis==6.68.1
|
||||
hypothesis==6.70.0
|
||||
ibis==3.2.0
|
||||
icmplib==3.0.3
|
||||
idna==3.4
|
||||
imagesize==1.4.1
|
||||
importlib-metadata==4.10.0
|
||||
iniconfig==1.1.1
|
||||
isodate==0.6.1
|
||||
iniconfig==2.0.0
|
||||
isort==5.12.0
|
||||
itsdangerous==2.0.1
|
||||
jedi==0.18.1
|
||||
itsdangerous==2.1.2
|
||||
Jinja2==3.1.2
|
||||
jsonschema==4.3.3
|
||||
jsonschema-spec==0.1.3
|
||||
jsonschema==4.17.3
|
||||
jsonschema-spec==0.1.4
|
||||
lark==1.1.5
|
||||
lazy-object-proxy==1.9.0
|
||||
livereload==2.6.3
|
||||
lxml==4.9.2
|
||||
m2r==0.2.1
|
||||
Markdown==3.4.1
|
||||
MarkupSafe==2.1.1
|
||||
Markdown==3.4.3
|
||||
MarkupSafe==2.1.2
|
||||
mccabe==0.7.0
|
||||
meraki==1.27.0
|
||||
mirakuru==2.4.1
|
||||
mistune==2.0.1
|
||||
mmh3==3.0.0
|
||||
multidict==6.0.2
|
||||
multiformats==0.1.4.post3
|
||||
mypy-extensions==0.4.3
|
||||
numpy==1.23.5
|
||||
meraki==1.30.0
|
||||
mirakuru==2.5.1
|
||||
mistune==2.0.5
|
||||
multidict==6.0.4
|
||||
mypy-extensions==1.0.0
|
||||
octorest==0.4
|
||||
openapi-schema-validator==0.4.3
|
||||
openapi-spec-validator==0.5.5
|
||||
openapi-schema-validator==0.4.4
|
||||
openapi-spec-validator==0.5.6
|
||||
packaging==23.0
|
||||
parso==0.8.3
|
||||
pathable==0.4.3
|
||||
pathspec==0.9.0
|
||||
pep517==0.13.0
|
||||
pathspec==0.11.1
|
||||
picobox==2.2.0
|
||||
pip==22.3.1
|
||||
pip-tools==6.4.0
|
||||
plac==1.3.5
|
||||
platformdirs==2.4.1
|
||||
platformdirs==3.2.0
|
||||
pluggy==1.0.0
|
||||
port-for==0.6.1
|
||||
prompt-toolkit==3.0.36
|
||||
port-for==0.6.3
|
||||
prompt-toolkit==3.0.38
|
||||
proquint==0.2.1
|
||||
psutil==5.9.4
|
||||
psycopg2==2.9.5
|
||||
pudb==2022.1
|
||||
pur==5.4.2
|
||||
py==1.11.0
|
||||
pycodestyle==2.10.0
|
||||
pycryptodome==3.17
|
||||
pycryptodomex==3.15.0
|
||||
pyflakes==3.0.1
|
||||
Pygments==2.13.0
|
||||
pyparsing==3.0.9
|
||||
Pygments==2.14.0
|
||||
pyrsistent==0.19.3
|
||||
pysha3==1.0.2
|
||||
pyskein==1.0
|
||||
pytest==6.2.5
|
||||
pytest==7.2.2
|
||||
pytest-cov==4.0.0
|
||||
pytest-postgresql==4.1.1
|
||||
pytest-pudb==0.7.0
|
||||
pytest-timeout==2.1.0
|
||||
pytz==2022.6
|
||||
PyYAML==6.0
|
||||
readme-renderer==32.0
|
||||
recommonmark==0.7.1
|
||||
redis==4.5.1
|
||||
regex==2021.11.10
|
||||
redis==4.5.3
|
||||
requests==2.28.2
|
||||
requests-toolbelt==0.9.1
|
||||
requirements-parser==0.3.1
|
||||
retry==0.9.2
|
||||
rfc3339-validator==0.1.4
|
||||
scipy==1.8.1
|
||||
setuptools==60.5.0
|
||||
six==1.16.0
|
||||
smbus2==0.4.2
|
||||
snowballstemmer==2.2.0
|
||||
sortedcontainers==2.4.0
|
||||
soupsieve==2.3.1
|
||||
soupsieve==2.4
|
||||
Sphinx==6.1.3
|
||||
sphinx_mdinclude==0.5.3
|
||||
sphinxcontrib-applehelp==1.0.2
|
||||
sphinxcontrib-applehelp==1.0.4
|
||||
sphinxcontrib-devhelp==1.0.2
|
||||
sphinxcontrib-htmlhelp==2.0.0
|
||||
sphinxcontrib-httpdomain==1.8.0
|
||||
sphinxcontrib-htmlhelp==2.0.1
|
||||
sphinxcontrib-httpdomain==1.8.1
|
||||
sphinxcontrib-jsmath==1.0.1
|
||||
sphinxcontrib-openapi==0.8.1
|
||||
sphinxcontrib-programoutput==0.17
|
||||
|
@ -131,25 +95,14 @@ sphinxcontrib-serializinghtml==1.1.5
|
|||
termcolor==2.2.0
|
||||
toml==0.10.2
|
||||
tomli==2.0.1
|
||||
toposort==1.7
|
||||
tornado==6.1
|
||||
typed-ast==1.5.1
|
||||
types-setuptools==57.4.7
|
||||
typing-validation==0.0.1.post7
|
||||
typing_extensions==4.4.0
|
||||
tornado==6.2
|
||||
typing_extensions==4.5.0
|
||||
unify==0.5
|
||||
untokenize==0.1.1
|
||||
urllib3==1.26.13
|
||||
urwid==2.1.2
|
||||
urwid-readline==0.13
|
||||
wasm==1.2
|
||||
wcwidth==0.2.5
|
||||
webencodings==0.5.1
|
||||
websocket-client==1.2.3
|
||||
urllib3==1.26.15
|
||||
wcwidth==0.2.6
|
||||
websocket-client==1.5.1
|
||||
Werkzeug==2.2.3
|
||||
wheel==0.37.1
|
||||
wrapt==1.13.3
|
||||
yamllint==1.29.0
|
||||
yarl==1.8.1
|
||||
yamllint==1.30.0
|
||||
yarl==1.8.2
|
||||
yaspin==2.3.0
|
||||
zipp==3.7.0
|
||||
|
|
Loading…
Reference in a new issue