mirror of
https://github.com/crowdsecurity/crowdsec.git
synced 2025-05-10 20:05:55 +02:00
Docker: don't re-register local agent if not needed (#2141)
This commit is contained in:
parent
d769fff1e8
commit
f39fbf07fa
5 changed files with 108 additions and 30 deletions
|
@ -185,13 +185,22 @@ elif [ -n "$USE_WAL" ] && isfalse "$USE_WAL"; then
|
|||
conf_set '.db_config.use_wal = false'
|
||||
fi
|
||||
|
||||
# regenerate local agent credentials (even if agent is disabled, cscli needs a
|
||||
# connection to the API)
|
||||
cscli machines delete "$CUSTOM_HOSTNAME" 2>/dev/null || true
|
||||
lapi_credentials_path=$(conf_get '.api.client.credentials_path')
|
||||
|
||||
|
||||
if isfalse "$DISABLE_LOCAL_API"; then
|
||||
if isfalse "$USE_TLS" || [ "$CLIENT_CERT_FILE" = "" ]; then
|
||||
echo "Regenerate local agent credentials"
|
||||
cscli machines add "$CUSTOM_HOSTNAME" --auto
|
||||
# generate local agent credentials (even if agent is disabled, cscli needs a
|
||||
# connection to the API)
|
||||
if ( isfalse "$USE_TLS" || [ "$CLIENT_CERT_FILE" = "" ] ); then
|
||||
if yq -e '.login==strenv(CUSTOM_HOSTNAME)' "$lapi_credentials_path" && ( cscli machines list -o json | yq -e 'any_c(.machineId==strenv(CUSTOM_HOSTNAME))' >/dev/null ); then
|
||||
echo "Local agent already registered"
|
||||
else
|
||||
echo "Generate local agent credentials"
|
||||
# if the db is persistent but the credentials are not, we need to
|
||||
# delete the old machine to generate new credentials
|
||||
cscli machines delete "$CUSTOM_HOSTNAME" >/dev/null 2>&1 || true
|
||||
cscli machines add "$CUSTOM_HOSTNAME" --auto
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Check if lapi needs to register an additional agent"
|
||||
|
@ -205,8 +214,6 @@ fi
|
|||
|
||||
# ----------------
|
||||
|
||||
lapi_credentials_path=$(conf_get '.api.client.credentials_path')
|
||||
|
||||
conf_set_if "$LOCAL_API_URL" '.url = strenv(LOCAL_API_URL)' "$lapi_credentials_path"
|
||||
|
||||
if istrue "$DISABLE_LOCAL_API"; then
|
||||
|
|
87
docker/test/tests/test_agent.py
Normal file
87
docker/test/tests/test_agent.py
Normal file
|
@ -0,0 +1,87 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from http import HTTPStatus
|
||||
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.docker
|
||||
|
||||
|
||||
def test_no_agent(crowdsec, flavor):
|
||||
"""Test DISABLE_AGENT=true"""
|
||||
env = {
|
||||
'DISABLE_AGENT': 'true',
|
||||
}
|
||||
with crowdsec(flavor=flavor, environment=env) as cs:
|
||||
cs.wait_for_log("*CrowdSec Local API listening on 0.0.0.0:8080*")
|
||||
cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
||||
res = cs.cont.exec_run('cscli lapi status')
|
||||
assert res.exit_code == 0
|
||||
stdout = res.output.decode()
|
||||
assert "You can successfully interact with Local API (LAPI)" in stdout
|
||||
|
||||
|
||||
def test_machine_register(crowdsec, flavor, tmp_path_factory):
|
||||
"""A local agent is always registered for use by cscli"""
|
||||
|
||||
data_dir = tmp_path_factory.mktemp('data')
|
||||
|
||||
env = {
|
||||
'DISABLE_AGENT': 'true',
|
||||
}
|
||||
|
||||
volumes = {
|
||||
data_dir: {'bind': '/var/lib/crowdsec/data', 'mode': 'rw'},
|
||||
}
|
||||
|
||||
with crowdsec(flavor=flavor, environment=env, volumes=volumes) as cs:
|
||||
cs.wait_for_log([
|
||||
"*Generate local agent credentials*",
|
||||
"*CrowdSec Local API listening on 0.0.0.0:8080*",
|
||||
])
|
||||
cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
||||
res = cs.cont.exec_run('cscli lapi status')
|
||||
assert res.exit_code == 0
|
||||
stdout = res.output.decode()
|
||||
assert "You can successfully interact with Local API (LAPI)" in stdout
|
||||
|
||||
# The local agent is not registered, because we didn't persist local_api_credentials.yaml
|
||||
|
||||
with crowdsec(flavor=flavor, environment=env, volumes=volumes) as cs:
|
||||
cs.wait_for_log([
|
||||
"*Generate local agent credentials*",
|
||||
"*CrowdSec Local API listening on 0.0.0.0:8080*",
|
||||
])
|
||||
cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
||||
res = cs.cont.exec_run('cscli lapi status')
|
||||
assert res.exit_code == 0
|
||||
stdout = res.output.decode()
|
||||
assert "You can successfully interact with Local API (LAPI)" in stdout
|
||||
|
||||
config_dir = tmp_path_factory.mktemp('config')
|
||||
|
||||
volumes[config_dir] = {'bind': '/etc/crowdsec', 'mode': 'rw'}
|
||||
|
||||
with crowdsec(flavor=flavor, environment=env, volumes=volumes) as cs:
|
||||
cs.wait_for_log([
|
||||
"*Generate local agent credentials*",
|
||||
"*CrowdSec Local API listening on 0.0.0.0:8080*",
|
||||
])
|
||||
cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
||||
res = cs.cont.exec_run('cscli lapi status')
|
||||
assert res.exit_code == 0
|
||||
stdout = res.output.decode()
|
||||
assert "You can successfully interact with Local API (LAPI)" in stdout
|
||||
|
||||
# The local agent is now already registered
|
||||
|
||||
with crowdsec(flavor=flavor, environment=env, volumes=volumes) as cs:
|
||||
cs.wait_for_log([
|
||||
"*Local agent already registered*",
|
||||
"*CrowdSec Local API listening on 0.0.0.0:8080*",
|
||||
])
|
||||
cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
||||
res = cs.cont.exec_run('cscli lapi status')
|
||||
assert res.exit_code == 0
|
||||
stdout = res.output.decode()
|
||||
assert "You can successfully interact with Local API (LAPI)" in stdout
|
|
@ -1,21 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from http import HTTPStatus
|
||||
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.docker
|
||||
|
||||
|
||||
def test_no_agent(crowdsec, flavor):
|
||||
"""Test DISABLE_AGENT=true"""
|
||||
env = {
|
||||
'DISABLE_AGENT': 'true',
|
||||
}
|
||||
with crowdsec(flavor=flavor, environment=env) as cs:
|
||||
cs.wait_for_log("*CrowdSec Local API listening on 0.0.0.0:8080*")
|
||||
cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
||||
res = cs.cont.exec_run('cscli lapi status')
|
||||
assert res.exit_code == 0
|
||||
stdout = res.output.decode()
|
||||
assert "You can successfully interact with Local API (LAPI)" in stdout
|
Loading…
Add table
Add a link
Reference in a new issue