Cette page a été traduite de l'anglais avec l'aide de l'IA. En cas de divergence, la version anglaise fait référence.
Utiliser des variables
Des variables peuvent être fournies aux scripts StackQL sous forme de données de configuration. Les données de configuration StackQL peuvent être au format json ou jsonnet.
Jsonnet apporte des fonctionnalités supplémentaires telles que la logique conditionnelle, les imports et l'héritage, ainsi que des structures de boucle.
Les données peuvent être fournies par des fichiers json ou jsonnet référencés par le paramètre --iqldata de la commande stackql exec, ou être incluses dans un script iql à l'aide des décorateurs <<< et >>> suivants, comme illustré ici :
<<<jsonnet
//
// jsonnet data
//
>>>
/* stackql statements ... */
Exemple de configuration Jsonnet
L'exemple suivant montre comment utiliser Jsonnet pour fournir des données de configuration à un script StackQL. Les données sont fournies avec le paramètre --iqldata de la commande exec, comme illustré ci-dessous :
stackql exec -i myscript.iql \
--iqldata vars.jsonnet \
--keyfilepath stackql-demo.json
Données Jsonnet
Avec jsonnet, vous pouvez réutiliser des variables et utiliser des tableaux dans des structures de boucle de votre code StackQL. Le jsonnet suivant constitue le contenu du fichier vars.jsonnet référencé par le paramètre --iqldata.
// variables
local project = 'stackql-demo';
local region = 'australia-southeast1';
local name = 'myapp';
local nw_name = name + '-vpc';
local nw_self_link = 'https://compute.googleapis.com/compute/v1/projects/' + project + '/global/networks/' + nw_name + '/';
{
// global config
global: {
project: project,
},
// firewall rules
firewalls: [
{
allowed: [{IPProtocol: 'tcp'}, {IPProtocol: 'udp'}, {IPProtocol: 'icmp'}],
direction: 'INGRESS',
name: name + '-allow-internal-fw',
network: nw_self_link,
sourceRanges: ['10.240.0.0/24', '10.200.0.0/16']
},
{
allowed: [{IPProtocol: 'tcp', ports: ['22']}, {IPProtocol: 'tcp', ports: ['6443']},{IPProtocol: 'icmp'}],
direction: 'INGRESS',
name: name + '-allow-external-fw',
network: nw_self_link,
sourceRanges: ['0.0.0.0/0']
}
],
}
Référencer des données Jsonnet dans une instruction StackQL
L'extrait de code suivant montre comment référencer des valeurs jsonnet depuis une commande StackQL.
--
-- create firewall rules
--
{{range .firewalls}}
INSERT /*+ AWAIT */ INTO google.compute.firewalls
(
project,
data__name,
data__network,
data__direction,
data__sourceRanges,
data__allowed
)
SELECT
'{{ .global.project }}',
'{{.name}}',
'{{.network}}',
'{{.direction}}',
'{{.sourceRanges}}',
'{{.allowed}}';
{{end}}
Récupérer des variables externes avec Jsonnet
Les extraits de code suivants montrent comment récupérer des variables externes dans un fichier de configuration Jsonnet utilisé pour produire une requête StackQL.
Requête StackQL (env-var-input.iql)
INSERT /*+ AWAIT */ INTO google.compute.networks
(
project,
data__name,
data__autoCreateSubnetworks,
data__routingConfig
)
SELECT
'{{ .global.project }}',
'{{ .network.name }}',
{{ .network.autoCreateSubnetworks }},
'{{ .network.routingConfig }}';
Fichier de données Jsonnet (vars.jsonnet)
// variables
local name = 'env-var-input-demo';
local project = std.extVar("project");
{
// global config
global: {
project: project,
},
// network
network: {
autoCreateSubnetworks: false,
name: name + '-vpc',
routingConfig: {routingMode: 'REGIONAL'}
},
}
Exécution en ligne de commande
/path/to/stackql exec -i $(pwd)/env-var-input.iql --var project=stackql-demo --iqldata $(pwd)/vars.jsonnet
Exemple de configuration Json
Du json simple peut aussi servir à fournir des données de configuration à un script StackQL, comme illustré ci-dessous :
stackql exec -i myscript.iql \
--iqldata vars.json \
--keyfilepath stackql-demo.json
Données Json
Les données json suivantes constituent le contenu du fichier vars.json référencé par le paramètre --iqldata.
{
"project": "stackql-demo",
"firewalls": [
{
"allowed": [{"IPProtocol": "tcp"}, {"IPProtocol": "udp"}, {"IPProtocol": "icmp"}],
"direction": "INGRESS",
"name": "myapp-allow-internal-fw",
"network": "https://compute.googleapis.com/compute/v1/projects/stackql-demo/global/networks/myapp-vpc/",
"sourceRanges": ["10.240.0.0/24", "10.200.0.0/16"]
},
{
"allowed": [{"IPProtocol": "tcp", "ports": ["22"]}, {"IPProtocol": "tcp", "ports": ["6443"]},{"IPProtocol": "icmp"}],
"direction": "INGRESS",
"name": "myapp-allow-external-fw",
"network": "https://compute.googleapis.com/compute/v1/projects/stackql-demo/global/networks/myapp-vpc/",
"sourceRanges": ["0.0.0.0/0"]
}
],
}
Référencer des données Json dans une instruction StackQL
Les données présentées ci-dessus sont référencées dans une instruction INSERT StackQL, comme illustré ici :
INSERT /*+ AWAIT */ INTO google.compute.firewalls
(
project,
data__name,
data__network,
data__direction,
data__sourceRanges,
data__allowed
)
SELECT
'{{ project }}',
'{{ firewalls[0].name }}',
'{{ firewalls[0].network }}',
'{{ firewalls[0].direction }}',
'{{ firewalls[0].sourceRanges }}',
'{{ firewalls[0].allowed }}';
INSERT /*+ AWAIT */ INTO compute.firewalls
(
project,
data__name,
data__network,
data__direction,
data__sourceRanges,
data__allowed
)
SELECT
'{{ project }}',
'{{ firewalls[1].name }}',
'{{ firewalls[1].network }}',
'{{ firewalls[1].direction }}',
'{{ firewalls[1].sourceRanges }}',
'{{ firewalls[1].allowed }}';
Option dryrun pour prévisualiser une commande
Vous pouvez utiliser l'option --dryrun pour afficher un script StackQL prétraité à partir de votre script d'entrée et de votre fichier de données json ou jsonnet, comme illustré ci-dessous :
./stackql exec -i myscript.iql \
--iqldata vars.json \
--keyfilepath stackql-demo.json \
--dryrun \
--output text