首页 文章

变量,其中包含正在执行的当前ansible-playbook的路径?

提问于
浏览
70

是否有一个ansible变量,它具有正在执行的当前ansible-playbook的绝对路径?

some context: 我正在运行/创建一个针对 localhost 的ansible脚本来配置mysql docker并希望相对于ansible脚本挂载数据卷 .

例如,让's say I' ve将存储库签出到 ~/branch1/ 然后我运行 ansible-playbook dev.yml 我认为它应该将卷保存到 ~/branch1/.docker_volume/ . 如果我从 ~/branch2 运行它,那么它应该将卷配置为 ~/branch2/.docker_volume/ .

5 回答

  • 29

    您可以使用 playbook_dir 变量 .

  • 1

    似乎没有一个变量能够完全保留您想要的变量 .

    但是,引用the docs

    同样可用,inventory_dir是持有Ansible库存主机文件的目录的路径名,inventory_file是指向Ansible库存主机文件的路径名和文件名 . playbook_dir包含playbook基目录 . 最后,role_path将返回当前角色的路径名(自1.8起) . 这只适用于角色 .

    根据您的设置,这些或基于_914107的解决方案可能就足够了 .

  • 1

    不幸的是没有 . 实际上,在Ansible如何运行的上下文中,绝对路径有点无意义(并且可能令人困惑) . 简而言之,当您调用一个剧本然后为每个任务时,Ansible将与该任务相关联的模块物理复制到目标机器上的临时目录,然后使用必要的参数调用该模块 . 所以目标机器上的绝对路径只是一个临时目录,其中只包含一些临时文件,甚至不包括完整的剧本 . 此外,知道Ansible服务器上文件的完整路径在目标计算机上几乎没用,除非您在目标上复制整个Ansible目录树 .

    要查看Ansible定义的所有变量,您只需运行the following command

    $ ansible -m setup hostname
    

    你认为你需要知道剧本的绝对路径的原因是什么?

  • 120

    我正在使用这样的剧本来测试我在当地的角色:

    ---
    - hosts: localhost
      roles:
         - role: .
    

    但这停止了与Ansible v2.2的合作 .

    我调试了前面提到的解决方案

    ---
    - hosts: all
      tasks:
        - name: Find out playbooks path
          shell: pwd
          register: playbook_path_output
        - debug: var=playbook_path_output.stdout
    

    它产生了我的主目录而不是“当前工作目录”

    我安顿下来了

    ---
    - hosts: all
      roles:
        - role: '{{playbook_dir}}'
    

    根据上述解决方案 .

  • 0

    没有用于此目的的内置变量,但您总是可以使用“pwd”命令找出playbook的绝对路径,并将其输出注册到变量 .

    - name: Find out playbook's path
      shell: pwd
      register: playbook_path_output
    - debug: 
      debug: var=playbook_path_output.stdout
    

    现在路径在变量playbook_path_output.stdout中可用

相关问题