本文将介绍在Ansible 以及 Galaxy 的基本使用。
本文默认操作环境为 Mac.
安装Ansible[^1]
sudo pip install ansible
即可完成安装。
配置conf
创建并编辑ansible的hosts文件
# /etc/ansible/hosts是默认路径
sudo mkdir /etc/ansible
sudo vi /etc/ansible/hosts
添加内容如
[web-server]
192.168.1.134
[mysql]
192.168.1.133:2222
如果远程的ssh端口修改了不在22标准端口,文件内容中机器地址应该明确指定端口号如:
192.168.1.134:2222
authorized_keys授权
新建一个基本的playbook文件 copyKey.yml
- name: cp sshKey
hosts: all
user: root
become: yes
tasks:
- name: Placing key
authorized_key: user=root key="{{ lookup('file', '/home/{***}/.ssh/id_rsa.pub') }}"
注意 key 的文件本地目录地址的修改。
hosts 也可以改成 web-server 来指定 只操作 该主机。
执行命令 ansible-playbook copyKey.yml --ask-pass --user=root
--ask-pass 即 显示的 问你输入服务的密码.
ping test
上述的copyKey 执行成功后,执行 ansible web-server -m ping -u root
正确回应
192.168.1.134 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Playbook[^2]
playbooks使用yaml语法,在ansible中几乎所有的yaml文件都是以list开始,每个item是键值对的list。
所有的yaml文件都以---
开头表示开始一个document,所有的列表元素以-
开头,键值对用:
,后面的空格是必须的。(如果官网文档中有指出空格那一定是merge了我的pull request_)
键值对中的值如果是bool类型的字符串true/false(首字母不论大小写),pyyaml会load成python中对应的bool值,在键值对中如果值中有:
或者以{{
开头的变量定义,则必须用引号引起来
示例如下:
- name: Hello Ansible - quick start
hosts: web-server
user: root
become: yes
tasks:
- name: Hello server
shell: date >> now.txt
上述的示例 即 在 now.txt 中 写入一行Date信息
常用的Task Module[^4]
例如上述的Hello server 即 使用到了 shell[^5] 模块.
authorized_key
| - Adds or removes an SSH authorized key
command
| - Executes a command on a remote node
copy
| - Copies files to remote locations
apt_repository
| - Add and remove APT repositories
apt
| - Manages apt-packages
所有的Task Module 参考 这里
Ansible Galaxy[^3]的使用
Mysql 安装示例
找到 geerlingguy.mysql,它是MySQL server for RHEL/CentOS and Debian/Ubuntu.的ROLE.
执行 ansible-galaxy install geerlingguy.mysql
安装到本地.
在新建一个 mysql.yml
的文件
- hosts: [mysql]
become: yes
vars_files:
- vars/main.yml
roles:
- {role: geerlingguy.mysql }
同个目录下 新建 vars
目录,并新建 main.yml 文件
mysql_root_password: 123456
mysql_databases:
- name: ***-base
encoding: utf8mb4
collation: utf8mb4_unicode_ci
mysql_users:
- name: ***-base
host: "%"
password: xxxxx
priv: "***-base.*:ALL"
执行命令 ansible-playbook mysql.yml
,则目标服务器则自动安装mysql。
未完待续,下篇文章将讲述如何快速的初始化一台J2EE环境的服务器.
参考列表
- [^1]Ansible Installation
- [^2]Playbook 介绍
- [^3]Ansible Galxy
- [^4]Ansible Modules
- [^5]Shell Modules
欢迎大家关注我的简书,不定时更新文章。