代码之家  ›  专栏  ›  技术社区  ›  l0b0

如何在Ansible中使用命令stdin?

  •  0
  • l0b0  · 技术社区  · 6 年前

    我试过了 this :

    - name: Log into Docker registry
      command: docker login --username "{{ docker_registry_username }}" --password-stdin
      stdin: "{{ docker_registry_password }}"
    

    这将导致警告和命令失败:

    无法从非TTY设备执行交互式登录

    我也试过了 this :

    - name: Log into Docker registry
      command: docker login --username "{{ docker_registry_username }}" --password-stdin
        stdin: "{{ docker_registry_password }}"
    

    这将导致语法错误:

    错误!加载YAML时语法错误。

    command stdin 在Ansible 2.7中实际工作?如果是,我该怎么用?

    2 回复  |  直到 6 年前
        1
  •  15
  •   larsks    6 年前

    如果你想使用 stdin command 模块,看一下 the docs ,其中显示了使用其他选项的示例,例如 creates ,如下所示:

    # You can also use the 'args' form to provide the options.
    - name: This command will change the working directory to somedir/ and will only run when /path/to/database doesn't exist.
      command: /usr/bin/make_database.sh arg1 arg2
      args:
        chdir: somedir/
        creates: /path/to/database
    

    - name: Log into Docker registry
      command: docker login --username "{{ docker_registry_username }}" --password-stdin
      args:
        stdin: "{{ docker_registry_password }}"
    

    您的第一次尝试失败,因为您正在设置 作为任务级别的关键(如 when ignore_errors ,等等),当你真的想让它成为 命令 模块。

    你的第二次尝试失败了,因为它不是有效的YAML。

        2
  •  -1
  •   Vlad Ivanov    5 年前

    Ansible有docker\u登录模块: https://docs.ansible.com/ansible/latest/modules/docker_login_module.html 它在预览中,来自社区,但它是有效的。

    可以使用敏感数据创建vault文件。

        3
  •  -5
  •   Lewis M    6 年前

    听起来您想使用Ansible expect模块。看到了吗 https://docs.ansible.com/ansible/latest/modules/expect_module.html .

    希望这有帮助。