Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: fix CLI argument parser, set correct mtu for gefyra network #163

Merged
merged 2 commits into from
Aug 26, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 33 additions & 10 deletions client/gefyra/__main__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
import argparse
import logging
import traceback

from gefyra.api import get_containers_and_print, get_bridges_and_print
from gefyra.configuration import ClientConfiguration
Expand All @@ -19,14 +20,25 @@
)
action = parser.add_subparsers(dest="action", help="the action to be performed")
parser.add_argument("-d", "--debug", action="store_true", help="add debug output")
parser.add_argument("--kubeconfig", required=False, help="path to kubeconfig file")
parser.add_argument("--context", required=False, help="context name from kubeconfig")
parser.add_argument(
"--kubeconfig",
dest="kube_config_file",
required=False,
help="path to kubeconfig file",
)
parser.add_argument(
"--context",
dest="kube_context",
required=False,
help="context name from kubeconfig",
)


up_parser = action.add_parser("up")
up_parser.add_argument(
"-e",
"--endpoint",
dest="cargo_endpoint",
help="the Wireguard endpoint in the form <IP>:<Port> for Gefyra to connect to",
required=False,
)
Expand All @@ -41,35 +53,41 @@
up_parser.add_argument(
"-o",
"--operator",
dest="operator_image_url",
help="Registry url for the operator image.",
required=False,
)
up_parser.add_argument(
"-s",
"--stowaway",
dest="stowaway_image_url",
help="Registry url for the stowaway image.",
required=False,
)
up_parser.add_argument(
"-c",
"--carrier",
dest="carrier_image_url",
help="Registry url for the carrier image.",
required=False,
)
up_parser.add_argument(
"-a",
"--cargo",
dest="cargo_image_url",
help="Registry url for the cargo image.",
required=False,
)
up_parser.add_argument(
"-r",
"--registry",
dest="registry_url",
help="Base url for registry to pull images from.",
required=False,
)
up_parser.add_argument(
"--wireguard-mtu",
dest="wireguard_mtu",
help="The MTU value for the local Wireguard endpoint (default: 1340).",
)
run_parser = action.add_parser("run")
Expand Down Expand Up @@ -234,27 +252,30 @@ def telemetry_command(on, off):
def get_client_configuration(args) -> ClientConfiguration:
configuration_params = {}

if args.kubeconfig:
configuration_params["kube_config_file"] = args.kubeconfig
if args.context:
configuration_params["kube_context"] = args.context

if args.action == "up":
if args.minikube and bool(args.endpoint):
if args.minikube and bool(args.cargo_endpoint):
raise RuntimeError("You cannot use --endpoint together with --minikube.")

if args.minikube:
configuration_params.update(detect_minikube_config())
else:
if not args.endpoint:
if not args.cargo_endpoint:
# #138: Read in the --endpoint parameter from kubeconf
endpoint = get_connection_from_kubeconfig()
if endpoint:
logger.info(f"Setting --endpoint from kubeconfig {endpoint}")
else:
endpoint = args.endpoint
endpoint = args.cargo_endpoint

configuration_params["cargo_endpoint"] = endpoint
for argument in vars(args):
if argument not in ["action", "debug", "cargo_endpoint", "minikube"]:
configuration_params[argument] = getattr(args, argument)
else:
if args.kube_config_file:
configuration_params["kube_config_file"] = args.kube_config_file
if args.kube_context:
configuration_params["kube_context"] = args.kube_context

configuration = ClientConfiguration(**configuration_params)

Expand Down Expand Up @@ -333,6 +354,8 @@ def main():
else:
parser.print_help()
except Exception as e:
if args.debug:
traceback.print_exc()
logger.fatal(f"There was an error running Gefyra: {e}")
exit(1)
exit(0)
Expand Down
5 changes: 4 additions & 1 deletion client/gefyra/api/down.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ def down(config=default_configuration) -> bool:
from gefyra.local.bridge import remove_interceptrequest_remainder
from gefyra.local.utils import set_gefyra_network_from_cargo

