我想让ansible在我的Windows8机器上提供虚拟盒子VM(通过Vagrant)。所有的一切都需要在本地运行,因为Ansible不在Windows上运行,所以我用Ansible作为控制机器来引导一个debian vm。这段代码就是一个例子。经过与系统的斗争,我得到了它的一些工作,但不完全(虽然ansible没有告诉我)。
如果我们需要,使用ANBABLE[在vm中]、vagrant和virtualbox[在windows主机上]进行多机设置需要什么配置:
>
SSH从主机访问Ansable-VM以及所有从机
ssh从ANSable-VM访问所有从机
如果可能,能够屏蔽主机网络与多机网络
运行ansable-m ping-all-i path-to-hosts
会产生ssh错误。似乎ansible试图访问名为web1和db1的机器,但找不到这样的主机。
为用户建立连接:vagrant REMOTE_MODULE ping为用户建立连接:vagrant REMOTE_MODULE ping 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',62619.41-4982781019922&chmod a+rx$home/.ansible/tmp/ansible-tmp-1398362619.41-4982781019922&echo$home/.ansible/tmp/ansible-tmp-1398362619.41-4982781019922'“]EXEC未找到db1 web1的以前已知的主机文件失败=>SSH遇到未知错误。输出为:openssh_6.0p1 Debian-4,OpenSSL 1.0.1e 2013年2月11日debug1:读取配置数据/etc/SSH/ssh_config debug1:
db1失败=>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:尝试现有主机debug1:Control socket“/home/vagrant/.ansible/cp/ansible-ssh-db1-22-vagrant”的选项debug2:ssh_connect:needpriv 0 ssh:无法解析主机名db1:Name或service not known
下面的代码尝试提供1。ANSABLE MASTER:运行ANSABLE 1的控制机器。DB1:数据库服务器1。Web1:一个web服务器
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
#!/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 html" target="_blank">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}
[webservers]
web1
[dbservers]
db1
为了回答我自己的问题:通过升级ansible并在provision.sh
中导入其他计算机的ssh密钥,解决了这个问题。
# fix permissions on private key file
chmod 600 /home/vagrant/.ssh/id_rsa
# add web/database hosts to known_hosts (IP is defined in Vagrantfile)
ssh-keyscan -H 192.168.51.4 >> /home/vagrant/.ssh/known_hosts
ssh-keyscan -H 192.168.52.4 >> /home/vagrant/.ssh/known_hosts
chown vagrant:vagrant /home/vagrant/.ssh/known_hosts
# reload ssh in order to load the known hosts
/etc/init.d/ssh reload
在正确定安装KDE中文桌面环境的前提下,具体的操作方式请参见上面的相关内容。在/etc/X11/Xsession.d/目录下新建一个文件92fcitx,内容如下: export LANG="zh_CN.UTF-8" #设置中文locales,如果不设,fcitx启动后乱码,不能使用。 export XIM_PROGRAM=fcitx export XIM=fcitx export XMO
本文向大家介绍mycat在windows环境下的安装和启动,包括了mycat在windows环境下的安装和启动的使用技巧和注意事项,需要的朋友参考一下 1、下载 从如下地址下载mycat的安装包: http://www.mycat.io/ 2、解压 解压下载的安装包 3、安装 安装mycat前需要先安装jdk和mysql。mycat1.6版本建议使用的jdk是1.7以上版本,mysql建议使用5
Vagrant是在windows中创建Rails环境的好解决方案吗? 我有一个功能强大的Windows 8 64位桌面。我最近和RoR一起做了一个项目,并爱上了它。正如我发现的那样,在windows上安装RoR只是一种空谈;所以我创建了ubuntu的双启动。作为一名创造性开发人员,我发现在ubuntu中实现任何“创造性”都是相当困难的,因为我缺乏典型的创造性工具。 我读了一点关于一个叫做流浪的工具
本文向大家介绍windows docker环境设置注意事项,包括了windows docker环境设置注意事项的使用技巧和注意事项,需要的朋友参考一下 windows docker环境设置 1、下载docker-install.exe安装VirtualBox、Git、Boot2Docker for Windows 2、设置环境变量,启动boot2docker Core Linux。 可以直接在Vi
本文向大家介绍Windows下搭建Android开发环境,包括了Windows下搭建Android开发环境的使用技巧和注意事项,需要的朋友参考一下 工具/原料 JDK Eclipse ADT JDK的安装和Java环境变量的设置 1、JDK下载地址 JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.h
Windows 环境下32位汇编语言是一种全新的编程语言。它使用与 C++ 语言相同的API接口,不仅可以用来开发出大型的软件,而且是了解操作系统运行细节的最佳方式。本书从编写应用程序的角度,从 Hello World 这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。