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

时间:2016-06-14 02:58:24

标签: ubuntu vagrant ansible

我正在尝试使用Ansible配置Ubuntu Xenial Vagrant来宾。它在Ubuntu 14.04上运行正常,但在16.04失败。我得到的错误是

chown failed: failed to look up user vagrant

我正在运行的任务如下:

- name: Ensure /srv/web exists become: yes file: path: /srv/web state: directory mode: 0755 owner: "{{ remote_user }}"

搜索没有找到很多帮助。

谢谢!

编辑:对Digital Ocean 14.04 Droplet的进一步测试也显示了这个问题。

编辑2:Full output log at -vvvv level

2 个答案:

答案 0 :(得分:4)

<强> SOLOUTION#1

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

对于Ubuntu 16.04,我使用以下游戏来安装Python 2.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

关键行是gather_facts: no,它阻止Ansible在远程服务器上执行远程服务器尚不支持的代码。没有这一行,播放将失败。

这提供了/usr/bin/python2.7,我在库存文件中明确指出了它。

[xenials] 
192.168.33.100 

[xenials:vars] 
ansible_python_interpreter=/usr/bin/python2.7 

请注意,名称xenials没有什么特别之处。这只是我在库存中定义的一个组。

ansible_python_interpreter只需要第一次,之后你可以删除它,因为我们已经为python2.7创建了软链接 希望对你有所帮助。

<强> SOLOUTION#2

此错误的原因:

我已经查看了包含详细日志的要点,并想出了这个:

  • 我确定您使用的是官方的流浪盒ubuntu/xenial64
  • 这个官方的流浪者盒子没有vagrant个用户 enter image description here
  • "msg": "chown failed: failed to look up user vagrant"这是帮助您找到确切错误的错误跟踪。

此错误的解决方法1:

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

此错误的解决方案-2:

使用官方的流浪盒,您可以像我一样做,以缓解此错误。将以下内容添加到您的Vagrantfile

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

它将做的是,只需为访客创建主机登录用户并为其上传rsa密钥。因此,您可以将剧本运行到流浪汉机器,就好像它是远程机器一样。如果您有任何进一步的问题,请告诉我。

希望这对你有所帮助。

答案 1 :(得分:2)

我遇到了同样的问题。我正在使用.grid-view td { white-space:pre-line; // or just 'normal' }

我注意到没有ubuntu/xenial64用户。当我使用Vagrant进行SSH时,使用了vagrant用户。

我创建了ubuntu

ansible.cnf

之后我遇到了另一个问题:没有python。我用以下方法解决了这个问题:

[default]
remote_user = ubuntu

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

ansible ping