config = set_gefyra_network_from_cargo(config)
try:
config = set_gefyra_network_from_cargo(config)
except RuntimeError:
logger.info("Gefyra client is not running.")
try:
logger.info("Removing running bridges")
remove_interceptrequest_remainder(config)
Expand Down
1 change: 0 additions & 1 deletion client/gefyra/api/up.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ def up(config=default_configuration) -> bool:
#
try:
logger.debug("Creating Docker network")
# The 'pool overlap' error was not yet resolved other than retry
gefyra_network = create_gefyra_network(config)

cargo_connection_details = install_operator(
Expand Down
20 changes: 20 additions & 0 deletions client/gefyra/local/networking.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ def create_gefyra_network(config: ClientConfiguration) -> Network:


def handle_create_network(config: ClientConfiguration) -> Network:
DOCKER_MTU_OPTION = "com.docker.network.driver.mtu"
try:
network = config.DOCKER.networks.get(config.NETWORK_NAME)
logger.info("Gefyra network already exists")
Expand All @@ -25,6 +26,24 @@ def handle_create_network(config: ClientConfiguration) -> Network:
or network.attrs["Labels"][CREATED_BY_LABEL[0]] != "true"
):
logger.debug(f"Docker network '{network.name}' is not managed by Gefyra")
if (
"Options" in network.attrs
and DOCKER_MTU_OPTION in network.attrs["Options"]
and network.attrs["Options"][DOCKER_MTU_OPTION] != config.WIREGUARD_MTU
) or (
"Options" in network.attrs
and DOCKER_MTU_OPTION not in network.attrs["Options"]
):
_mtu = (
network.attrs["Options"].get(DOCKER_MTU_OPTION)
if "Options" in network.attrs
else "default"
)
logger.warning(
f"The MTU value of the 'gefyra' network (={_mtu}) is different from the --wireguard-mtu parameter "
f"(={config.WIREGUARD_MTU}) or default. You may experience bad network connections. Consider removing "
f"the network 'gefyra' with 'docker network rm gefyra' before running 'gefyra up'."
)
return network
except NotFound:
pass
Expand All @@ -43,6 +62,7 @@ def handle_create_network(config: ClientConfiguration) -> Network:
labels={
CREATED_BY_LABEL[0]: CREATED_BY_LABEL[1],
},
options={DOCKER_MTU_OPTION: config.WIREGUARD_MTU},
)
logger.info(f"Created network '{config.NETWORK_NAME}' ({network.short_id})")
return network
Expand Down
82 changes: 41 additions & 41 deletions client/tests/test_up_args.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,122 +14,122 @@

def test_parse_registry_a():
args = parser.parse_args(["up", "--registry", REGISTRY_URL])
configuration = ClientConfiguration(registry_url=args.registry)
configuration = ClientConfiguration(registry_url=args.registry_url)
assert configuration.REGISTRY_URL == REGISTRY_URL


def test_parse_registry_b():
args = parser.parse_args(["up", "--registry", "my-reg.io/gefyra/"])
configuration = ClientConfiguration(registry_url=args.registry)
configuration = ClientConfiguration(registry_url=args.registry_url)
assert configuration.REGISTRY_URL, REGISTRY_URL

args = parser.parse_args(["up", "-r", "my-reg.io/gefyra/"])
configuration = ClientConfiguration(registry_url=args.registry)
configuration = ClientConfiguration(registry_url=args.registry_url)
assert configuration.REGISTRY_URL == REGISTRY_URL


def test_parse_no_registry():
args = parser.parse_args(["up"])
configuration = ClientConfiguration(registry_url=args.registry)
configuration = ClientConfiguration(registry_url=args.registry_url)
assert configuration.REGISTRY_URL == QUAY_REGISTRY_URL


def test_parse_no_stowaway_image():
args = parser.parse_args(["up"])
configuration = ClientConfiguration(stowaway_image_url=args.stowaway)
configuration = ClientConfiguration(stowaway_image_url=args.stowaway_image_url)
assert configuration.STOWAWAY_IMAGE == f"quay.io/gefyra/stowaway:{__VERSION__}"


