在Mac上从零开始搭建Ansible+Ubuntu虚拟环境
這篇文章所提到的事情
很常见在CentOS虚拟环境中使用Ansible的文章,但是很少有关于在Ubuntu环境下进行Ansible设置的教程,所以我从零开始在mac上进行了一次尝试。
本文中,我們將在Mac上創建一個VirtualBox上的Ubuntu環境。並且,我們還將在Mac上使用ansible安裝軟件到Ubuntu。
环境
- Mac OSX 10.12.4(16E195)
使用HomeBrew安装Vagrant和VirtualBox
安装brew和cask
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install caskroom/cask/brew-cask
安装Vagrant和VirtualBox
brew cask install virtualbox
brew cask install vagrant
安装 Ansible
使用Ansible需要安装Python。
如果您的Mac尚未安装Python,请先安装好。
brew install python
我将安装Ansible。
brew install ansible
太容易了。
安装Ubuntu虚拟环境。
使用vagrant init来创建Vagrant的初始设置。Vagrant的box来自这里的参考。→ Vagrant Cloud上的Vagrant box ubuntu/trusty64 v20170619.0.0
vagrant init ubuntu/trusty64
一旦成功,就会生成Vagrantfile。vagrant主要用于编写服务器配置。
为了从本地的Ansible访问Ubuntu,需要设置本地IP地址。取消Vagrantfile中以下注释。
config.vm.network "private_network", ip: "192.168.33.10"
如果从Vagrantfile中提取所需部分,会得到以下简洁的结果。
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "private_network", ip: "192.168.33.10"
end
好的,现在开始启动Ubuntu。下面是命令。
在初始化时,会自动下载ubuntu/trusty64的映像。
vagrant up
因为要下载大文件,所以可能会花一些时间。请确认一下是否成功了?如果没有显示红色的错误或其他问题的话,那就是成功了。
我們在這裡登入Ubuntu。
vagrant ssh
从“vagrant@vagrant-ubuntu-trusty-64:~$”的提示中,可以确认已成功登录。
(※vagtant的默认设置是用户:vagrant,密码:vagrant。)
通过ssh进行登录。
不使用Vagrant SSH,而是在Mac上设置使用SSH登录。
首先,生成密钥对并使用ssh-copy-id将公钥发送到Ubuntu。
ssh-keygen -t rsa
虽然会有提问,但一切输入”Enter”即可。如果已经存在~/.ssh/id_rsa的秘钥,则无需执行此命令。
使用ssh-copy-id命令将公钥发送到Ubuntu上。这个命令能一次性授予访问权限,非常方便。
ssh-copy-id -i ~/.ssh/id_rsa vagrant@192.168.33.10
我们来试试看能不能放进去。
ssh vagrant@192.168.33.10
成功的标志是能够登录而无需输入密码。
尝试使用Ansible。
暂时先创建一个最初的playbook(使用Ansible编写的文件),以记录想要完成的配置。
./test.yml 文件
- hosts: ubuntu
user: vagrant
tasks:
- name: output message.
debug: msg="hello ansible"
我会在名为Ubuntu的服务器上使用vagrant作为用户名进行登录,并尝试生成日志。
主机:我们给服务器以”ubuntu”的名字作为主机名。可以用任何名字。
用户:关于vagrant,由于默认情况下只能使用”vagrant”作为用户登录到ubuntu,所以我们设定为vagrant。
此外,还需将主机信息写入到同一目录下的另一个文件hosts。
./hosts 文件:
[ubuntu]
192.168.33.10
请注意!”ubuntu” 是您之前在 hosts 文件中设置的主机名。在下面我写下了 Vagrant 的 IP。
好了,让我们使用以下命令来运行Ansible。
ansible-playbook -i hosts test.yml
对于在hosts文件中设置的目标Ubuntu服务器,将执行在test.yml中编写的动作。
以下的输出结果是成功地将消息输出。
PLAY [ubuntu] ******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [192.168.33.10]
TASK [output message.] *********************************************************
ok: [192.168.33.10] => {
"msg": "hello ansible"
}
PLAY RECAP *********************************************************************
192.168.33.10 : ok=2 changed=0 unreachable=0 failed=0
在apt中安装软件。
我会尝试在apt上安装最新的NTP。
我会创建以下的播放清单。
apt.yml(名称随意)
- hosts: ubuntu
user: vagrant
become: yes
tasks:
- name: install latest ntp package
apt: pkg=ntp state=latest
为了能够安装软件包,必须要以sudo用户身份进行操作,因此在第三行加上了become: yes。(在ansible1.8之前,只需要sudo:yes即可,但为了避免重复,语法进行了更改。)软件包的安装是通过最后一行的apt:命令来执行的。
请使用以下命令来执行。
ansible-playbook -i hosts apt.yml
如果没有出现错误而顺利完成,那就表示成功了。
我之前在使用Chef,但与之比起来,我觉得Ansible相对来说更容易使用和记忆,只需要在yml文件中编写配置项即可。
之后,可以参考 Ansible 官方文档等来创建各种项目。
Ansible 文档 — Ansible 文档
请参考一下。
对于想了解Ansible到底是什么的人,请参考这里。给初学者的Ansible入门指南。- Qiita
有关最佳实践的示例构成写在这里。
Ansible教程 | 日本语的Ansible教程