Vagrant+Ansible 环境搭建备忘录

在Mac上,通过Homebrew casks安装。

$ brew cask install ansible

请确认动作版本。

确认以下操作时的版本

$ VBoxManage  -v
5.0.6r103037

$ vagrant -v
Vagrant 1.7.4

$ ansible --version
ansible 1.9.2

在Vagrant上创建虚拟终端。

创建一个用于作业的目录,并在其中准备一个Vagrantfile。

$ mkdir ansible_test
$ cd ansible_test
$ vagrant init centos/7

现在有一个 Vagrantfile 的模板了,我们需要将其更改为以下状态。

Vagrant.configure(2) do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", ip: "192.168.33.10"
end

确认前面的步骤,通过运行vagrant up检查虚拟环境是否启动。
确认虚拟环境已经启动后,通过运行vagrant ssh检查能够访问该环境。

$ vagrant ssh

[vagrant@localhost ~]$ yum list installed

准备 Ansible

在创建Host的Vagrantfile的位置上创建provisioning文件夹。
在该文件夹下创建Ansible所引用的Inventory文件(文件名为hosts)。

准备Inventory文件。 Inventory .)

[vagrants]
192.168.33.10

尝试通过Ansible执行ping命令。

$ ansible -i provisioning/hosts all -m ping -u vagrant --private-key=.vagrant/machines/default/virtualbox/private_key
192.168.33.10 | success >> {
    "changed": false,
    "ping": "pong"
}

准备配置文件

将SSH连接信息输出到ssh.config。

$ vagrant ssh-config > ssh.config
Host 192.168.33.10
  HostName 192.168.33.10
  User vagrant
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile path/to/private_key
  IdentitiesOnly yes
  LogLevel FATAL

将 Ansible 的执行选项写入 ansible.cfg。

[defaults]
hostfile = provisioning/hosts

[ssh_connection]
ssh_args = -F ssh.config

我们再次尝试进行 ping 测试。

$ ansible all -m ping
192.168.33.10 | success >> {
    "changed": false,
    "ping": "pong"
}

启用沙盒模式

$ vagrant sandbox on

创建PlayBook

---
- hosts: vagrants
  sudo: yes
  user: vagrant
  tasks:
    - name: install packages git
      yum: name=git update_cache=yes

请通过vagrant provision命令加载上述的PlayBook配置。

Vagrant.configure(2) do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", ip: "192.168.33.10"

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

提供执行

$ vagrant provision
==> default: Running provisioner: ansible...

PLAY [vagrants] ***************************************************************

GATHERING FACTS ***************************************************************
ok: [192.168.33.10]

TASK: [install packages git] **************************************************
changed: [192.168.33.10]

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

确认在虚拟终端中自动安装了git。
使用ssh登录到虚拟终端并确认可以使用git命令。

单独执行playbook

也可以通过指定标签来执行,例如以下方式。

$ ansible-playbook site.yml -t hoge

请参考

游民相关

HashiCorp的Atlas

Ansible – 服务 – Vagrant 文档

Ansible相关

Ansible 文档

使用Ansible和Vagrant构建开发环境-樱花知识

使用 Vagrant 和 Ansible 的组合 | CUBE SUGAR STORAGE

使用 Vagrant 和 Ansible —Ansible文档

Ansible/Ansible示例

Ansible 常用的文件操作模块|Developers.IO

Ansible Galaxy | 寻找、重用和分享最好的 Ansible 内容

实践!Ansible最佳实践(上半部)- 樱花知识

实践!Ansible最佳实践(下篇)- 樱花知识

最佳实践——Ansible文档

广告
将在 10 秒后关闭
bannerAds