如何在.ebextensions配置文件中使用条件语句(AWS Elastic Beanstalk)

19
我希望能在.ebextensions配置中使用条件语句,但我不知道如何使用它。我的当前情况是:
其中一个.ebextensions配置内容是创建一个文件夹,实际上只需要创建一次该文件夹,因为如果我第二次或更多次部署应用程序,就会出现错误,错误信息显示“该文件夹已经存在”。
因此,我需要使用条件语句,如果文件夹已经存在,则不需要再次运行创建文件夹的命令。
如果有人对如何实现此目标有任何见解或指导,我将非常感激。谢谢!
2个回答

36

在 .ebextensions 配置文件中,可以通过在命令上使用 test 指令实现条件命令执行。如果测试结果为真(返回0),则该命令才会运行。

例如,.ebextensions/create_dir.config 文件:

commands:
  01_create_dir:
    test: test ! -d "${DIR}"
    command: mkdir "${DIR}"

如果目录不存在,以下是条件运行脚本的另一个示例(实际在 EB 上进行测试):

commands:
  01_intall_foo:
    test: test ! -d /home/ec2-user/foo
    command: "/home/ec2-user/install-foo.sh"
    cwd: "/home/ec2-user/"

AWS的文档很简略,可以在此找到:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-commands
PS. 如果你只需要有条件地创建目录,你可以使用mkdir-p 选项来无条件地创建目录,如下所示:
commands:
  01_create_dir:
    command: mkdir -p "${DIR}"

在他们在http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html上的示例中,他们使用`test:'[!/usr/bin/python] && echo“python未安装”'`来有条件地运行Python脚本,这让我感到困惑。如果缺少Python,那么这个命令不是会运行吗? - oskarth
mkdir -p 是个好主意。谢谢。 - Yaron Idan
@oskarth 在测试中的 ! 符号使得 if 语句检测该路径是否存在,它的意思是 "如果 /usr/bin/python 不存在则返回 false"。 - Ryan Fisher
@RyanFisher 谢谢,我自己的评论(回显)也让我感到困惑,也许文档已经改变了。 - oskarth
1
@oskarth 好吧,我把你搞糊涂了,我的解释是错误的,测试返回 true 而不是 false。括号是 if 语句的简写形式,因此如果 /usr/bin/python 丢失,则 && 左侧为 true,因此执行右侧(回显消息)。 - Ryan Fisher
@RyanFisher 是的,这是我最初想到的,foo && bar() 是一个非常常见的短路模式,我认为文档中的检查可能是反过来了或者其他什么问题,不太确定。现在已经过了一段时间了。 - oskarth

12

我认为唯一的方法是使用Shell条件:

commands:
  make-directory:
    command: |
      if [ ! -f "${DIR}" ]; then
        mkdir "${DIR}"
      fi

jcabi-beanstalk-maven-plugin中查看更大的示例。


是的,你说得对,我已经询问了 AWS,他们表示在 .ebextensions 中不支持条件操作。好的,谢谢你的建议,我会先尝试一下。 - Khalid
顺便问一下,我怎么理解这段代码:如果 [ ! -f "${DIR}" ],那么创建 "${DIR}" 目录。 - Khalid
我需要为3个命令设置3个条件:1)需要检查是否已经创建了任何文件夹,2)我在/etc/fstab中放置了一行脚本,所以需要检查脚本是否已经创建,3)需要检查一个文件夹是否已经挂载(mount)或者没有。如果我能理解条件脚本命令的话,那就太好了。谢谢。 - Khalid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接