剧本编写特殊方法
(1)剧本编写变量设置方法
需求:进行万盏数据迁移 站点目录
web01 /html/www web01_new
/html/www web01_new
/html/www web01_new
编写剧本实现迁移
-hosts:web
tashs:
-name: 迁移数据信息
copy: src=www dest=/var/html/ ower=xxx mode=xxx
copy: src=shouji dest=/var/html
copy: src=diannao dest=/var/html
剧本变量设置方法:
在剧本中设置变量
例如:{{ dir_info }}
- hosts: web
vars:
dir_info: /var/html
tasks:
- name: create dir
file: path={{ dir_info }} state=directory
- name: create data
copy: src=/data/www/ dest={{ dir_info }} ower=oldboy
copy: src=/data/shouji/ dest={{ dir_info }} ower=oldboy
在同步传输目录信息时,目录后面不要添加/
剧本文件相对路径是相对于剧本位置而言
执行命令中设置变量
-e EXTRA_VARS, --EXTRA-vars EXTARA_VARS:用于指定剧本中变量信息
ansible-playbook -e dir_info=/var/html test_变量功能剧本.yum
在主机清单中设置变量
[web]
172.16.1.41
172.16.1.31 ansible_user=root ansible_password=654321 ansible_port=22
172.16.1.7
[web:vars]
dir_info=/var/html
三个变量功能同时设置:哪个变量设置更优先
②剧本中设置变量:
①命令中设置变量:
③清单中设置变量:
(2)掌握剧本输出信息方法
批量启动服务程序 并进行验证
- hosts: web
tasks:- name: boot server
service: name=rsyncd state=started - name: check rsync status
shell: netstat -lntup|grep 873 - name: output check info
debug: msg={{ port_info.stdout_lines }}
- name: boot server
(3)掌握剧本编写判断功能
需求:管理三台主机 安装软件程序 httpd
A windows 主机
B centos 主机
C debian 主机
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个数(只显示总的个数)。
- hosts: web
tasks:- hosts: centos
tasks
- hosts: centos
(4)掌握剧本编写循环功能
循环方式一: 简单循环方法
需求: 在主机上部署安装多个软件 nfs-utils rpcbind
-
hosts: web
tasks:
- name: install software
service: name={{ item }} state=started
loop:
- rpcbind
- nfs-utils循环方式二: 多个变量信息进行循环
需求: 在多个主机上创建目录信息
A B C /test_A_dir mode=600
A B C /test_B_dir mode=601
A B C /test_C_dir mode=602- hosts: web tasks: - name: install software service: name={{ item }} state=started loop: - rpcbind - nfs-utils - name: mkdir dir file: path={{ item.dir }} mode={{ item.mode }} state=directory loop: - {dir: '/test_A_dir', mode: '600'} - {dir: '/test_B_dir', mode: '601'} - {dir: '/test_C_dir', mode: '602'}
需求每台主机上创建三个用户
oldboy666 uid 666 不能创建家目录
oldbou667 uid 667 可以创建家目录 不能登录系统
oldboy668 uid 668 可以创建家目录 可以登录系统
-host: web
tasks:
- name: create user
user: name={{ item.info }} uid={{ item.id }} create_home{{ item.info }} shell={{ item.login}}
lopp:
- { info: 'oldboy666',id: '666',home: 'no',login: '/bin/bash'}
- { info: 'oldboy667',id: '667',home: 'no',login: '/sbin/nologin'}
- { info: 'oldboy668',id: '668',home: 'yes',login: '/bin/bash'}