def test_parse_no_carrier_image():
args = parser.parse_args(["up"])
configuration = ClientConfiguration(carrier_image_url=args.carrier)
configuration = ClientConfiguration(carrier_image_url=args.carrier_image_url)
assert configuration.CARRIER_IMAGE == f"quay.io/gefyra/carrier:{__VERSION__}"


def test_parse_no_operator_image():
args = parser.parse_args(["up"])
configuration = ClientConfiguration(operator_image_url=args.operator)
configuration = ClientConfiguration(operator_image_url=args.operator_image_url)
assert configuration.OPERATOR_IMAGE == f"quay.io/gefyra/operator:{__VERSION__}"


def test_parse_no_cargo_image():
args = parser.parse_args(["up"])
configuration = ClientConfiguration(cargo_image_url=args.cargo)
configuration = ClientConfiguration(cargo_image_url=args.cargo_image_url)
assert configuration.CARGO_IMAGE == f"quay.io/gefyra/cargo:{__VERSION__}"


def test_parse_stowaway_image():
args = parser.parse_args(["up", "--stowaway", STOWAWAY_LATEST])
configuration = ClientConfiguration(stowaway_image_url=args.stowaway)
configuration = ClientConfiguration(stowaway_image_url=args.stowaway_image_url)
assert configuration.STOWAWAY_IMAGE == STOWAWAY_LATEST

args = parser.parse_args(["up", "-s", STOWAWAY_LATEST])
configuration = ClientConfiguration(stowaway_image_url=args.stowaway)
configuration = ClientConfiguration(stowaway_image_url=args.stowaway_image_url)
assert configuration.STOWAWAY_IMAGE == STOWAWAY_LATEST

args = parser.parse_args(["up", "-s", STOWAWAY_LATEST, "-r", QUAY_REGISTRY_URL])
configuration = ClientConfiguration(
registry_url=args.registry, stowaway_image_url=args.stowaway
registry_url=args.registry_url, stowaway_image_url=args.stowaway_image_url
)
assert configuration.STOWAWAY_IMAGE == STOWAWAY_LATEST


def test_parse_cargo_image():
args = parser.parse_args(["up", "--cargo", CARGO_LATEST])
configuration = ClientConfiguration(cargo_image_url=args.cargo)
configuration = ClientConfiguration(cargo_image_url=args.cargo_image_url)
assert configuration.CARGO_IMAGE == CARGO_LATEST

args = parser.parse_args(["up", "-a", CARGO_LATEST])
configuration = ClientConfiguration(cargo_image_url=args.cargo)
configuration = ClientConfiguration(cargo_image_url=args.cargo_image_url)
assert configuration.CARGO_IMAGE == CARGO_LATEST

args = parser.parse_args(["up", "-a", CARGO_LATEST, "-r", QUAY_REGISTRY_URL])
configuration = ClientConfiguration(
registry_url=args.registry, cargo_image_url=args.cargo
registry_url=args.registry_url, cargo_image_url=args.cargo_image_url
)
assert configuration.CARGO_IMAGE == CARGO_LATEST


def test_parse_operator_image():
args = parser.parse_args(["up", "--operator", OPERATOR_LATEST])
configuration = ClientConfiguration(operator_image_url=args.operator)
configuration = ClientConfiguration(operator_image_url=args.operator_image_url)
assert configuration.OPERATOR_IMAGE == OPERATOR_LATEST

args = parser.parse_args(["up", "-o", OPERATOR_LATEST])
configuration = ClientConfiguration(operator_image_url=args.operator)
configuration = ClientConfiguration(operator_image_url=args.operator_image_url)
assert configuration.OPERATOR_IMAGE == OPERATOR_LATEST

args = parser.parse_args(["up", "-o", OPERATOR_LATEST, "-r", QUAY_REGISTRY_URL])
configuration = ClientConfiguration(
registry_url=args.registry, operator_image_url=args.operator
registry_url=args.registry_url, operator_image_url=args.operator_image_url
)
assert configuration.OPERATOR_IMAGE == OPERATOR_LATEST


