はじめに
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
}
}
}
]