Skip to content

Instantly share code, notes, and snippets.

@buzztaiki
Last active June 14, 2022 04:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save buzztaiki/fff150842898a4f4aa30cd44db658f5e to your computer and use it in GitHub Desktop.
Save buzztaiki/fff150842898a4f4aa30cd44db658f5e to your computer and use it in GitHub Desktop.
gron で deployment の port をぱっと出す

gron で deployment の port をぱっと出す

gron は json を行指向 にしてくれるやつ。 https://github.com/tomnomnom/gron

https://chalow.net/2022-06-13-1.html でに噂になってて知った。たしかに便利。

例えば kuberetes の deploymnet から使ってる port を出すのに jq の式書いたりするのが面倒だったりするとき、以下みたいにしてぱっと出せる:

% kubectl -nkube-system get deploy coredns -ojson | gron | grep -ie port
json.spec.template.spec.containers[0].livenessProbe.httpGet.port = 8080;
json.spec.template.spec.containers[0].ports = [];
json.spec.template.spec.containers[0].ports[0] = {};
json.spec.template.spec.containers[0].ports[0].containerPort = 53;
json.spec.template.spec.containers[0].ports[0].name = "dns";
json.spec.template.spec.containers[0].ports[0].protocol = "UDP";
json.spec.template.spec.containers[0].ports[1] = {};
json.spec.template.spec.containers[0].ports[1].containerPort = 53;
json.spec.template.spec.containers[0].ports[1].name = "dns-tcp";
json.spec.template.spec.containers[0].ports[1].protocol = "TCP";
json.spec.template.spec.containers[0].ports[2] = {};
json.spec.template.spec.containers[0].ports[2].containerPort = 9153;
json.spec.template.spec.containers[0].ports[2].name = "metrics";
json.spec.template.spec.containers[0].ports[2].protocol = "TCP";
json.spec.template.spec.containers[0].readinessProbe.httpGet.port = 8181;

出力が一行じゃ見辛かったら gron -u で ungron すると:

% kubectl -nkube-system get deploy coredns -ojson | gron | grep -ie port | gron -u
{
  "spec": {
    "template": {
      "spec": {
        "containers": [
          {
            "livenessProbe": {
              "httpGet": {
                "port": 8080
              }
            },
            "ports": [
              {
                "containerPort": 53,
                "name": "dns",
                "protocol": "UDP"
              },
              {
                "containerPort": 53,
                "name": "dns-tcp",
                "protocol": "TCP"
              },
              {
                "containerPort": 9153,
                "name": "metrics",
                "protocol": "TCP"
              }
            ],
            "readinessProbe": {
              "httpGet": {
                "port": 8181
              }
            }
          }
        ]
      }
    }
  }
}

yaml の出力が好きなら yq を使って yq -P すると:

% kubectl -nkube-system get deploy coredns -ojson | gron | grep -ie port | gron -u | yq -P
spec:
  template:
    spec:
      containers:
        - livenessProbe:
            httpGet:
              port: 8080
          ports:
            - containerPort: 53
              name: dns
              protocol: UDP
            - containerPort: 53
              name: dns-tcp
              protocol: TCP
            - containerPort: 9153
              name: metrics
              protocol: TCP
          readinessProbe:
            httpGet:
              port: 8181

べんり。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment