>有人遇到这个问题吗? 如果创建机密,则没有其他方法可以忽略已经存在的错误,下面是与创建的机密/许可证相比,在配置了机密/许可证的情况下运行良好的命令(第一次发生)
kubectl create secret generic license --save-config --dry-run=true --from-file=/tmp/ansibleworkspace/license -n {{ appNameSpace }} -o yaml | kubectl apply -f -
如果我在 k8s 集群上运行它,它运行良好
下面是通过ansible执行它时的错误。
Error: unknown shorthand flag: 'f' in -f
Examples:
# Create a new secret named my-secret with keys for each file in folder bar
kubectl create secret generic my-secret --from-file=path/to/bar
# Create a new secret named my-secret with specified keys instead of names on disk
kubectl create secret generic my-secret --from-file=ssh-privatekey=~/.ssh/id_rsa --from-file=ssh-publickey=~/.ssh/id_rsa.pub
# Create a new secret named my-secret with key1=supersecret and key2=topsecret
kubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret
# Create a new secret named my-secret using a combination of a file and a literal
kubectl create secret generic my-secret --from-file=ssh-privatekey=~/.ssh/id_rsa --from-literal=passphrase=topsecret
# Create a new secret named my-secret from an env file
kubectl create secret generic my-secret --from-env-file=path/to/bar.env
Options:
--allow-missing-template-keys=true: If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
--append-hash=false: Append a hash of the secret to its name.
--dry-run=false: If true, only print the object that would be sent, without sending it.
--from-env-file='': Specify the path to a file to read lines of key=val pairs to create a secret (i.e. a Docker .env file).
--from-file=[]: Key files can be specified using their file path, in which case a default name will be given to them, or optionally with a name and file path, in which case the given name will be used. Specifying a directory will iterate each named file in the directory that is a valid secret key.
--from-literal=[]: Specify a key and literal value to insert in secret (i.e. mykey=somevalue)
--generator='secret/v1': The name of the API generator to use.
-o, --output='': Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.
--save-config=false: If true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
--template='': Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
--type='': The type of secret to create
--validate=true: If true, use a schema to validate the input before sending it
Usage:
kubectl create secret generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run] [options]
Use "kubectl options" for a list of global command-line options (applies to all commands).
unknown shorthand flag: 'f' in -f
由于您尚未提供有关正在运行命令的上下文的任何详细信息,因此我只能根据我的猜测提供答案。
解释:
我想您在 Ansible 剧本中使用了command
模块,这就是您问题的原因。正如您在模块说明中读到的:
- 给定的命令将在所有选定的节点上执行。它不会通过 shell 进行处理,因此像
$HOME
和 像"<"
、">"
、"|"
、";"
和"&"
这样的操作不会 工作(如果需要这些功能,请使用 shell 模块)。
在您的命令中,您使用"|"
字符,该字符无法正确解释,因为它不是通过 shell 处理的。请注意,您收到的错误:
Error: unknown shorthand flag: 'f' in -f
与不正确使用根本没有这种选择的kubectl create secret generic
有关。由于command
模块不解释"|"
字符,因此继续命令:
kubectl apply -f -
被视为以下各项的一部分:
kubectl create secret generic
(这由您收到的错误确认,然后是正确的使用示例)。
溶液:
按照上面引用的文档中的建议,请改用shell
模块:
如果你想通过 shell 运行命令(假设你正在使用
<
,>
、|
等),你实际上想要 shell 模块。