mirror of
https://github.com/Security-Onion-Solutions/securityonion.git
synced 2026-04-11 23:32:02 +02:00
- schedule highstate every 2 hours (was 15 minutes); interval lives in global:push:highstate_interval_hours so the SOC admin UI can tune it and so-salt-minion-check derives its threshold as (interval + 1) * 3600 - add inotify beacon on the manager + master reactor + orch.push_batch that writes per-app intent files, with a so-push-drainer schedule on the manager that debounces, dedupes, and dispatches a single orchestration - pillar_push_map.yaml allowlists the apps whose pillar changes trigger an immediate targeted state.apply (targets verified against salt/top.sls); edits under pillar/minions/ trigger a state.highstate on that one minion - host-batch every push orchestration (batch: 25%, batch_wait: 15) so rule changes don't thundering-herd large fleets - new global:push:enabled kill-switch tears down the beacon, reactor config, and drainer schedule on the next highstate for operators who want to keep highstate-only behavior - set restart_policy: unless-stopped on 23 container states so docker recovers crashes without waiting for the next highstate; leave registry (always), strelka/backend (on-failure), kratos, and hydra alone with inline comments explaining why
38 lines
1.1 KiB
Plaintext
38 lines
1.1 KiB
Plaintext
{% from 'global/map.jinja' import GLOBALMERGED %}
|
|
{% set actions = salt['pillar.get']('actions', []) %}
|
|
{% set BATCH = GLOBALMERGED.push.batch %}
|
|
{% set BATCH_WAIT = GLOBALMERGED.push.batch_wait %}
|
|
|
|
{% for action in actions %}
|
|
{% if action.get('highstate') %}
|
|
apply_highstate_{{ loop.index }}:
|
|
salt.state:
|
|
- tgt: '{{ action.tgt }}'
|
|
- tgt_type: {{ action.get('tgt_type', 'compound') }}
|
|
- highstate: True
|
|
- batch: {{ action.get('batch', BATCH) }}
|
|
- batch_wait: {{ action.get('batch_wait', BATCH_WAIT) }}
|
|
- kwarg:
|
|
queue: 2
|
|
{% else %}
|
|
refresh_pillar_{{ loop.index }}:
|
|
salt.function:
|
|
- name: saltutil.refresh_pillar
|
|
- tgt: '{{ action.tgt }}'
|
|
- tgt_type: {{ action.get('tgt_type', 'compound') }}
|
|
|
|
apply_{{ action.state | replace('.', '_') }}_{{ loop.index }}:
|
|
salt.state:
|
|
- tgt: '{{ action.tgt }}'
|
|
- tgt_type: {{ action.get('tgt_type', 'compound') }}
|
|
- sls:
|
|
- {{ action.state }}
|
|
- batch: {{ action.get('batch', BATCH) }}
|
|
- batch_wait: {{ action.get('batch_wait', BATCH_WAIT) }}
|
|
- kwarg:
|
|
queue: 2
|
|
- require:
|
|
- salt: refresh_pillar_{{ loop.index }}
|
|
{% endif %}
|
|
{% endfor %}
|