ansible自动化软件工具(03)

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服务剧本
    准备工作

    1. 熟悉软件部署流程
    2. 熟悉ansible软件模块使用
    3. 熟悉ansible剧本编写规范
  • ansible

   an-hoc			临时实现批量管理功能(模块)				---  命令
   playbook			永久实现批量管理功能(剧本)			---  脚本
  • 剧本编写常见的错误

    1. 剧本语法规范是否符合(空格 冒号 短横线)
    2. 剧本中模块使用是否正确
    3. 剧本中一个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模块对应的目录下
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值