Skip to content

Instantly share code, notes, and snippets.

@josqu4red
Created November 21, 2019 09:11
Show Gist options
  • Select an option

  • Save josqu4red/e60e36984a7db2db75c7617239de4c31 to your computer and use it in GitHub Desktop.

Select an option

Save josqu4red/e60e36984a7db2db75c7617239de4c31 to your computer and use it in GitHub Desktop.

Revisions

  1. josqu4red created this gist Nov 21, 2019.
    5 changes: 5 additions & 0 deletions usage.jsonnet
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,5 @@
    local service_ = k.Service(cfg.name) {
    metadata+: cfg.metadata_,
    target_pod: deployment_.spec.template,
    target_ports: ['http', 'admin'],
    }
    36 changes: 36 additions & 0 deletions xkube.libsonnet
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,36 @@
    {
    Service(name): kube._Object('v1', 'Service', name) {
    local service = self,

    target_pod:: error 'service target_pod required',
    target_ports:: [],
    local default_port = service.target_pod.spec.containers[0].ports[0],

    ports:: (
    if std.length(service.target_ports) == 0 then
    [
    {
    name: default_port.name,
    port: default_port.containerPort,
    targetPort: default_port.containerPort,
    },
    ]
    else
    [
    {
    name: port.name,
    port: port.containerPort,
    targetPort: port.containerPort,
    }
    for port in std.flattenArrays(std.map(function(o) o.ports, service.target_pod.spec.containers))
    if std.count(service.target_ports, port.name) > 0
    ]
    ),

    spec: {
    selector: service.target_pod.metadata.labels,
    type: 'ClusterIP',
    ports: service.ports,
    },
    },
    }