一、基础配置
1.主配置文件:
/etc/ansible/ansible.cfg
2.主要清单文件
/etc/ansible/hosts
[webserver1]
192.168.89.140 | ansible-web1 #需要做域名解析
[webserver2]
192.168.89.141 | ansible-web2
[weball:children]
webserver1
webserver2
[weball:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_private_key_file=/root/.ssh/id_rsa
ansible_ssh_pass=123123
二、常用模块
使用ansible-doc 变量名查询各种参数,下面所列出的仅为重要参数与少部分查询不到的参数
1.shell: cmd=" "
chdir=
2.copy: back=yes/no #如果为yes的话,copy相同文件时会创建以时间为后缀的文件
3.user: state=absent/present #删除用户/创建用户
remove=yes #删除家目录
4.yum: state=removed/absent/present/latest #卸载/删除安装包/安装/最新
5.service/systemd: state=started/stopped/restarted/reloaded #开启/停止/重启/重新加载
6.file: path=/path/file.txt
state=touch/directory/link/absent #创建文件/目录/链接/删除文件
7.script: creates=/path/file.txt #如果该文件存在,不执行脚本
removes=/path/file.txt #如果该文件存在,执行脚本
cmd=
8.setup: filter=ansible_all_ipv4_addresses #过滤
9.archive: path=/path/file.txt
format=gz
10.unarchive: copy=yes/no #如果设置为yes,从主机复制,如果为no,从节点复制
11.cron: job=" "
12.get_url:
13.yum_repository:
14.lineinfile: path=/path/file.txt
15. debug(配合register使用,其他模块中用register接收模块执行结果到一个变量中):
msg #输出信息,或者输出register变量
var #打印变量输出结果,不用加{{ }},与msg互斥
16.group: system=yes #yes为系统组,默认no
17.特殊参数: ignore_errors: true #忽略错误
标红state按照意思可以在各个模块中按需添加
标蓝path为上述14个模块中唯三使用path参数指定路径的模块,其余均以src、dest指定路径
三、剧本
1.核心元素:
Playbooks #剧本
Variables #变量元素,可传递给Tasks/Templates使用;
Tasks #任务元素,由模块定义的操作的列表,即调用模块完成任务;
Templates #模板元素,使用了模板语法的文本文件;
Handlers #处理器元素,通常指在某事件满足时触发的操作;
Roles #角色元素
2.playbook的基础组件:
name: 剧本名
hosts: 剧本运行的主机
user: 指定远程主机执行任务的用户,可以使用remote
tasks: 剧本任务
vars: 定义变量
vars_files: 调用定义变量文件
notify: 任务执行结果发生更改,触发定义的handler任务执行
handlers: 用于当前关注的资源发生变化时采取一定指定的操作,与tasks相同地位
3.相关参数
1.检查语法参数
ansible-playbook --syntax-check test.yml
2.取消从节点收集变量的参数
gather_facts: no
4.handlers处理器用法
- hosts: webservers1
user: root
tasks:
- name: test copy
copy:
src: /root/a.txt
dest: /mnt
notify: test handlers
handlers:
- name: test handlers
shell:
chdir: /mnt
cmd: echo "abcd" >> /mnt/a.txt
5.vars变量用法
---
- name: install zabbix-agent
hosts: all
tasks:
- name: ensure a list of packages installed
yum:
name: "{{ packages }}"
vars:
packages:
- zabbix-agent
- zabbix-sender
6.vars_files变量文件用法
1.直接引用
---
- hosts: ansible-web1
user: root
vars_files:
- /etc/ansible/vars/file.yml
tasks:
- name: create directory
file:
path: "{{ dest_path }}"
mode: 755
state: directory
- name: copy file
copy:
src: "{{ src_path }}"
dest: "{{ dest_path }}"
###
vim /etc/ansible/vars/file.yml
src_path: /root/test/a.txt
dest_path: /opt/test/
2.套用loop循环
---
- hosts: node1
vars_files:
- /ansible/users.txt
tasks:
- name: create
user:
name: "{{ item.user }}"
uid: "{{ item.uid }}"
state: present
loop: "{{ users }}"
###
vim /ansible/users.txt
- users:
- user: jack
uid: 1050
- user: tom
uid: 1052
- user: jerry
uid: 1053
等价于
---
- hosts: node1
tasks:
- name: create
user:
name: "{{ item.user }}"
uid: "{{ item.uid }}"
state: present
loop:
- user: jack
uid: 1050
- user: tom
uid: 1052
- user: jerry
uid: 1053
7. when条件判断用法
在when语句中,变量不需要使用{{ }}
比较运算符 含义
> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于in 元素在列表中
四、角色
1.目录结构
roles/
|—— nginx
| |—— files — index.html
| |—— handlers — main.yaml
| |—— tasks — main.yaml
| |—— templates — nginx.conf.j2
| |—— vars — main.yaml
|—— site.yaml
2.角色初始化
ansible-galaxy list #查看角色安装目录
ansible-galaxy role init --init-path=/path/../roles 角色名 #创建角色初始化模板目录
3.task编写
[root@ansible-server roles]# vim nginx/tasks/main.yml #添加如下内容
---
- name: install epel
yum:
- name: epel-release
state: latest
- name: install nginx
yum:
- name: nginx
state: latest
- name: copy nginx.conf templte
template:
- src: nginx.conf.j2 #为tmplates模块创建模板,详情看步骤4
dest: /etc/nginx/nginx.conf
- name: copy index.html
copy:
- src: index.html #复制nginx首页文件
dest: /usr/share/nginx/html/index.html
notify: start nginx #触发器接收信号,传输给处理器,详情看步骤6
4.tmplates模板编写
[root@ansible-server roles]# vim nginx/templates/nginx.conf.j2 #添加如下内容
#源代码
#################
user nginx;
worker_process {{ worker_connections }}; #自定义变量vars,详情看步骤5
error_log /var/log/nginx/error.log;
#################
#源代码
5.vars变量编写
[root@ansible-server roles]# vim nginx/vars/main.yml #添加如下内容
worker_connections: 2
6.handlers处理器编写
[root@ansible-server roles]# vim nginx/handlers/main.yml #编写如下内容
---
- name: start nginx #和notify的名字必须一样
service:
- name: nginx
state: started
7.site.yaml启动角色
yml角色启动文件可写ansible目录下任意位置,一般写在roles角色安装路径下
---
- hosts: all
user: root
roles:
- nginx