mirror of
https://github.com/saltstack/salt.git
synced 2025-04-10 23:01:39 +00:00
119 lines
3.6 KiB
Python
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
|