一、 facst 事实变量(受管主机默认变量)
案例1:为所有主机剩余(可用)内存大于2G的受管主机,安装httpd
2)编写剧本:
vim http.yml
- hosts: all
tasks:
- name: 清空安装源目录
shell: rm -f /etc/yum.repos.d/*
when: ansible_distribution == "CentOS"
- name: 拷贝本地光碟源文件
copy:
src: cdrom.repo
dest: /etc/yum.repos.d
when: ansible_distribution == "CentOS"
- name: 挂载光碟
mount:
src: /dev/cdrom
path: /mnt
state: mounted
fstype: iso9660
- name: 安装httpd
yum:
name: httpd
state: installed
when: ansible_memfree_mb >= 2000
ansible 调式模块:
debug
例如:显示任务结果
- hosts: 192.168.10.10
tasks:
- name: 列出所有文件
shell: ls /etc/yum.repos.d
register: cc
- name: 回显第一任务结果内容
debug: msg="{{ cc }}"
如果想回显msg内容某一个值,比如cc.stdout,就会回显stdout的值
- hosts: 192.168.10.10
task:
- name: 列出所有文件
shell: ls /etc/yum.repos.d
register: cc
- name: 回显第一任务结果内容
debug: msg="{{ cc.stdout }}"
案例2:为以下主机执行以下任务
1)安装软件
为docker服务器安装docker-ce
为cinder服务器安装lvm
编写playbook:
实验前准备:
cdrom.repo
docker-ce.repo
编写剧本:
vim test.yml
- hosts: all
vars:
- aaa: httpd
- bbb: vim
tasks:
- name: 列出主机软件库目录所有文件
shell: ls /etc/yum.repos.d
register: d
- name: 清除所有默认安装源文件
file:
path: /etc/yum.repos.d/{{ item }}
state: absent
with_items:
- "{{ d.stdout_lines }}"
- name: 拷贝本地光碟源文件
copy:
src: cdrom.repo
dest: /etc/yum.repos.d
- name: 挂载光碟
mount:
src: /dev/cdrom
path: /mnt
state: mounted
fstype: iso9660
- name: 为docker服务器安装"{{ aaa }}"
yum:
name: "{{ aaa }}"
when: ansible_fqdn == "docker02"
- name: 为cinder服务器安装"{{ bbb }}"
yum:
name: "{{ bbb }}"
when: ansible_fqdn == "cinder"
可以清单中定义变量,比如aaa=httpd,bbb=vim,写入对应主机记录
临时变量:
可以在执行剧本时,使用 -e添加临时变量,此变量优先级最高
比如:ansible-playbook yum.yml -e "aaa=elinks"
template 模板模块
场景:
1.为所有服务器安装httpd
2.storage组的httpd开放8080端口
3.docker组的httpd开放8088端口
准备httpd.conf.j2模板文件
(从已安装httpd服务器获取httpd.conf)
在httpd.conf第42行,将Listen的值设置为变量
比如
Listen {{ aaa }}
然后在清单中,定义aaa的值
[storage]
192.168.10.10 ansible_become_method='su' ansible_become_user='root' ansible_become_pass='123456' aaa=8080
[docker]
192.168.10.100 ansible_become_method='su' ansible_become_user='root' ansible_become_pass='1' aaa=8088
编写剧本:
- hosts: all
tasks:
- name: 列出主机软件库目录所有文件
shell: ls /etc/yum.repos.d
register: d
- name: 清除所有默认安装源文件
file:
path: /etc/yum.repos.d/{{ item }}
state: absent
with_items:
- "{{ d.stdout_lines }}"
- name: 拷贝本地光碟源文件
copy:
src: cdrom.repo
dest: /etc/yum.repos.d
- name: 挂载光碟
mount:
src: /dev/cdrom
path: /mnt
state: mounted
fstype: iso9660
- name: 安装httpd
yum:
name: httpd
state: installed
- name: 拷贝模块httpd.conf.j2
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
- name: 启动服务,加入开机自启
service:
name: httpd
state: started
enabled: true