ansible常用模块汇总
command 在远程主机上执行命令操作 默认模块
shell 在远程主机上执行命令操作 万能模块
PS:有时剧本不能反复执行!!(比如我们使用shell模块在被管理端创建已经存在的用户时,会出现报错)
script 批量执行本地脚本
copy 批量分发传输数据信息
fetch 将远程主机数据进行拉取到本地管理主机
file 修改数据属性信息/创建数据信息
yum 用于安装和卸载软件包
service 用于管理服务的运行状态
user 用于批量创建用户并设置密码信息
mount 用于批量挂载操作
cron 批量部署定时任务信息
ping 远程管理测试模块
ping模块补充
ansible 172.16.1.31 -m ping 测试远程管理主机是否正常
ansible服务剧本功能
-
ansible剧本组成部门示意图
-
rsync服务剧本
准备工作- 熟悉软件部署流程
- 熟悉ansible软件模块使用
- 熟悉ansible剧本编写规范
-
ansible
an-hoc 临时实现批量管理功能(模块) --- 命令
playbook 永久实现批量管理功能(剧本) --- 脚本
-
剧本编写常见的错误
- 剧本语法规范是否符合(空格 冒号 短横线)
- 剧本中模块使用是否正确
- 剧本中一个name标识下面只能些一个模块任务信息
-
编写rsync剧本
cd /etc/ansible/ansible-playbook/
vim rsync_server.yaml
- hosts: 172.16.1.41
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/ansible-playbook/rsyncd.conf dest=/etc
- name: 03-useradd
user: name=rsync create_home=no shell=/sbin/nologin
- name: 04-bak
file: dest=/lala_bak state=directory owner=rsync group=rsync
- name: 05-passwd
copy: content='lala:123' dest=/etc/rsync.passwd mode=600
- name: 06-start
service: name=rsyncd state=started enabled=yes
- hosts: 172.16.1.31,172.16.1.9
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-create passwd file
copy: content='123' dest=/etc/rsync.password mode=600
- name: 03-check test data back
file: dest=/test.txt state=touch
- name: 04-test
shell: rsync -az /test.txt lala@172.16.1.41::nana --password-file=/etc/rsync.password
配置主机清单配置文件
定义可管理的主机信息 : /etc/ansible/hosts
- 第一种方式:分组配置主机信息
vim /etc/ansible/hosts
# 定义可以管理的主机信息(分发过公钥的主机)
[data]
172.16.1.31
172.16.1.41
[web]
172.16.1.9
操作过程
ansible web -a "hostname"
# 172.16.1.9 | CHANGED | rc=0 >>
# web03
ansible data -a "hostname"
# 172.16.1.41 | CHANGED | rc=0 >>
# backup
# 172.16.1.31 | CHANGED | rc=0 >>
# nfs
- 第二种方式:主机名符号匹配配置
vim /etc/ansible/hosts
[data]
172.16.1.[7:9] / # 括号里面的数字为[7,8,9]
web[01:03] # 前提条件,需要在/etc/hosts文件里面写入web服务器相对应的ip地址
- 第三种方式:支持非标准远程端口配置
被管理端(172.16.1.31:66)
vim /etc/ssh/sshd_config
Port 66 # 将ssh端口改成66
管理端
vim /etc/ansible/hosts
[data]
172.16.1.31:66
- 第四种方式:支持主机使用的特殊变量
vim /etc/ansible/hosts
[data]
172.16.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123
# 添加被管理服务器的端口号,密码,以什么身份访问。(无需给被管理端分发公钥)
[data]
nfs ansible_ssh_host=172.16.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123
# 添加ip地址对应的主机名,这样就无需再将主机名和IP地址添加本地/etc/hosts文件了(通过映射关系)
- 第五种方式:主机组名嵌入配置
5.1用法:
vim /etc/ansible/hosts
[rsync:children] 嵌入子组信息,格式[主组名:children]
rsync_server
rsync_client
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.9
172.16.1.31
5.2用法:
vim /etc/ansible/hosts 嵌入式变量信息
[web:vars]
ansible_ssh_host=172.16.1.9
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass=123
[web]
web03
编写剧本重要功能介绍
- a 在剧本中设置变量信息
- b 在剧本中设置注册信息
- b 在剧本中设置判断信息
- c 在剧本中设置循环信息
- d 在剧本中设置错误忽略
- d 在剧本中设置标签信息
- e 在剧本中设置触发信息
- f 在剧本中进行剧本整合
在剧本中设置变量信息
vim /etc/ansible/hosts 主机组名嵌入配置
[rsync:children]
rsync_server
rsync_client
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.9
172.16.1.31
方式一:直接在剧本文件中编写
cd /etc/ansible/ansible-playbook
vim rsync_server_变量信息.yaml
- hosts: rsync_server
vars:
backupdir: /data 定义备份目录
passfile: rsync-passwd 定义密码文件
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/ansible-playbook/rsyncd.conf dest=/etc
- name: 03-useradd
user: name=rsync create_home=no shell=/sbin/nologin
- name: 04-bak
file: dest={{ backupdir }} state=directory owner=rsync group=rsync
- name: 05-passwd
copy: content='lala:123' dest=/etc/{{ passfile }} mode=600
- name: 06-start
service: name=rsyncd state=started enabled=yes
- hosts: rsync_client
vars:
passfile: rsync.password 定义保存的密码文件
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-create passwd file
copy: content='123' dest=/etc/{{ passfile }} mode=600
- name: 03-check test data back
file: dest=/test.txt state=touch
- name: 04-test
shell: rsync -az /test.txt lala@172.16.1.41::nana --password-file=/etc/{{ passfile }}
方式二:在命令行中进行指定
cd /etc/ansible/ansible-playbook
vim rsync_server_变量信息.yaml
- hosts: rsync_server
# vars:
# backupdir: /data 定义备份目录
# passfile: rsync-passwd 定义密码文件
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/ansible-playbook/rsyncd.conf dest=/etc
- name: 03-useradd
user: name=rsync create_home=no shell=/sbin/nologin
- name: 04-bak
file: dest={{ backupdir }} state=directory owner=rsync group=rsync
- name: 05-passwd
copy: content='lala:123' dest=/etc/{{ passfile }} mode=600
- name: 06-start
service: name=rsyncd state=started enabled=yes
- hosts: rsync_client
# vars:
# passfile: rsync.password 定义保存的密码文件
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-create passwd file
copy: content='123' dest=/etc/{{ passfile }} mode=600
- name: 03-check test data back
file: dest=/test.txt state=touch
- name: 04-test
shell: rsync -az /test.txt lala@172.16.1.41::nana --password-file=/etc/{{ passfile }}
执行方法,在命令行中指定变量名对应的变量值
ansible-playbook -e backupdir=/data -e passfile=rsync-password rsync_server_变量信息.yaml
方式三:在主机清单文件编写
vim /etc/ansible/hosts
[rsync:children]
rsync_server
rsync_client
[rsync_server]
172.16.1.41
[rsync_server:vars]
backupdir=/data
passfile=rsync-password
[rsync_client]
172.16.1.9
172.16.1.31
[rsync_client:vars]
passfile=rsync-password
cd /etc/ansible/ansible-playbook
vim rsync_server_变量信息.yaml
- hosts: rsync_server
# vars:
# backupdir: /data 定义备份目录
# passfile: rsync-passwd 定义密码文件
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/ansible-playbook/rsyncd.conf dest=/etc
- name: 03-useradd
user: name=rsync create_home=no shell=/sbin/nologin
- name: 04-bak
file: dest={{ backupdir }} state=directory owner=rsync group=rsync
- name: 05-passwd
copy: content='lala:123' dest=/etc/{{ passfile }} mode=600
- name: 06-start
service: name=rsyncd state=started enabled=yes
- hosts: rsync_client
# vars:
# passfile: rsync.password 定义保存的密码文件
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-create passwd file
copy: content='123' dest=/etc/{{ passfile }} mode=600
- name: 03-check test data back
file: dest=/test.txt state=touch
- name: 04-test
shell: rsync -az /test.txt lala@172.16.1.41::nana --password-file=/etc/{{ passfile }}
三种定义变量方式的优先级
命令行变量设置 > 剧本中的变量设置 > 主机清单的变量设置
在剧本中设置注册信息
- debug模块,将命令执行的输出结果显示在剧本执行的过程中
cd /etc/ansible/ansible-playbook
vim rsync_server_注册信息.yaml
- hosts: rsync_server
tasks:
- name: 01-check server port info
shell: netstat -lntup | grep 873 # 执行命令的输出信息
register: get_server_port # 将执行命令的输出信息定义给一个变量名
- name: display port info
debug: msg={{ get_server_port.stdout_lines }} # 调用定义好的变量名,stdout_lines(标准格式输出显示)
- 操作过程
ansible-playbook rsync_server_注册信息.yaml
# TASK [display port info] **************************************************************************************
# ok: [172.16.1.41] => {
# "msg": [
# "tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 10295/rsync ",
# "tcp6 0 0 :::873 :::* LISTEN 10295/rsync "
# ]
# }
在剧本中设置判断信息
vim rsync_client_判断信息.yaml
- hosts: rsync_client
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-create passwd file
copy: content='123' dest=/etc/{{ passfile }} mode=600
- name: 03-create test_nfs.txt
file: dest=/test_nfs.txt state=touch
判断: 是否是172.16.1.31
- name: 03-create test_web03.txt
file: dest=/test_web03.txt state=touch
判断: 是否是172.16.1.9
- name: 04-check nana
shell: rsync -az /test_nfs.txt lala@172.16.1.41::nana --password-file=/etc/{{ passfile }}
判断: 是否是172.16.1.31
- name: 04-check web
shell: rsync -az /test_web.txt lala@172.16.1.41::web --password-file=/etc/{{ passfile }}
判断: 是否是172.16.1.9
如何指定判断条件
(ansible_hostname == "nfs" ) 判断主机名是否等于nfs
(ansible_hostname == "web01" ) 判断主机名是否等于web01
只能使用setup模块中显示的信息中的变量
- 查看setup模块中常用常见的主机信息
查看setup模块中所有的变量
ansible 172.16.1.31 -m setup
常见的主机信息
ansible_all_ipv4_addresses:仅显示ipv4的信息。
ansible_devices:仅显示磁盘设备信息。
ansible_distribution:显示是什么系统,例:centos,suse等。
ansible_distribution_major_version:显示是系统主版本。
ansible_distribution_version:仅显示系统版本。
ansible_machine:显示系统类型,例:32位,还是64位。
ansible_eth0:仅显示eth0的信息。
ansible_hostname:仅显示主机名。
ansible_kernel:仅显示内核版本。
ansible_lvm:显示lvm相关信息。
ansible_memtotal_mb:显示系统总内存。
ansible_memfree_mb:显示可用系统内存。
ansible_memory_mb:详细显示内存情况。
ansible_swaptotal_mb:显示总的swap内存。
ansible_swapfree_mb:显示swap内存的可用内存。
ansible_mounts:显示系统磁盘挂载情况。
ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus:显示cpu个数(只显示总的个数)。
- 过滤出主机名信息,filter=ansible_hostname
ansible rsync_client -m setup -a "filter=ansible_hostname"
# 172.16.1.31 | SUCCESS => {
# "ansible_facts": {
# "ansible_hostname": "nfs",
# "discovered_interpreter_python": "/usr/bin/python"
# },
# "changed": false
# }
# 172.16.1.9 | SUCCESS => {
# "ansible_facts": {
# "ansible_hostname": "web03",
# "discovered_interpreter_python": "/usr/bin/python"
# },
# "changed": false
# }
- 过滤出子信息方法,在主信息后面加[],filter=ansible_eth0[ipv4]
ansible rsync_client -m setup -a "filter=ansible_eth0[ipv4]"
# 172.16.1.9 | SUCCESS => {
# "ansible_facts": {
# "discovered_interpreter_python": "/usr/bin/python"
# },
# "changed": false
# }
# 172.16.1.31 | SUCCESS => {
# "ansible_facts": {
# "discovered_interpreter_python": "/usr/bin/python"
# },
# "changed": false
# }
- 设置判断信息案例
设置判断信息模板
- name: install httpd
yum: name=httpd state=install
when: (系统情况 == "CentOS")
案例
cd /etc/ansible/ansible-playbook
vim rsyncd.conf
[web] # 新增一个web模块
comment = "备份文件的目录"
path = /lala_bak01
vim rsync_server_判断信息.yaml
- hosts: rsync_server
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/ansible-playbook/rsyncd.conf dest=/etc
- name: 03-useradd
user: name=rsync create_home=no shell=/sbin/nologin
- name: 04-bak
file: dest={{ backupdir }} state=directory owner=rsync group=rsync
- name: 05-passwd
copy: content='lala:123' dest=/etc/{{ passfile }} mode=600
- name: 06-start
service: name=rsyncd state=started enabled=yes
- hosts: rsync_client
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-create passwd file
copy: content='123' dest=/etc/{{ passfile }} mode=600
- name: 03-create test_nfs.txt
file: dest=/test_nfs.txt state=touch
when: (ansible_hostname == "nfs") 如果:主机名为nfs时,创建test_nfs.txt
- name: 03-create test_web03.txt
file: dest=/test_web03.txt state=touch
when: (ansible_hostname == "web03") 如果:主机名为web03时,创建web03.txt
- name: 04-check nana
shell: rsync -az /test_nfs.txt lala@172.16.1.41::nana --password-file=/etc/{{ passfile }}
when: (ansible_hostname == "nfs") 如果:主机名为nfs时,将test_nfs.txt文件传输给nana模块对应的目录下
- name: 04-check web03
shell: rsync -az /test_web03.txt lala@172.16.1.41::web --password-file=/etc/{{ passfile }}
when: (ansible_hostname == "web03") 如果:主机名为web03时,将test_web03.txt文件传输给web模块对应的目录下