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文档