Skip to content

from_json always creates mappings with host port #244

@mikekatica

Description

@mikekatica

When generating a MarathonApp object (or any object between it and MarathonContainerPortMapping) from a dict using from_json, a host port of 0 is always included. This causes undesired behavior when not trying to map a container port to a host port, especially in DCOS, where the overlay network can be used instead. See below:

{
  "id": "/uhttpd",
  "backoffFactor": 1.15,
  "backoffSeconds": 1,
  "container": {
    "type": "DOCKER",
    "volumes": [],
    "docker": {
      "image": "fnichol/uhttpd",
      "forcePullImage": false,
      "privileged": false,
      "parameters": [],
      "portMappings": [
        {
          "containerPort": 80,
          "servicePort": 10087,
          "name": "http"
        }
      ]
    }
  },
  "cpus": 0.1,
  "disk": 0,
  "healthChecks": [
    {
      "gracePeriodSeconds": 60,
      "ignoreHttp1xx": false,
      "intervalSeconds": 5,
      "maxConsecutiveFailures": 3,
      "portIndex": 0,
      "timeoutSeconds": 20,
      "delaySeconds": 5,
      "protocol": "HTTP",
      "path": "/"
    }
  ],
  "instances": 1,
  "labels": {
    "HAPROXY_GROUP": "internal"
  },
  "maxLaunchDelaySeconds": 3600,
  "mem": 128,
  "gpus": 0,
  "networks": [
    {
      "name": "dcos",
      "mode": "container"
    }
  ],
  "requirePorts": false,
  "upgradeStrategy": {
    "maximumOverCapacity": 1,
    "minimumHealthCapacity": 1
  },
  "killSelection": "YOUNGEST_FIRST",
  "unreachableStrategy": {
    "inactiveAfterSeconds": 300,
    "expungeAfterSeconds": 600
  },
  "fetch": [],
  "constraints": []
}

Creates the following MarathonContainer:

MarathonContainer::{"docker": {"forcePullImage": false, "image": "fnichol/uhttpd", "parameters": [], "portMappings": [{"containerPort": 80, "hostPort": 0, "labels": null, "name": "http", "protocol": "tcp", "servicePort": 10087}], "privileged": false}, "type": "DOCKER", "volumes": []}

But should create:

MarathonContainer::{"docker": {"forcePullImage": false, "image": "fnichol/uhttpd", "parameters": [], "portMappings": [{"containerPort": 80, "labels": null, "name": "http", "protocol": "tcp", "servicePort": 10087}], "privileged": false}, "type": "DOCKER", "volumes": []}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions