DevOps 之 Ansible入门实践(一)

本文将介绍在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环境的服务器.

参考列表

欢迎大家关注我的简书,不定时更新文章。

推荐阅读更多精彩内容