将行添加到文件的命令的cloud-init runcmd语法

时间:2018-12-12 18:39:48

标签: amazon-web-services amazon-ec2 user-data cloud-init

我正在尝试执行此简单命令,但它始终失败:

 echo "secret_backend_command: /home/ec2-user/dd-get-secrets.py" >> /etc/datadog-agent/datadog.yaml"

我尝试了以下所有操作:

        - [ sh, -c, echo "secret_backend_command: /home/ec2-user/dd-get-secrets.py" >> /etc/datadog-agent/datadog.yaml ]

        - 'sh -c "echo \"secret_backend_command: /home/ec2-user/dd-get-secrets.py\" >> /etc/datadog-agent/datadog.yaml"'

        - sh -c "echo 'secret_backend_command: /home/ec2-user/dd-get-secrets.py' >> /etc/datadog-agent/datadog.yaml

有什么办法解决这个报价吗?

  

请注意,我使用其他文件而不是datadpg.yaml进行了测试,因为   对此权限被拒绝。

我在here中找到的

示例无效

1 个答案:

答案 0 :(得分:0)

我更改了执行方式,而不是将其放置在runcmds的yaml列表中,而是创建了一个脚本,而是将该命令放入其中并在runcmds中调用该脚本。通过这样做,我摆脱了“:”和cloud-init中引号的棘手处理。

  UserData:
    'Fn::Base64': !Sub |
      #cloud-config
      write_files:
        - path: /home/ec2-user/update-datadog-config.sh
          permissions: 0744
          owner: root
          content: |
            #!/usr/bin/env bash
            set -e
            echo "secret_backend_command: /home/ec2-user/dd-get-secrets.py" >> /etc/datadog-agent/datadog.yaml
      runcmd:
        - bash /home/ec2-user/update-datadog-config.sh