简单的ansible命令符合"错误:文件主机被标记为可执行文件"

时间:2014-08-23 04:08:54

标签: ansible

新的ansible。

我使用ppa安装在ubuntu vm 14.04.1版本中安装了ansible

user@ubuntu:~$ ansible --version
ansible 1.7

仅使用hosts

创建了localhost文件
user@ubuntu:~$ cat hosts
localhost

当我尝试运行这个简单的命令时

user@ubuntu:~$ ansible -i hosts all -m ping --ask-pass
SSH password:
ERROR: The file hosts is marked as executable, but failed to execute correctly. If this is not supposed to be an executable script, correct this with `chmod -x hosts`.

UPDATE 当我按照指令删除hosts文件的执行模式时,它可以正常工作。

但是这条消息对我来说仍然很奇怪,为什么需要执行hosts文件。

这有什么问题?

2 个答案:

答案 0 :(得分:9)

可以使用-i选项将几种类型的文件传递给ansible。

  1. 广告资源文件 - a single ini formated inventory file
  2. 以json
  3. 返回dynamic inventory的脚本
  4. 包含(1)和(2)
  5. 组合的目录

    在你的情况下,Ansible认为因为你在文件 hosts 上设置了可执行位,所以它是一个动态库存可执行文件。

    在需要发现要使用的主机的IP地址的情况下,使用动态库存文件(2)是很常见的。例如,您需要查询某种目录服务或API,以获取即时分组的主机列表。

答案 1 :(得分:0)

对于这个讨厌的错误消息:

  

错误:文件库存标记为可执行,但未通过   正确执行。如果这不应该是可执行脚本,   使用chmod -x inventory更正此内容。

我找到了解决方案here

在Vagrantfile中,我添加了这个:

srv.vm.synced_folder '.', '/vagrant', :mount_options => ["fmode=666"]