阿小信大人的头像
Talk is cheap. Show me the code. Linus Torvalds

Vagrant使用笔记2014-12-18 17:27

关于Vagrant

安装Vagrant

访问http://www.vagrantup.com/downloads可以选择下载对应系统的安装包。

wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.1_x86_64.deb
sudo dpkg -i vagrant*.deb
sudo apt-get install virtualbox

初始化Vagrant生成Vagrantfile

Vagrantfile中都是配置信息,注释很详细了。

具体的虚拟机型号可以在https://atlas.hashicorp.com/boxes/search查看。

vagrant init ubuntu/trusty64 https://atlas.hashicorp.com/ubuntu/boxes/trusty64

开机

运行命令后会下载安装指定的虚拟机并开机:

vagrant up

完成后Vagrantfile所在目录会被共享到虚拟机中的/vagrant/目录下

一些常用命令

  • vagrant ssh : ssh登录虚拟机
  • vagrant destroy : 移除所有虚拟机
  • vagrant halt : 关机
  • vagrant suspend : 暂停
  • vagrant box add ADDRESS : 添加虚拟机
  • vagrant box list : 列出已安装到所有虚拟机
  • vagrant box remove NAME : 删除指定虚拟机
  • vagrant provision : 运行配置的所有服务

provision

在Vagrantfile同级目录新建shell脚本bootstrap.sh,内容为安装软件的shell命令:

#! /usr/bin/env bash
# 无须sudo
apt-get install -y git

然后添加Vagrantfile中的provision配置:

config.vm.provision "shell", path: "bootstrap.sh"  # 运行shell脚本
config.vm.provision "shell", inline: "echo hello"  # 直接运行shell命令

其他的服务可能语法不同,可以具体参看官网说明。

如果已经vagrant up,那么运行

vagrant reload --provision

重新加载provisions

ansible的provision配置

添加Vagrantfile的provision:

config.vm.provision "ansible" do |ansible|
    ansible.groups = {
        "vm1" => ["default"]
    }
    ansible.playbook = "ansible/playbook.yml"
    ansible.verbose = 'vv'
end

通过ansible.groups配置自动生成inventory,值必须是机器名字,不能填IP地址。

也可以通过ansible.inventory_path来指定已有的inventory,但是hosts文件中需要填写IP地址,所以需要指定机器IP和修改limit

config.vm.network "public_network", ip: "192.168.1.137"

config.vm.provision "ansible" do |ansible|
    ansible.inventory_path = 'ansible/hosts'
    ansible.playbook = "ansible/playbook.yml"
    ansible.verbose = "vv"
    ansible.limit = "all"
end

ansible/hosts:

[vm1]
192.168.1.137

[vm2]
192.168.1.139

新建ansible/playbook.yml:

---
- hosts: vm1
  tasks:
    - name: ping1
      ping:

- hosts: vm2
  tasks:
    - name: ping2
      ping:

多台虚拟机用config.vm.define来定义:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

    config.vm.define :vm1 do |vm1|
        vm1.vm.box = "precise32"
        vm1.vm.box_url = "http://files.vagrantup.com/precise32.box"
        vm1.vm.network "public_network", ip: "192.168.1.137"
        config.vm.provision "ansible" do |ansible|
            ansible.inventory_path = 'ansible/hosts'
            ansible.playbook = "ansible/playbook.yml"
            ansible.verbose = 'vv'
            ansible.limit = "all"
        end
    end

    config.vm.define :vm2 do |vm2|
        vm2.vm.box = "precise32"
        vm2.vm.box_url = "http://files.vagrantup.com/precise32.box"
        vm2.vm.network "public_network", ip: "192.168.1.139"
        config.vm.provision "ansible" do |ansible|
            ansible.inventory_path = 'ansible/hosts'
            ansible.playbook = "ansible/playbook.yml"
            ansible.verbose = "vv"
            ansible.limit = "all"
        end
    end
end

然后reload可以查看结果:vagrant reload --provision

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Linux/Mac#  
分享到:
阅读[1807] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

发表评论