在chown上使用Ansible设置Ubuntu 16.04 Vagrant失败
我正试图为一位UbuntuXenial流浪客提供Ansible。它在Ubuntu 14.04上正常工作,但在16.04上失败。我得到的错误是在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
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,我的变量文件中有一个逗号,所以它要找的是“用户名”,而不是“用户名”