carvajal
========
Helper functions for describing AWS infrastructure.
``carvajal`` is particularly intended for writing tests,
but can also be used for monitoring and auditing.
``carvajal`` includes terraform helpers to look up
variables, data sources, and other terraform objects.
``carvajal`` has been in use for a few years now,
but you should not consider it stable (yet).
Pin your version in your ``requirements.txt``,
please, or be prepared to rewrite some of your tests on occasion.
``carvajal`` will always follow semantic versioning.
Complete documentation is at
https://carvajal.readthedocs.io/en/latest/index.html.
Source code is at
https://github.com/coalfire/carvajal.
usage
~~~~~
``pip install carvajal``
Create a ``test`` directory.
Write some tests for all of your instances in ``test/test_all.py``:
.. code-block:: python
import pytest
from carvajal import aws
def test_none_accept_ssh_from_world():
my_instances = aws.get_instances()
ssh_ingress_rules = aws.instances_ingress_rules_for_port(my_instances, 22)
actual = aws.rules_cidrs_and_security_groups(ssh_ingress_rules)
assert "0.0.0.0/0" not in actual["cidrs"]
Run ``pytest``.
philosophy and alternatives
---------------------------
``carvajal`` has some guiding principals:
* test deployed resources, not the deploy code.
* make broad assertions about the state of your infrastructure - for instance:
* nothing has 22 open from the world.
* web instances only allow 443 in.
* test in production.
* It's not that we are *not* going to test before we go to prod.
* It is that we are going to *continue* testing once we reach prod.
* use an existing language (in this case Python),
rather than having new tools specific to Infrastructure-as-Code.
* At least some users will not have to learn a new language
* Users can choose from multiple test frameworks (pyunit, pytest, etc)
* Users can integrate into other tools - for instance, prometheus exporters.
* ``carvajal`` is only one of many tools for testing Infrastructure-as-Code.
* we don't think other Infrastructure-as-Code philosphies are wrong,
but they do not accomplish what ``carvajal`` is trying to accomplish.
Some other tools you might consider are:
* `Terratest `_
* `Kitchen-Terraform `_
* `InSpec `_
* `Serverspec `_
* `ScoutSuite `_
development
------------
.. code-block:: shell
make help
to do
-----
We need tests.
We need type hints.
Function names could do with a thorough review and setting a standard format.