我正在尝试使用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
答案 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
个用户
"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