【问题标题】:Accessing remote_user variable访问 remote_user 变量
【发布时间】:2018-03-25 03:15:50
【问题描述】:

这似乎可行,但它是否脆弱?我希望将 files 命令中的所有者和组设置为 someguy。我希望能够使用{{ remote_user }},但这不起作用。

这是一个示例剧本,说明了我的意思。

---
- hosts: foobar
  remote_user: someguy
  tasks:
    - name: configure /usr/src/foo
      file: 
        dest: /usr/src/foo
        state: directory
        owner: {{ ansible_ssh_user }}
        group: {{ ansible_ssh_user }}
        recurse: yes
      sudo: yes

这不起作用:

---
- hosts: foobar
  remote_user: someguy
  tasks:
    - name: configure /usr/src/foo
      file: 
        dest: /usr/src/foo
        state: directory
        owner: {{ remote_user }}
        group: {{ remote_user }}
        recurse: yes
      sudo: yes

一个或多个未定义的变量:“remote_user”未定义

【问题讨论】:

  • 上面的定义在哪里?你想在哪里访问它?当你说它不起作用时,你是什么意思?这是一个错误吗?空白值?
  • 我试图让问题更清楚。

标签: ansible ansible-playbook


【解决方案1】:

还有{{ ansible_ssh_user }},它包含远程用户名,似乎可以毫无问题地访问。 See also this answer.

【讨论】:

    【解决方案2】:

    您可以通过添加 vars: 选项来解决此问题

    ---
    - hosts: foobar
      vars:
        remote_user: someguy
      tasks:
        - name: configure /usr/src/foo
          file: 
            dest: /usr/src/foo
            state: directory
            owner: {{ remote_user }}
            group: {{ remote_user }}
            recurse: yes
          sudo: yes
    

    【讨论】:

      【解决方案3】:

      在命令中指定变量时,必须将它们括在引号中 - 例如:

        file: dest=/usr/src/foo state=directory owner={{ remote_user }} group={{ remote_user }} recurse=yes
      

      应该是:

        file: dest=/usr/src/foo state=directory owner="{{ remote_user }}" group="{{ remote_user }}" recurse=yes
      

      我很惊讶你的第一个例子没有引号。

      此外,在该示例中,您的“remote_user”实际上不必是“someguy”,因为通常使用sudo: yes 足以让文件模块正确设置指定的所有者和组。

      【讨论】:

      • 它以 root 身份运行,并且必须以 root 身份运行,因为 /usr/src 子目录除了 root 之外的任何人都不可写。
      • 您确定需要引号吗?我在 jinja 文档中没有看到这一点,如果我这样做,引号也会出现在最终文件中(所以如果文件的那部分不允许引号,我会被冲洗掉)。
      【解决方案4】:

      您可以尝试编写如下剧本:

      ---
        - set_fact: remote_user="someguy"
        - hosts: foobar
          tasks:
            - name: configure /usr/src/foo
              file: dest=/usr/src/foo state=directory owner={{ remote_user }} group={{ remote_user }} recurse=yes
              sudo: yes
      

      【讨论】:

      • 这本质上是一样的,但我真的很鄙视横向滚动,以及每行考虑多个变量的认知负担。它也以完全相同的方式失败。
      猜你喜欢
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      相关资源
      最近更新 更多