# Salt Reactor

Der Salt Reactor ist ein Prozess, welcher auf dem Master läuft und auf Events der Minions reagiert. Sobald der Event-Listener ein Event registriert, für das eine Reaktion definiert wurde, wird diese auf einem Minion ausgeführt. Der Reactor kann auf Standard-Events, wie »Minion gestartet« oder frei definierte Events reagieren.

### Reactor aktivieren

Der Reactor wird über die Konfiguration des Masters aktiviert. Verwenden Sie dazu etwa die Datei `/etc/salt/master.d/reactor.conf`.

{% hint style="info" %}
Nach jeder Änderung am Reactor müssen Sie den Salt Master neu starten.
{% endhint %}

**Ein simples Beispiel**

{% code title="/etc/salt/master.d/reactor.conf" %}

```yaml
reactor:
  - 'salt/minion/*/start':           # EVENT -> Match tag "salt/minion/*/start"
    - /srv/reactor/minion-start.sls  # REACTION -> Things to do when a minion starts                      
  - 'dummy/foo/*':
    - /srv/reactor/dummy.sls
```

{% endcode %}

{% code title="/srv/reactor/dummy.sls" %}

```yaml
{% set list = tag.split('/') %}
dummy:
  local.cmd.run:
    - name: gaga
    - tgt: 'some-minion'
    - arg:
      - 'echo "{{ data['id'] }}: {{ list[2] }} . {{ tag }} {{ data | json() }}">/tmp/reactor.txt'
```

{% endcode %}

```
root@minion1: salt-call event.send 'dummy/foo/hamster'
```

Mit dem Kommando `salt-run state.event pretty=True` beobachten Sie live, welche Events an den Reactor gesendet werden.

### Salt-Keys aufräumen

{% code title="/etc/salt/master.d/reactor.conf " %}

```yaml
reactor: 
  - 'salt/cloud/*/destroying': 
    - '/srv/reactor/salt_cloud_destroy_keys.sls'
```

{% endcode %}

{% code title="/srv/reactor/salt\_cloud\_destroy\_keys.sls" %}

```yaml
{%- set tag_split = tag.split('/') %} 
{%- set minion_id = tag_split[2] %} 
salt_cloud_destroy_key_{{ minion_id }}: 
  wheel.key.delete: 
    - match: {{ minion_id }}
```

{% endcode %}

### State nach VM Deployment ausrollen

{% code title="/etc/salt/master.d/reactor.conf" %}

```yaml
reactor: 
  # Machine created
  - 'salt/cloud/*/created':
    - '/srv/reactor/startup_highstate.sls'
  # Machine destroyed
  - 'salt/cloud/*/destroying': 
    - '/srv/reactor/salt_cloud_destroy_keys.sls'
```

{% endcode %}

{% code title="/srv/reactor/startup\_highstate.sls" %}

```yaml
reactor_highstate:
  cmd.state.apply:
    - tgt: {{ data['name'] }}
    - args:
      - mods: init.vminit
```

{% endcode %}
