在chown上使用Ansible设置Ubuntu 16.04 Vagrant失败

在chown上使用Ansible设置Ubuntu 16.04 Vagrant失败,ubuntu,vagrant,ansible,Ubuntu,Vagrant,Ansible,我正试图为一位UbuntuXenial流浪客提供Ansible。它在Ubuntu 14.04上正常工作,但在16.04上失败。我得到的错误是 chown失败:无法查找用户vagrant 我正在运行的任务如下所示: -名称:确保/srv/web存在 变成:是的 文件: 路径:/srv/web 状态:目录 模式:0755 所有者:“{{remote_user}}” 搜索没有找到多少帮助 谢谢 编辑:对数字海洋14.04液滴的进一步测试也显示了这个问题 编辑2:at-vvvv级别 Ubuntu 16

我正试图为一位UbuntuXenial流浪客提供Ansible。它在Ubuntu 14.04上正常工作,但在16.04上失败。我得到的错误是

chown失败:无法查找用户vagrant

我正在运行的任务如下所示:

-名称:确保/srv/web存在
变成:是的
文件:
路径:/srv/web
状态:目录
模式:0755
所有者:“{{remote_user}}”

搜索没有找到多少帮助

谢谢

编辑:对数字海洋14.04液滴的进一步测试也显示了这个问题

编辑2:at-vvvv级别

Ubuntu 16.04有python3,而不是2.7.x。Ansible还不支持Python 3

对于Ubuntu16.04,我使用下面的重头戏来安装Python2.7

---
- hosts: xenials 
  gather_facts: no
  become: yes
  tasks:
    - name: Install python 2.7 
      raw: apt-get update -qq && apt-get install -qq python2.7

    - name: check if softlink exists
      stat:
        path: /usr/bin/python
      register: python_file

    - name: create softlink for python 2.7
      raw: ln -s /usr/bin/python2.7 /usr/bin/python
      when: python_file.stat.islnk is not defined

    - name: Ensure /srv/web exists
      file:
        path: /srv/web
        state: directory
        mode: 0755
        owner: "{{ remote_user }}" # hope you have defined this variable in your ansible.cfg
关键一行是收集事实:否,它阻止Ansible在远程服务器上执行远程服务器尚不支持的代码。没有这一行,播放将失败

这提供了一个
/usr/bin/python2.7
,我在清单文件中明确指出了它

[xenials] 
192.168.33.100 

[xenials:vars] 
ansible_python_interpreter=/usr/bin/python2.7 
请注意,名称
xenials
没有什么特别之处。这只是我在清单中定义的一个组

这个
ansible\u python\u解释器只需要第一次使用,之后您可以删除它,因为我们已经为python2.7创建了软链接
希望这对你有帮助

SOLOUTION#2

此错误的原因:

我已经查看了包含详细日志的要点,并得出以下结论:

  • 我确信你使用的是官方的流浪者盒子
    ubuntu/xenial64
  • 此官方流浪者框没有
    vagrant
    用户
  • “msg”:“chown失败:无法查找用户vagrant”
    这是帮助您找到确切错误的错误跟踪
此错误的解决方案-1:

下载一些其他的流浪汉盒子,我推荐这个流浪汉盒子
geerlingguy/ubuntu1604
它有很好的声誉

此错误的解决方案2:

使用官方的流浪者框,您可以像我一样减轻这个错误。将以下内容添加到您的
文件中

config.vm.provision "shell" do |s|
    ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
    ssh_user = ENV['USER']
    s.inline = <<-SHELL
      adduser --disabled-password --gecos "" #{ssh_user}
      mkdir -p /home/#{ssh_user}/.ssh
      touch /home/#{ssh_user}/.ssh/authorized_keys
      chown -R #{ssh_user}. /home/#{ssh_user}/.ssh
      echo "#{ssh_user} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/99-#{ssh_user}
      echo #{ssh_pub_key} >> /home/#{ssh_user}/.ssh/authorized_keys
      chmod 0440 /etc/sudoers.d/99-#{ssh_user}
    SHELL
  end
config.vm.provision“shell”do|
ssh#u pub_key=File.readlines(“#{Dir.home}/.ssh/id_rsa.pub”).first.strip
ssh_user=ENV['user']
s、 inline=>/home/{ssh\u user}/.ssh/authorized\u密钥
chmod 0440/etc/sudoers.d/99-#{ssh_user}
壳
结束
它将要做的是,只需向来宾创建您的主机登录用户,并为其上载rsa密钥。因此,您可以将playbook运行到流浪者机器,就像它是远程机器一样。如果你还有什么问题,请告诉我


希望这对你有帮助。

我也有同样的问题。我正在使用ubuntu/xenial64

我注意到没有
流浪者
用户。当我使用Vagrant进行SSH时,使用的是
ubuntu
用户

我创建了一个
ansible.cnf

[default]
remote_user = ubuntu
之后,我遇到了另一个问题:没有python。我用以下方法解决了这个问题:

sudo apt-get install python2.7
sudo apt-get install python-pip
现在,
ansible ping
模块适用于我的主机

$ ansible elastichsearch -m ping
192.168,101.10 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

也许这与你正在使用的特定图像有关。我也遇到了与数字海洋14.04图像相同的问题。我会更新我的问题你可以用“便当盒”来代替--便当ubuntu盒有一个“流浪者”用户,这更典型,请在你的问题中增加详细内容并粘贴错误。我在问题中添加了完整输出的要点谢谢,解决了流浪者的错误。至于digital ocean,我的变量文件中有一个逗号,所以它要找的是“用户名”,而不是“用户名”