- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我喜欢使用 terraform 而不将其本地安装到我的系统中。我的问题可能是音量或路径问题。
我有两个结构。 setup
托管 php
的所有容器文件, compser
, terraform
, ETC...
和 project
我运行别名的文件夹
└───setup
├───composer
│ Dockerfile
│ composer.sh
│
├───php
│ Dockerfile
│
└───terraform
tf.sh
└───projectA
├───modules
│ ├───moduleA
│ ├───moduleb
│ └───module..
│
├───env
│ terraform.tfvars
│
│ main.tf
│ variables.tf
│ output.tf
我使用
setup/terraform/tf.sh
来自
projectA
的别名目录
tf.sh
的内容文件:
#!/bin/bash
docker run --rm -it --name terraform \
-v $pwd:/workspace \
-w /workspace hashicorp/terraform:light $@
当我运行
tf init
,terraform 说,我在一个空目录上运行它:
Terraform initialized in an empty directory!
The directory has no Terraform configuration files. You may begin working
with Terraform immediately by creating Terraform configuration files.
如果我将 `tf.sh' 中的代码从上面更改为:
#!/bin/bash
ls $pwd $@
并运行
tf -lsah
再次,我按预期获得了 terraform 文件。
.
..
main.tf
outputs.tf
variables.tf
看来,我的
tf.sh
中某处有错误文件。
~/.bash_aliases
:
alias tf='/setup/terraform/tf.sh'
编辑
docker run --rm -it -v "$(PWD):/data" /
-w /data hashicorp/terraform:light init /
-backend-config="env/backend.tfvars"
即使我不在我的煤炭,下面的错误告诉我,我走在正确的道路上:
Initializing the backend...
╷
│ Error: Error building ARM Config: Please ensure you have installed Azure CLI version 2.0.79 or newer. Error parsing json result from the Azure CLI: Error launching Azure CLI: exec: "az": executable file not found in $PATH.
我的猜测是,我需要使用 terraform 和 azure-cli 构建多阶段容器镜像。如果我错了,请纠正我!我希望通过
hashicorp/terraform:light
找到一种简单的方法单独的图像。
terraform:light
构建自定义图像并添加了
azure-cli
FROM mcr.microsoft.com/azure-cli
COPY --from=hashicorp/terraform:light /bin/terraform /bin/
ENTRYPOINT ["/bin/terraform"]
工作正常但是是的,如果没有活跃的 session 并没有真正的帮助🙄
Initializing the backend...
╷
│ Error: Error building ARM Config: obtain subscription() from Azure CLI: Error parsing json result from the Azure CLI: Error waiting for the Azure CLI: exit status 1: ERROR: Please run 'az login' to setup account.
│
我想知道我正在尝试做的事情是否有可能以这种方式
最佳答案
原始问题的解决方案已在 Edit 2
中给出.但是,它会导致后续问题,通过 terraform/azure-cli
进行身份验证。容器。
这是一个夏天:
目标是为 terraform
设置别名。喜欢 tf
,它在容器中运行 terraform,而不是将其安装在本地环境中。取决于 provider
,这可能有一些依赖关系。就我而言,我需要“azurerm”,这需要 azure-cli
对于terraform backend-config
.
因此,您不能简单地运行:
docker run --rm -it -v "$(pwd):/data" -w /data hashicorp/terraform:light $@
因为
azure-cli
会失踪。
azure-cli
开始。并添加了
terraform
比奈:
FROM mcr.microsoft.com/azure-cli
COPY --from=hashicorp/terraform:light /bin/terraform /bin/
ENTRYPOINT ["/bin/terraform"]
构建镜像
docker build -t terraform:azure-cli .
对于 Alias,我使用
docker run
创建了 bash 文件。命令,包括
$@
允许传递 terraform 提供的任何参数并为其分配别名:
#!/bin/bash
docker run --rm -it \
-v "$PWD:/data" \
-w /data terraform:azure-cli $@
~/.bash_aliases
alias tf='/mnt/c/Users/***/localGit/setup/terraform/tf.sh'
为了使用它,需要移交可验证的后端配置数据,以避免在 azure-cli 查询“tfstate”存储帐户时发生用户交互。我使用短暂的
Shared Access Signature (SAS) Tokens
解决了这个问题.所以我创建了一个本地
azure.conf
看起来像这样的文件:
# azure.conf, must be in .gitignore
storage_account_name="azurestorageaccountname"
container_name="storagecontainername"
key="prod.tfstate"
sas_token="?sv=2021-09-17…"
这很好(特别是对于开发),但刷新和复制/粘贴 token 可能并不有趣。因此,我决定运行一个脚本,旋转访问 key 并生成 SAS token 作为环境变量:
backend.sh
导出它们脚本
#!/bin/bash
storage_account_name=$TF_STATE_BLOB_ACCOUNT_NAME
container_name=$TF_STATE_BLOB_CONTAINER_NAME
resource_group=$TF_RESOURCE_GROUP
# Rotate and retrieve Storage Account Access Key
account_key=$(az storage account keys renew -g $resource_group -n $storage_account_name --key primary --query '[0].value' -o tsv)
# Generate SAS Token
end=$(date -u -d "1 hour" '+%Y-%m-%dT%H:%MZ')
sas=$(az storage container generate-sas --name $container_name \
--expiry $end \
--permissions dlrw \
--account-name $storage_account_name \
--account-key $account_key)
sas="${sas%\"}" && sas="${sas#\"}"
# Export Environment Variables
export ARM_ACCESS_KEY=$account_key
export ARM_SAS_TOKEN=$sas
最后,我运行我的别名
tf
使用常见的 Terraform 参数,就像我在任何管道中一样:
$ tf init \
-backend-config="storage_account_name=$TF_STATE_BLOB_ACCOUNT_NAME" \
-backend-config="container_name=$TF_STATE_BLOB_CONTAINER_NAME" \
-backend-config="key=$TF_STATE_BLOB_FILE" \
-backend-config="sas_token=$ARM_SAS_TOKEN"
关于bash - 如何使用来自wsl控制台的别名从容器运行terraform?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69221460/
我用 IntelliJ IDEA 2021.1 CE 在 流行!_OS 20.04 与 bash 5.0.17 . 问题造句:我将IntelliJ终端设置为/bin/bash通过 IntelliJ 设
给定如下命令: bash --shortcuts 我想显示一个快捷方式列表,就像在这个页面上一样: http://www.skorks.com/2009/09/bash-shortcuts-for-m
我有一个脚本可以操作数据、创建参数并将它们发送到第二个脚本。其中一个参数包含一个空格。 脚本1.sh: args=() args+=("A") args+=("1 2") args+=("B") .
我的脚本的“只运行一次”版本的一个非常简单的示例: ./myscript.sh var1 "var2 with spaces" var3 #!/bin/bash echo $1 #output: va
我想了解数字( double )在 bash 中是如何表示的,以及当我在 bash 中以十六进制格式打印数字时会发生什么。 根据 IEEE 754 标准,double 应由 64 位表示:52 位(1
我试图在 bash -c "..." 命令中获取 bash 脚本,但它不起作用。 如果我在 bash -c "..." 之外运行命令,它会起作用。 我需要使用 bash -c "..." 因为我想确保
如何检测我的 bash shell 中是否加载了 bash 补全包?从 bash-completion 的 2.1 版(包含在 Debian 8 中)开始,除了 BASH_COMPLETION_COM
我的 bash_profile 中有一个投影函数。现在我试图从 bash 脚本中调用这个函数,但是我得到了一个未找到的错误。如何使投影函数对 bash 脚本可见? 最佳答案 必须导出函数 export
我正在编写一个 bash 脚本,它接受许多命令行参数(可能包括空格)并通过登录 shell 将它们全部传递给程序 (/bin/some_program)。从 bash 脚本调用的登录 shell 将取
当我创建一个新的 bash 进程时,提示符默认为一个非常简单的提示符。我知道我可以编辑 .bashrc 等来更改它,但是有没有办法使用 bash 命令传递提示? 谢谢! 最佳答案 提示由 PS1、PS
好的,我希望这个问题有一定道理,但是 bash shell 和 bash 终端之间有什么区别?例子。当我第一次打开终端时,会提示我当前的目录和用户名。在终端窗口标题中显示 -bash- ,当我键入 e
我是 SBCL 的新手,我正在尝试从 bash 终端运行存储在文本文件中的 Lisp 脚本。 这是我在文件开头写的内容 http://www.sbcl.org/manual/#Running-from
我知道我们可以在 bash 中使用将十六进制转换为十进制 #!/bin/bash echo "Type a hex number" read hexNum echo $(( 16#$hexNum ))
我正在尝试在 bash 脚本中自动完成文件夹名称。如果我输入完整的文件夹名称,一切正常,但我不知道如何自动完成名称。有什么想法吗? repo() { cd ~/Desktop/_REPOS/$1 }
我想检查远程网站上的一些文件。 这里是bash命令生成计算文件md5的命令 [root]# head -n 3 zrcpathAll | awk '{print $3}' | xargs -I {}
是否有任何内置函数可以使用 bash shell 脚本从给定日期获取下周日(下周一、下周二等)?例如,2014 年 9 月 1 日之后的第一个星期日是什么时候?我预计 2014 年 9 月 7 日。
我一直在尝试根据表格重命名一些特定文件,但没有成功。它要么重命名所有文件,要么给出错误。 该目录包含数百个以长条形码命名的文件,我只想重命名包含模式 _1_ 的文件。 例子 barcode_1_bar
bash 中有没有办法用变量的内容替换文本文件中的占位符? 例如,我想发送一封电子邮件通知,如下所示: Dear Foo, Alert: blah blah blah blah blah blah
我有一个 bash 脚本,它在某些字符串上附加了一个重音字符,导致它失败,我找不到这些字符在哪里或如何进入那里。 这是一些示例输出: mv: cannot move â/tmp/myapp.zipâ
这个问题在这里已经有了答案: How do I place stdout on edit line? (1 个回答) Can a bash script prepopulate the prompt
我是一名优秀的程序员,十分优秀!