当前位置: 首页 > 知识库问答 >
问题:

windows环境下vagrant的多机可移动设置

郑功
2023-03-14

我想让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
    
  • 共有1个答案

    潘智刚
    2023-03-14

    为了回答我自己的问题:通过升级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汇编语言的方方面面。