salt/tests/pytests/scenarios/dns/multimaster/conftest.py
Daniel A. Wozniak ddcfb2e183 Update docs for master dns changes
Update docs to use master_alive_interval to detect master ip changes via
DNS.
2024-04-25 10:16:46 -07:00

119 lines
3.6 KiB
Python

import logging
import os
import shutil
import subprocess
import pytest
log = logging.getLogger(__name__)
@pytest.fixture(scope="package")
def salt_mm_master_1(request, salt_factories):
subprocess.check_output(["ip", "addr", "add", "172.16.0.1/32", "dev", "lo"])
config_defaults = {
"open_mode": True,
"transport": request.config.getoption("--transport"),
}
config_overrides = {
"interface": "0.0.0.0",
"master_sign_pubkey": True,
}
factory = salt_factories.salt_master_daemon(
"mm-master-1",
defaults=config_defaults,
overrides=config_overrides,
extra_cli_arguments_after_first_start_failure=["--log-level=info"],
)
try:
with factory.started(start_timeout=180):
yield factory
finally:
try:
subprocess.check_output(["ip", "addr", "del", "172.16.0.1/32", "dev", "lo"])
except subprocess.CalledProcessError:
pass
@pytest.fixture(scope="package")
def mm_master_1_salt_cli(salt_mm_master_1):
return salt_mm_master_1.salt_cli(timeout=180)
@pytest.fixture(scope="package")
def salt_mm_master_2(salt_factories, salt_mm_master_1):
# if salt.utils.platform.is_darwin() or salt.utils.platform.is_freebsd():
# subprocess.check_output(["ifconfig", "lo0", "alias", "127.0.0.2", "up"])
config_defaults = {
"open_mode": True,
"transport": salt_mm_master_1.config["transport"],
}
config_overrides = {
"interface": "0.0.0.0",
"master_sign_pubkey": True,
}
# Use the same ports for both masters, they are binding to different interfaces
for key in (
"ret_port",
"publish_port",
):
config_overrides[key] = salt_mm_master_1.config[key] + 1
factory = salt_factories.salt_master_daemon(
"mm-master-2",
defaults=config_defaults,
overrides=config_overrides,
extra_cli_arguments_after_first_start_failure=["--log-level=info"],
)
# Both masters will share the same signing key pair
for keyfile in ("master_sign.pem", "master_sign.pub"):
shutil.copyfile(
os.path.join(salt_mm_master_1.config["pki_dir"], keyfile),
os.path.join(factory.config["pki_dir"], keyfile),
)
with factory.started(start_timeout=180):
yield factory
@pytest.fixture(scope="package")
def mm_master_2_salt_cli(salt_mm_master_2):
return salt_mm_master_2.salt_cli(timeout=180)
@pytest.fixture(scope="package")
def salt_mm_minion_1(salt_mm_master_1, salt_mm_master_2, master_alive_interval):
config_defaults = {
"transport": salt_mm_master_1.config["transport"],
}
mm_master_1_port = salt_mm_master_1.config["ret_port"]
mm_master_2_port = salt_mm_master_2.config["ret_port"]
config_overrides = {
"master": [
f"master1.local:{mm_master_1_port}",
f"master2.local:{mm_master_2_port}",
],
"publish_port": salt_mm_master_1.config["publish_port"],
"master_alive_interval": master_alive_interval,
"master_tries": -1,
"verify_master_pubkey_sign": True,
"retry_dns": True,
}
factory = salt_mm_master_1.salt_minion_daemon(
"mm-minion-1",
defaults=config_defaults,
overrides=config_overrides,
extra_cli_arguments_after_first_start_failure=["--log-level=info"],
)
# Need to grab the public signing key from the master, either will do
shutil.copyfile(
os.path.join(salt_mm_master_1.config["pki_dir"], "master_sign.pub"),
os.path.join(factory.config["pki_dir"], "master_sign.pub"),
)
# with factory.started(start_timeout=180):
yield factory