3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Oracle Cloud] OCI CLI で引数に与えるJSONをどうすればいいのか分からないとき

Posted at

はじめに

Oracle Cloud Infrastructure(以下OCI)のCLIコマンドで、一部のパラメータはJSONを読み込ませる必要があります。このJSONが若干複雑で、どういったフォーマットを指定すればよいかよくわからない問題に出会います。

これに対応するために、パラメータのテンプレートを生成することが出来ます。
テンプレートを使用すると非常に便利にOCI CLI を活用することができるので、方法を紹介します

仮想ネットワークのVCNに存在する Security List を例として取り上げて紹介していきます。

コマンド全体のパラメータをJSONで渡す

OCI CLI の全てのコマンドは、パラメータ全体をJSONで定義することが出来ます。
例えば、Security List を作成するコマンドは多くのパラメータが存在していますが、
--generate-full-command-json-input の引数を渡すことで、
すべてのパラメータのJSONのテンプレートを生成することが出来ます。

> oci network security-list create --generate-full-command-json-input
{
  "compartmentId": "string",
  "definedTags": {
    "string1": {
      "string1": {
        "string1": "string",
        "string2": "string"
      },
      "string2": {
        "string1": "string",
        "string2": "string"
      }
    },
    "string2": {
      "string1": {
        "string1": "string",
        "string2": "string"
      },
      "string2": {
        "string1": "string",
        "string2": "string"
      }
    }
  },
  "displayName": "string",
  "dn": "string",
  "egressSecurityRules": [
    {
      "destination": "string",
      "destinationType": "string",
      "icmpOptions": {
        "code": 0,
        "type": 0
      },
      "isStateless": true,
      "protocol": "string",
      "tcpOptions": {
        "destinationPortRange": {
          "max": 0,
          "min": 0
        },
        "sourcePortRange": {
          "max": 0,
          "min": 0
        }
      },
      "udpOptions": {
        "destinationPortRange": {
          "max": 0,
          "min": 0
        },
        "sourcePortRange": {
          "max": 0,
          "min": 0
        }
      }
    },
    {
      "destination": "string",
      "destinationType": "string",
      "icmpOptions": {
        "code": 0,
        "type": 0
      },
      "isStateless": true,
      "protocol": "string",
      "tcpOptions": {
        "destinationPortRange": {
          "max": 0,
          "min": 0
        },
        "sourcePortRange": {
          "max": 0,
          "min": 0
        }
      },
      "udpOptions": {
        "destinationPortRange": {
          "max": 0,
          "min": 0
        },
        "sourcePortRange": {
          "max": 0,
          "min": 0
        }
      }
    }
  ],
  "freeformTags": {
    "string1": "string",
    "string2": "string"
  },
  "ingressSecurityRules": [
    {
      "icmpOptions": {
        "code": 0,
        "type": 0
      },
      "isStateless": true,
      "protocol": "string",
      "source": "string",
      "sourceType": "string",
      "tcpOptions": {
        "destinationPortRange": {
          "max": 0,
          "min": 0
        },
        "sourcePortRange": {
          "max": 0,
          "min": 0
        }
      },
      "udpOptions": {
        "destinationPortRange": {
          "max": 0,
          "min": 0
        },
        "sourcePortRange": {
          "max": 0,
          "min": 0
        }
      }
    },
    {
      "icmpOptions": {
        "code": 0,
        "type": 0
      },
      "isStateless": true,
      "protocol": "string",
      "source": "string",
      "sourceType": "string",
      "tcpOptions": {
        "destinationPortRange": {
          "max": 0,
          "min": 0
        },
        "sourcePortRange": {
          "max": 0,
          "min": 0
        }
      },
      "udpOptions": {
        "destinationPortRange": {
          "max": 0,
          "min": 0
        },
        "sourcePortRange": {
          "max": 0,
          "min": 0
        }
      }
    }
  ],
  "maxWaitSeconds": 0,
  "vcnId": "string",
  "waitForState": "PROVISIONING|AVAILABLE|TERMINATING|TERMINATED",
  "waitIntervalSeconds": 0
}

上で生成したテンプレートを使用して、適宜必要なパラメータを書き換えることで、適切なJSONパラメータを構築することが出来ます。

コマンドの一部のパラメータをJSONで渡す

コマンドに必要なパラメータの一部をJSONで引き渡すことが出来ます。
Security List の中で、--egress-security-rules--ingress-security-rulesがこれに該当します。

--egress-security-rules のテンプレートを、以下のコマンドで生成することが出来ます。
--generate-param-json-input の後ろに、生成したいパラメータ名を指定する形です。

> oci network security-list create --generate-param-json-input egress-security-rules
[
  {
    "destination": "string",
    "destinationType": "string",
    "icmpOptions": {
      "code": 0,
      "type": 0
    },
    "isStateless": true,
    "protocol": "string",
    "tcpOptions": {
      "destinationPortRange": {
        "max": 0,
        "min": 0
      },
      "sourcePortRange": {
        "max": 0,
        "min": 0
      }
    },
    "udpOptions": {
      "destinationPortRange": {
        "max": 0,
        "min": 0
      },
      "sourcePortRange": {
        "max": 0,
        "min": 0
      }
    }
  },
  {
    "destination": "string",
    "destinationType": "string",
    "icmpOptions": {
      "code": 0,
      "type": 0
    },
    "isStateless": true,
    "protocol": "string",
    "tcpOptions": {
      "destinationPortRange": {
        "max": 0,
        "min": 0
      },
      "sourcePortRange": {
        "max": 0,
        "min": 0
      }
    },
    "udpOptions": {
      "destinationPortRange": {
        "max": 0,
        "min": 0
      },
      "sourcePortRange": {
        "max": 0,
        "min": 0
      }
    }
  }
]
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?