【发布时间】:2014-06-11 09:47:42
【问题描述】:
目的
我希望 ansible 在我的 Windows 8 机器上配置虚拟机 vm [通过 Vagrant]。一切都需要在本地运行,并且由于 Ansible 不能在 Windows 上运行,我用 ansible 作为控制机器引导一个 debian vm。 This code 就是一个例子。 在与系统斗争之后,我得到了它的一些工作,但并不完全(虽然 ansible 没有告诉我)。
问题
如果我们需要,使用 ansible [在 vm 中]、vagrant 和 virtualbox [在 windows 主机上] 进行多机设置需要什么配置:
ssh 从主机访问 ansible-vm 以及所有从属设备
ssh 从 ansible-vm 访问所有从属设备
如果可能的话,能够屏蔽多机网络与主机网络
问题
运行 ansible -m ping -all -i path-to-hosts 会产生 ssh 错误。似乎 ansible 尝试访问名为 web1 和 db1 的机器,但找不到这样的主机。
为用户建立连接:vagrant REMOTE_MODULE ping 为用户建立连接:vagrant REMOTE_MODULE ping 执行 ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath =/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic, gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'ConnectTimeout=10', 'web1', "/bin/sh -c 'mkdir -p $HOME/. ansible/tmp/ansible-tmp-1398362619.41-142470238612762 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1398362619.41-142470238612762 && echo $HOME/.ansible/tmp/ansible-tmp-21-17624'7026164"1-17624'7. ] 为 web1 找不到 EXEC 以前的已知主机文件 执行 ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath =/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic, gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'ConnectTimeout=10', 'db1', "/bin/sh -c 'mkdir -p $HOME/. ansible/tmp/ansible-tmp-1398362619.41-4982781019922 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1398362619.41-4982781019922 && echo $HOME/.ansible/tmp/ansible-tmp-13983626019.992-4'9" ] EXEC 未找到 db1 的先前已知主机文件 网页1 | FAILED => SSH 遇到未知错误。输出是: OpenSSH_6.0p1 Debian-4,OpenSSL 1.0.1e 2013 年 2 月 11 日 debug1:读取配置数据 /etc/ssh/ssh_config debug1:/etc/ssh/ssh_config 第 19 行:为 * 应用选项 debug1: auto-mux: 尝试现有的 master debug1:控制套接字“/home/vagrant/.ansible/cp/ansible-ssh-web1-22-vagrant”不存在 调试2:ssh_connect:需要priv 0 ssh:无法解析主机名 web1:名称或服务未知
db1 | FAILED => SSH 遇到未知错误。输出是: OpenSSH_6.0p1 Debian-4,OpenSSL 1.0.1e 2013 年 2 月 11 日 debug1:读取配置数据 /etc/ssh/ssh_config debug1:/etc/ssh/ssh_config 第 19 行:为 * 应用选项 debug1: auto-mux: 尝试现有的 master debug1:控制套接字“/home/vagrant/.ansible/cp/ansible-ssh-db1-22-vagrant”不存在 调试2:ssh_connect:需要priv 0 ssh:无法解析主机名 db1:名称或服务未知
代码
以下代码尝试提供 1. ansible-master:运行ansible的控制机 1. db1:数据库服务器 1. web1:网络服务器
流浪文件
Vagrant.configure("2") do |config|
config.vm.box = "wheezy64"
config.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210.box"
config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=777','fmode=666']
config.vm.network :public_network
config.vm.provider "virtualbox" do |v|
v.customize [
"modifyvm", :id,
"--groups", "/Vagrant/Ansible",
# "--natdnshostresolver1", "on"
]
end
config.vm.define :ansiblemaster do |ansiblemaster|
# ansiblemaster.vm.network :private_network, ip: "192.168.111.101"
ansiblemaster.vm.hostname = "ansiblemaster"
# ansiblemaster.vm.network :forwarded_port, guest: 80, host: 8080
ansiblemaster.ssh.forward_agent = true
ansiblemaster.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", 512]
vb.customize ["modifyvm", :id, "--name", "ansible-master"]
vb.name = "ansiblemaster"
end
ansiblemaster.vm.provision :shell, :inline =>
"if [[ ! -f /apt-get-run ]]; then sudo apt-get update && sudo touch /apt-get-run; fi"
ansiblemaster.vm.provision :shell do |sh|
sh.path = "provision.sh"
sh.args = "./ansible provisioning/site.yml provisioning/hosts/dev_hosts"
end
end
config.vm.define :web1 do |slave|
slave.vm.hostname = "web1"
# slave.vm.network :private_network, ip: "192.168.111.201"
slave.vm.synced_folder "./src", "/var/www/site", id: "proj-root"
slave.vm.provider :virtualbox do |vb|
vb.name = "web1"
vb.customize ["modifyvm", :id, "--memory", "512"]
end
end
config.vm.define :db1 do |slave|
slave.vm.hostname = "db1"
#slave.vm.network :private_network, ip: "192.168.111.202"
slave.vm.provider :virtualbox do |vb|
vb.name = "db1"
vb.customize ["modifyvm", :id, "--memory", "512"]
end
end
end
Provision.sh
#!/bin/bash
ANSIBLE_DIR=$1
ANSIBLE_PLAYBOOK=$2
ANSIBLE_HOSTS=$3
TEMP_HOSTS="/tmp/ansible_hosts"
if [ ! -f /vagrant/$ANSIBLE_PLAYBOOK ]; then
echo "Cannot find Ansible playbook"
exit 1
fi
if [ ! -f /vagrant/$ANSIBLE_HOSTS ]; then
echo "Cannot find Ansible hosts"
exit 2
fi
if [ ! -d $ANSIBLE_DIR ]; then
echo "Updating apt cache"
apt-get update
echo "Installing Ansible dependencies and Git"
apt-get install -y git python-yaml python-paramiko python-jinja2
echo "Cloning Ansible"
git clone git://github.com/ansible/ansible.git ${ANSIBLE_DIR}
fi
cd ${ANSIBLE_DIR}
cp /vagrant/${ANSIBLE_HOSTS} ${TEMP_HOSTS} && chmod -x ${TEMP_HOSTS}
echo "Running Ansible"
echo "dir is nu: " $(pwd)
source hacking/env-setup
echo "source ${ANSIBLE_DIR}/hacking/env-setup" >> /home/vagrant/.bashrc
ansible-playbook /vagrant/${ANSIBLE_PLAYBOOK} --inventory-file=${TEMP_HOSTS} --connection=local
rm ${TEMP_HOSTS}
配置/主机/dev_hosts
[webservers]
web1
[dbservers]
db1
【问题讨论】:
-
如果这个问题太具体,请随意关闭。
标签: ssh virtualbox vagrant virtualization ansible