如果要使用Windows + Vagrant来构建Ansible环境,ansible_local会很方便

Ansible_local是什么?

ansible_local是被称为Vagrant的配置管理工具之一。
配置管理工具可以在执行vagrant up时帮助安装软件和进行配置更改,而ansible_local则是在虚拟机操作系统上安装Ansible。

参考:【Vagrant文档意译】09.虚拟化 – Qiita

请问方便吗?

只需事先准备好所需的文件,一旦运行Vagrant up,就能创建一个已安装Ansible的虚拟机。
所需的文件至少一个。非常方便。

验证环境

    • Windows 7 professional (64bit)

 

    • Vagrant 1.9.4 インストール済

 

    • VirtualBox 5.1.22 インストール済

 

    • ゲストOSはCentOS 6.7を使用する為、box「bento/centos-6.7」を追加済

 

    対象フォルダは D:\Vagrant\ansible_test

如果想要在客户操作系统中常规安装ansible的话…… (If you want to install ansible in the guest OS normally…)

首先,让我们看一下普通的安装步骤。
首先创建一个Vagrantfile……

PS D:\Vagrant\ansible_test> vagrant init

请对于下面的Vagrantfile进行如下修改:

修改Vagrantfile的方式如下:

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

Vagrant.configure("2") do |config|

  #全ての仮想マシンで公開鍵を共通にする
  config.ssh.insert_key = false

  #box指定
  config.vm.box = "bento/centos-6.7"

  config.vm.define "ansible1" do |server|
    server.vm.hostname = "ansible1"
    server.vm.network :private_network, ip: "192.168.33.35"

    # VirtualBoxのGUI上の名前を設定
    server.vm.provider "virtualbox" do |vb|
      vb.name = config.vm.box.gsub(/\//, "_") + "_" + server.vm.hostname
    end
  end
end

使用PowerShell执行以下命令以启动虚拟机(也可使用命令提示符)。

PS D:\Vagrant\ansible_local> vagrant up

连接到已启动的虚拟机并使用ssh执行yum update命令。

$ sudo yum update

为了安装Ansible,需要先安装EPEL。

$ sudo yum install epel-release

指定EPEL存储库并安装ansible。

$ sudo yum install ansible --enablerepo=epel

现在,已经在新添加的虚拟机上安装了Ansible。

使用ansible_local可以完全省去打这个命令的麻烦。

让我们尝试使用ansible_local。

只需要更改一个Vagrant环境就可以了。只需要做一次就可以了。
因为我们需要共享文件夹,所以我们要在Vagrant中添加一个叫做vbguest的插件。

PS D:\Vagrant\ansible_local> vagrant plugin install vagrant-vbguest

只需要ansible的playbook,ansible_local就能够正常运行!

我想执行”yum update”命令,所以我将按照下面的方式进行记录。
我已将”hosts: all”进行配置。由于本次只创建一个虚拟机,所以没有问题。

请将playbook放置在与Vagrantfile相同的文件夹中。

---
- hosts: all
  become: true
  tasks:
    - name: yum update
      yum:
        name: '*'
        state: latest
        update_cache: yes

在Vagrantfile中添加共享文件夹和ansible_local的配置。

Vagrant.configure("2") do |config|

  config.ssh.insert_key = false

  if Vagrant.has_plugin?("vagrant-vbguest") then
    # Guest Additions自動更新の無効化設定
    config.vbguest.auto_update = false
  end

  config.vm.box = "bento/centos-6.7"

  # 共有フォルダの設定
  config.vm.synced_folder ".", "/vagrant",  create: true, owner: "vagrant", group: "vagrant"

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://atlas.hashicorp.com/search.
  config.vm.define "ansible1" do |server|
    server.vm.hostname = "ansible1"
    server.vm.network :private_network, ip: "192.168.33.35"

    # VirtualBoxのGUI上の名前を設定する
    server.vm.provider "virtualbox" do |vb|
      vb.name = config.vm.box.gsub(/\//, "_") + "_" + server.vm.hostname
    end

    server.vm.provision "ansible_local" do |ansible|
      ansible.playbook = "playbook.yml"
    end

  end
end

不好意思让您久等了。接下来只需执行vagrant up命令即可。

PS D:\Vagrant\ansible_test> vagrant up
Bringing machine 'ansible1' up with 'virtualbox' provider...
==> ansible1: Importing base box 'bento/centos-6.7'...

(中略)

==> ansible1: Mounting shared folders...
    ansible1: /vagrant => D:/Vagrant/ansible_test
==> ansible1: Running provisioner: ansible_local...
    ansible1: Installing Ansible...
    ansible1: Running ansible-playbook...

PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [ansible1]

TASK [yum update] **************************************************************
changed: [ansible1]

PLAY RECAP *********************************************************************
ansible1                   : ok=2    changed=1    unreachable=0    failed=0

我们已经安装了Ansible,并显示yum update已完成。现在让我们通过SSH连接到创建的虚拟机,尝试运行Ansible的版本确认命令。

[vagrant@ansible1 ~]$ ansible --version
ansible 2.3.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]

已安装Ansible 2.3.0.0。安装完成。

一些感受和想法

我在CentOS上执行了上述操作,但只要是与Ansible兼容的操作系统(如Ubuntu或Debian),都可以以类似的方式执行。
然而,安装的Ansible版本将被固定为当时的最新版本。
如果想安装特定版本,就需要使用Shell配置程序等,而不是ansible_local。

无论如何,这真是太方便了。真希望我能早点知道……。

请阅读以上资料

用HashiCorp的Vagrant来尝试在Windows上使用ansible_local进行自动化配置(自动搭建环境)- Qiita
尝试使用ansible_local来搭建vagrant的开发环境 – 在岩手县进行远程工作

有一种名为ansible的配置工具可以在主机操作系统上安装ansible,但由于无法在Windows上安装ansible,所以在本次测试环境中无法使用。

还可以将多个配置写入多个文件中,这样即使在复杂的服务器配置下,也可以自动创建。

广告
将在 10 秒后关闭
bannerAds