open-vault/website/content/docs/commands/write.mdx

122 lines
3.8 KiB
Plaintext
Raw Normal View History

2017-09-08 02:14:36 +00:00
---
layout: docs
page_title: write - Command
2017-09-08 02:14:36 +00:00
description: |-
The "write" command writes data to Vault at the given path. The data can be
credentials, secrets, configuration, or arbitrary data. The specific behavior
of this command is determined at the thing mounted at the path.
---
# write
The `write` command writes data to Vault at the given path (wrapper command for
HTTP PUT or POST). The data can be credentials, secrets, configuration, or
arbitrary data. The specific behavior of the `write` command is determined at
the thing mounted at the path.
2017-09-08 02:14:36 +00:00
Data is specified as "**key=value**" pairs on the command line. If the value begins
with an "**@**", then it is loaded from a file. If the value for a key is "**-**", Vault
will read the value from stdin rather than the command line.
Some API fields require more advanced structures such as maps. These cannot
directly be represented on the command line. However, direct control of the
request parameters can be achieved by using `-` as the only data argument.
This causes `vault write` to read a JSON blob containing all request parameters
from stdin. This argument will be ignored if used in conjunction with any
"key=value" pairs.
2017-09-08 02:14:36 +00:00
For a full list of examples and paths, please see the documentation that
corresponds to the secrets engines in use.
2017-09-08 02:14:36 +00:00
## Examples
Store an arbitrary secrets in the token's cubbyhole.
2017-09-08 02:14:36 +00:00
```shell-session
$ vault write cubbyhole/git-credentials username="student01" password="p@$$w0rd"
2017-09-08 02:14:36 +00:00
```
Create a new encryption key in the transit secrets engine:
```shell-session
$ vault write -force transit/keys/my-key
2017-09-08 02:14:36 +00:00
```
The `-force` flag allows the write operation without input data. (See [command
options](#command-options).)
2017-09-08 02:14:36 +00:00
Upload an AWS IAM policy from a file on disk:
```shell-session
2017-09-08 02:14:36 +00:00
$ vault write aws/roles/ops policy=@policy.json
```
Configure access to Consul by providing an access token:
```shell-session
2017-09-08 02:14:36 +00:00
$ echo $MY_TOKEN | vault write consul/config/access token=-
```
### API versus CLI
Create a token with TTL set to 8 hours, limited to 3 uses, and attach `admin`
and `secops` policies.
```shell-session
$ vault write auth/token/create policies="admin" policies="secops" ttl=8h num_uses=3
```
Equivalent cURL command for this operation:
```shell-session
$ tee request_payload.json -<<EOF
{
"policies": ["admin", "secops"],
"ttl": "8h",
"num_uses": 3
}
EOF
$ curl --header "X-Vault-Token: $VAULT_TOKEN" \
--request POST \
--data @request_payload.json \
$VAULT_ADDR/v1/auth/token/create
```
The `vault write` command simplifies the API call.
Since token management is a common task, Vault CLI provides a
[`token`](/docs/commands/token) command with
[`create`](/docs/commands/token/create) subcommand. The CLI command simplifies
the token creation. Use the `vault create` command with options to set the token
TTL, policies, and use limit.
```shell-session
$ vault token create -policy=admin -policy=secops -ttl=8h -use-limit=3
```
-> **Syntax:** The command options start with `-` (e.g. `-ttl`) while API path
parameters do not (e.g. `ttl`). You always set the API parameters after the path
you are invoking.
2017-09-08 02:14:36 +00:00
## Usage
The following flags are available in addition to the [standard set of
flags](/docs/commands) included on all commands.
2017-09-08 02:14:36 +00:00
### Output Options
- `-field` `(string: "")` - Print only the field with the given name. Specifying
this option will take precedence over other formatting directives. The result
CLI Enhancements (#3897) * Use Colored UI if stdout is a tty * Add format options to operator unseal * Add format test on operator unseal * Add -no-color output flag, and use BasicUi if no-color flag is provided * Move seal status formatting logic to OutputSealStatus * Apply no-color to warnings from DeprecatedCommands as well * Add OutputWithFormat to support arbitrary data, add format option to auth list * Add ability to output arbitrary list data on TableFormatter * Clear up switch logic on format * Add format option for list-related commands * Add format option to rest of commands that returns a client API response * Remove initOutputYAML and initOutputJSON, and use OutputWithFormat instead * Remove outputAsYAML and outputAsJSON, and use OutputWithFormat instead * Remove -no-color flag, use env var exclusively to toggle colored output * Fix compile * Remove -no-color flag in main.go * Add missing FlagSetOutputFormat * Fix generate-root/decode test * Migrate init functions to main.go * Add no-color flag back as hidden * Handle non-supported data types for TableFormatter.OutputList * Pull formatting much further up to remove the need to use c.flagFormat (#3950) * Pull formatting much further up to remove the need to use c.flagFormat Also remove OutputWithFormat as the logic can cause issues. * Use const for env var * Minor updates * Remove unnecessary check * Fix SSH output and some tests * Fix tests * Make race detector not run on generate root since it kills Travis these days * Update docs * Update docs * Address review feedback * Handle --format as well as -format
2018-02-12 23:12:16 +00:00
will not have a trailing newline making it ideal for piping to other processes.
2017-09-08 02:14:36 +00:00
- `-format` `(string: "table")` - Print the output in the given format. Valid
formats are "table", "json", or "yaml". This can also be specified via the
`VAULT_FORMAT` environment variable.
### Command Options
- `-force` `(bool: false)` - Allow the operation to continue with no key=value
pairs. This allows writing to keys that do not need or expect data. This is
aliased as `-f`.