CUE stands for Configure, Unify, Execute
Basics
- Installation
1# Install GO
2GO_VERSION="1.21.0"
3wget https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz
4sudo tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz
5export PATH=$PATH:/usr/local/go/bin
6
7go install cuelang.org/go/cmd/cue@latest
8sudo cp -pr ./go /usr/local/.
9
10# or use Container
11printf "\e[1;34m[INFO]\e[m Install CUElang:\n";
12podman pull docker.io/cuelang/cue:latest
- concepts
top -> schema -> constraint -> data -> bottom
- Command
1# import a file
2cue import imageset-config.yaml
3
4# Validate
5cue vet imageset-config.cue imageset-config.yaml
6
7
8* Some basics example
9
10```go
11// This is a comment
12_greeting: "Welcome" // Hidden fields start with "_"
13#project: "CUE" // Definitions start with "#"
14
15message: "\(_greeting) to \(#project)!" // Regular fields are exported
16
17#Person: {
18 age: number // Mandatory condition and must be a number
19 hobbies?: [...string] // non mandatory but if present must be a list of string
20}
21
22// Constrain which call #Person and check if age
23#Adult: #Person & {
24 age: >=18
25}
26
27// =~ match a regular expression
28#Phone: string & =~ "[0-9]+"
29
30// Mapping
31instanceType: {
32 web: "small"
33 app: "medium"
34 db: "large"
35}
36
37server1: {
38 role: "app"
39 instance: instanceType[role]
40}
41
42// server1.instance: "medium"
- Scripting
1# executable have extension name "_tool.cue"
2
3# usage
4cue cmd prompter
1package foo
2
3import (
4 "tool/cli"
5 "tool/exec"
6 "tool/file"
7)
8
9// moved to the data.cue file to show how we can reference "pure" Cue files
10city: "Amsterdam"
11
12// A command named "prompter"
13command: prompter: {
14
15 // save transcript to this file
16 var: {
17 file: *"out.txt" | string @tag(file)
18 } // you can use "-t flag=filename.txt" to change the output file, see "cue help injection" for more details
19
20 // prompt the user for some input
21 ask: cli.Ask & {
22 prompt: "What is your name?"
23 response: string
24 }
25
26 // run an external command, starts after ask
27 echo: exec.Run & {
28 // note the reference to ask and city here
29 cmd: ["echo", "Hello", ask.response + "!", "Have you been to", city + "?"]
30 stdout: string // capture stdout, don't print to the terminal
31 }
32
33 // append to a file, starts after echo
34 append: file.Append & {
35 filename: var.file
36 contents: echo.stdout // because we reference the echo task
37 }
38
39 // also starts after echo, and concurrently with append
40 print: cli.Print & {
41 text: echo.stdout // write the output to the terminal since we captured it previously
42 }
43}
Comments