def test_parse_carrier_image():
args = parser.parse_args(["up", "--carrier", CARRIER_LATEST])
configuration = ClientConfiguration(carrier_image_url=args.carrier)
configuration = ClientConfiguration(carrier_image_url=args.carrier_image_url)
assert configuration.CARRIER_IMAGE == CARRIER_LATEST

args = parser.parse_args(["up", "-c", CARRIER_LATEST])
configuration = ClientConfiguration(carrier_image_url=args.carrier)
configuration = ClientConfiguration(carrier_image_url=args.carrier_image_url)
assert configuration.CARRIER_IMAGE == CARRIER_LATEST

args = parser.parse_args(["up", "-c", CARRIER_LATEST, "-r", QUAY_REGISTRY_URL])
configuration = ClientConfiguration(
registry_url=args.registry, carrier_image_url=args.carrier
registry_url=args.registry_url, carrier_image_url=args.carrier_image_url
)
assert configuration.CARRIER_IMAGE == CARRIER_LATEST


def test_parse_combination_a():
args = parser.parse_args(["up", "-c", CARRIER_LATEST])
configuration = ClientConfiguration(
registry_url=args.registry,
stowaway_image_url=args.stowaway,
operator_image_url=args.operator,
cargo_image_url=args.cargo,
carrier_image_url=args.carrier,
registry_url=args.registry_url,
stowaway_image_url=args.stowaway_image_url,
operator_image_url=args.operator_image_url,
cargo_image_url=args.cargo_image_url,
carrier_image_url=args.carrier_image_url,
)
assert configuration.REGISTRY_URL == QUAY_REGISTRY_URL
assert configuration.OPERATOR_IMAGE == f"quay.io/gefyra/operator:{__VERSION__}"
Expand All @@ -139,11 +139,11 @@ def test_parse_combination_a():
def test_parse_combination_b():
args = parser.parse_args(["up", "-r", REGISTRY_URL])
configuration = ClientConfiguration(
registry_url=args.registry,
stowaway_image_url=args.stowaway,
operator_image_url=args.operator,
cargo_image_url=args.cargo,
carrier_image_url=args.carrier,
registry_url=args.registry_url,
stowaway_image_url=args.stowaway_image_url,
operator_image_url=args.operator_image_url,
cargo_image_url=args.cargo_image_url,
carrier_image_url=args.carrier_image_url,
)
assert configuration.REGISTRY_URL == REGISTRY_URL
assert configuration.OPERATOR_IMAGE == f"my-reg.io/gefyra/operator:{__VERSION__}"
Expand All @@ -155,11 +155,11 @@ def test_parse_combination_c():
["up", "-r", REGISTRY_URL, "-c", "quay.io/gefyra/carrier:latest"]
)
configuration = ClientConfiguration(
registry_url=args.registry,
stowaway_image_url=args.stowaway,
operator_image_url=args.operator,
cargo_image_url=args.cargo,
carrier_image_url=args.carrier,
registry_url=args.registry_url,
stowaway_image_url=args.stowaway_image_url,
operator_image_url=args.operator_image_url,
cargo_image_url=args.cargo_image_url,
carrier_image_url=args.carrier_image_url,
)
assert configuration.REGISTRY_URL == REGISTRY_URL
assert configuration.OPERATOR_IMAGE == f"my-reg.io/gefyra/operator:{__VERSION__}"
Expand All @@ -169,12 +169,12 @@ def test_parse_combination_c():
def test_parse_endpoint():
args = parser.parse_args(["up", "-e", "10.30.34.25:31820"])
configuration = ClientConfiguration(
cargo_endpoint=args.endpoint,
registry_url=args.registry,
stowaway_image_url=args.stowaway,
operator_image_url=args.operator,
cargo_image_url=args.cargo,
carrier_image_url=args.carrier,
cargo_endpoint=args.cargo_endpoint,
registry_url=args.registry_url,
stowaway_image_url=args.stowaway_image_url,
operator_image_url=args.operator_image_url,
cargo_image_url=args.cargo_image_url,
carrier_image_url=args.carrier_image_url,
)
assert configuration.CARGO_ENDPOINT == "10.30.34.25:31820"

Expand Down