一、Ansible概述
1.1 安装ansible
~ ] # pip3 install ansible
1.2 配置运行环境
1.2.1 创建ansible工作目录
~]# mkdir /root/myansi/
1.2.2 创建配置文件
~]# cd /root/myansi/
myansi]# cat ansible.cfg
[defaults]
inventory=hosts
remote_user=root
1.2.3 声明被管理主机
myansi]# cat hosts
[db]
node1
[web]
node2
node3
1.2.4 配置名称解析
myansi]# cat /etc/hosts
192.168.5.1 node1
192.168.5.2 node2
192.168.5.3 node3
1.2.5 添加远程主机密钥到信任列表
myansi]# ssh-keyscan 192.168.5.{1..3} node{1..3} >> /root/.ssh/known_hosts
实现所有主机免密登录的yaml文件:
---
- name: configure ssh key
hosts: all
tasks:
- name: Set authorized key taken from file
authorized_key:
user: root
state: present
key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
1.3 测试ansible
myansi]# ansible all -m ping -k
二、Playbook编程
2.1 Yaml语法
1. 所有的 YAML 文件开始行都应该是 ---。这是 YAML 格式的一部分,表明一个文件的开始
2. 列表中的所有成员都开始于相同的缩进级别,并且使用一个 "- " 作为开头(一个横杠和一个空格)
3. 一个字典是由一个简单的 键: 值 的形式组成(冒号后面必须是一个空格)
2.2 配置VIM
1. Yaml的缩进不能使用tab键
2. 建议缩进为两个空格
3. 为了实现yml文件按tab键缩进两个空格,可以按以下方式对vim进行定制
autocmd FileType yaml setlocal sw=2 ts=2 et ai
2.3 使用模块
1. Ansible的模块实际上就是一个个的python程序文件
2. Ansible执行任务就是通过调用这些模块来完成的
3. 查看模块列表
[root@bogon myansi]# ansible-doc -l
4. 查看模块帮助
[root@bogon myansi]# ansible-doc yum
2.4 编写playbook
1. Playbook有两个play
2. 一个play用于在web上安装httpd,php,php-mysql,并启动服务
3. 另一个play用于在db安装并启动mariadb服务
---
- name: install http php php-mysql
hosts: web
tasks:
- name: ensure a list of packages installed
yum:
name: "{{ packages }}"
vars:
packages:
- httpd
- php
- php-mysql
- name: Start service httpd, if not started
service:
name: httpd
state: started
enabled: yes
- name: install mariadb mariadb-server
hosts: db
tasks:
- name: install the latest version of Apache
yum:
name: httpd
state: latest
- name: Start service httpd, if not started
service:
name: httpd
state: mariadb
enabled: yes
2.5 执行playbook
1. 检查语法
[root@bogon myansi]# ansible-playbook --syntax-check install_web.yml
2. 执行
[root@bogon myansi]# ansible-playbook install_web.yml -k
2.6 ansible-cmdb模块
1、安装
# pip3 install ansible-cmdb
2、利用ansible收集主机信息
[root@room8pc16 myansi]# mkdir /tmp/ansi-cmdb
[root@room8pc16 myansi]# ansible all -m setup --tree /tmp/ansi-cmdb/out/
3、利用ansible-cmdb生成html页面
[root@room8pc16 myansi]# ansible-cmdb /tmp/ansi-cmdb/out/ > /tmp/ansi-cmdb/hosts_info.html
[root@room8pc16 myansi]# firefox /tmp/ansi-cmdb/hosts_info.html