解决方案#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创建了软链接
希望对你有所帮助。
解决方案#2
出现此错误的原因:
我已经查看了包含详细日志的要点并发现了这一点:
- 相信你用的是官方的vagrant box
ubuntu/xenial64
- 这个官方的vagrant box没有
vagrant用户
-
"msg": "chown failed: failed to look up user vagrant" 这是错误跟踪,可帮助您找到确切的错误。
此错误的解决方案 1:
下载一些其他的vagrant box,推荐这个vagrant boxgeerlingguy/ubuntu1604口碑真的很好
此错误的解决方案 2:
使用官方的 vagrant box,你可以像我一样做来减轻这个错误。将以下内容添加到您的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 密钥。因此,您可以将 playbook 运行到 vagrant 机器上,就像它是远程机器一样。如果您进一步遇到任何问题,请告诉我。
希望对您有所帮助。