注入值



Tags 和命令行

通过使用 @tag(),CUE 可以通过命令行将数据注入到你的配置文件。

tags.cue

package inject

// @tag() is how we inject data
env:      *"dev" | string @tag(env)      // env has a default
database: string          @tag(database) // databse is "required"

// A schema for DBs with some defaults
#DB: {
	host: #hosts[env]
	port: string | *"5432"
	db:   database

	// interpolate the fields into the connection string
	conn: "postgres://\(host):\(port)/\(db)"
}

// setup our database host mapping
#hosts: [string]: string
#hosts: {
	dev: "postgres.dev"
	stg: "postgres.stg"
	prd: "postgres.prd"
}
# -t key=value  -e to eval a specific value
$ cue eval tags.cue -t database="foo" -e "#DB.conn"
"postgres://postgres.dev:5432/foo"

合并文件

当运行 cue 时,我们可以在多个文件中合并数据,然后通过选择不同文件来改变结果。

有下面几个文件:

app.cue

package app

_secrets: {
	username: string
	password: string
}

app: {
	creds: {
		user: _secrets.username
		pass: _secrets.password
	}
}

dev.cue

_secrets: {
	username: "dev-user"
	password: "dev-pass"
}

prd.cue

_secrets: {
	username: "prd-user"
	password: "prd-pass"
}

我们可以运行 cue eval 然后切换不同的环境设置。

cue eval app.cue dev.cue

app: {
	creds: {
		user: "dev-user"
		pass: "dev-pass"
	}
}

cue eval app.cue prd.cue

app: {
	creds: {
		user: "prd-user"
		pass: "prd-pass"
	}
}

还有更多使用跨不同目录或条件导入的高级模板,访问下面的链接查看更多:

  • [cross directory packages]
  • [conditional imports]
我们绝不会将你的邮箱分享给任何人。
2022 Hofstadter, Inc