PLEASE NOTE: This document applies to an unreleased version of Rash. It is strongly recommended that you only use official releases of Rash, as unreleased versions are subject to changes and incompatibilities that will not be supported in the official releases.

    If you are using an official release version of Rash, you should refer to the documentation for your specific version.

    Documentation for other releases can be found by using the version selector in the bottom left of any doc page.

    Getting started

    Simple YAML declarative shell scripting language based on modules and templates. rash syntax is inspired by Ansible.


    To start using rash you just need a container with entrypoint. For install, add rash binary to your Dockerfile:

    FROM rustagainshell/rash AS rash
    FROM nginx
    COPY --from=rash /bin/rash /bin
    COPY entrypoint.rh /
    ENTRYPOINT ["/entrypoint.rh"]

    Also, you must create your first entrypoint.rh:

    - copy:
        content: |
          server {
            listen       80;
            {% for domain in env.DOMAINS | split(pat=',') -%}
            {% set path = domain | split(pat='.') | first -%}
            location /{{ path }} {
                rewrite /{{ path }}[/]?(.*) /$1 break;
                proxy_pass http://{{ domain }};
            {% endfor %}
        dest: /etc/nginx/conf.d/default.conf
    - command:
        argv: [nginx, '-g', 'daemon off;']
        transfer_pid_1: true


    YAML syntax based on modules.

    Besides, rash includes Tera templates which you can use anywhere. You can use all its functions and combine them as you want.

    rash implements custom builtins, too. For example, {{ rash.path }} or {{ env.MY_ENV_VAR }}.