ansible 中变量的使用
定义一个ip地址变量,创建目录的时候引用
[root@m01 ~]# cat 01-var.yaml
---
- hosts: all
vars:
ip: 172.16.1.31
tasks:
- name: mkdir
file:
path: /fanzhi/{{ip}}
state: directory
在nfs01 backup 创建/backup/lidao的目录 把 /etc/目录打包压缩到/backup/lidao目录下面 etc.tar.gz
编写剧本
[root@m01 ~]# vim 02.var.yaml
---
- hosts: all
vars:
dir: /backup/lidao
tasks:
- name: mkdir
file:
path: "{{dir}}"
- name: tar
archive:
path: /etc
dest: "{{dir}}/etc.tar.gz"
检查
[root@m01 ~]# ansible all -a 'tree /backup'
172.16.1.31 | CHANGED | rc=0 >>
/backup
/backup
├── lidao
│ └── etc.tar.gz
└── md5.log
172.16.1.41 | CHANGED | rc=0 >>
/backup
├── lidao
│ └── etc.tar.gz
└── md5.log
ansible-palybook中使用变量是在{{}}中使用的,需要注意的是如果在开头某个模块的开头使用变量需要用引号引起来
在nfs01 backup 创建/backup/lidao/时间 的目录 把 /etc/目录打包压缩到/backup/lidao/时间 目录下面 etc.tar.gz
打包压缩 /etc/到时间命名的目录中。
创建变量存放时间(写死为2019-05-31)
创建变量存放目录名
编写剧本
[root@m01 ~]# vim 03.var.yaml
---
- hosts: 172.16.1.31 172.16.1.41
vars:
dir: /backup/lidao
time: "2019-05-30"
tasks:
- name: mkdir
file:
path: "{{dir}}/{{time}}"
state: "directory"
- name: tar etc
archive:
path: /etc
dest: "{{dir}}/{{time}}/etc.tar.gz"
检查
[root@m01 ~]# ansible all -a 'tree /backup'
172.16.1.41 | CHANGED | rc=0 >>
/backup
└── lidao
└── 2019-05-30
└── etc.tar.gz
2 directories, 1 file
172.16.1.31 | CHANGED | rc=0 >>
/backup
└── lidao
└── 2019-05-30
└── etc.tar.gz
把/etc/打包备份到/backup/ip地址命名目录/etc-时间.tar.gz
ip是每台机器的内网ip
时间是当天的日期:年-月-日
预备知识:
将register结果定向到文件
[root@m01 /etc/ansible]# cat 03-var-reg.yml
---
- hosts: all
tasks:
- name: ip
shell: hostname -I|awk '{print $NF}'
register: ipaddr
- name: print ip
shell: echo {{ipaddr}}>/tmp/ip.txt
register是用来注册变量的,他在剧本中可以吧上一条命令的结果注册为一个变量。
内容如下
[root@m01 /etc/ansible]#
ipaddr变量的内容
[root@nfs01 ~]# cat /tmp/ip.txt
{stderr_lines: []
uchanged: True
uend: u2019-05-31 11:24:45.080356
failed: False
ustdout: u172.16.1.31,
ucmd: uhostname -I|awk '{print }',
urc: 0,
ustart: u2019-05-31 11:24:45.073817,
ustderr: u,
udelta: u0:00:00.006539,
stdout_lines: [u172.16.1.31]
}
这么多内容我们就需要,stdout的值。他的含义是标准输出 。就是我们想要的前面命令的结果。就像我们在命令行中使用反引号一样。
注册变量进行调试
[root@m01 ~]# vim 04.var.yaml
---
- hosts: all
tasks:
- name: ip
shell: hostname -I|awk '{print $NF}'
register: ipaddr
- name: time
shell: date +%F
register: time
- name: debug
debug: msg={{ipaddr.stdout}}
- name: debug2
debug: msg={{time.stdout}}
检查
[root@m01 ~]# ansible-playbook 04.var.yaml
省略若干--
TASK [debug] *******************************************************************
ok: [172.16.1.41] => {
"msg": "172.16.1.41"
}
ok: [172.16.1.31] => {
"msg": "172.16.1.31"
}
TASK [debug2] ******************************************************************
ok: [172.16.1.41] => {
"msg": "2019-05-31"
}
ok: [172.16.1.31] => {
"msg": "2019-05-31"
debug 模块是用来调试的,他可以让变量的内容显示到屏幕,一般定义变量是可以用它先进行测试
编写剧本
[root@m01 ~]# vim 04.var.yaml
---
- hosts: all
tasks:
- name: ip
shell: hostname -I|awk '{print $NF}'
register: ipaddr
- name: time
shell: date +%F
register: time
- name: mkdir
file:
path: /backup/{{ipaddr.stdout}}
state: directory
- name: tar
archive:
path: /etc
dest: /backup/{{ipaddr.stdout}}/etc-{{time.stdout}}.tar.gz
~
检查
[root@m01 ~]# ansible all -a 'tree /backup'
172.16.1.41 | CHANGED | rc=0 >>
/backup
├── 172.16.1.41
│ └── etc-2019-05-31.tar.gz
└── lidao
└── 2019-05-30
└── etc.tar.gz
3 directories, 2 files
172.16.1.31 | CHANGED | rc=0 >>
/backup
├── 172.16.1.31
│ └── etc-2019-05-31.tar.gz
└── lidao
└── 2019-05-30
└── etc.tar.gz
循环的使用
---
- hosts: all
remote_user: root
tasks:
- name: Installed Pkg
yum: name={{ item }} state=present
with_items:
- wget
- tree
- lrzsz
判断的使用
[root@m01 ~]# vim 05.var.yaml
---
- hosts: all
tasks:
- name: yum
yum:
name: tree
state: installed
when: (ansible_hostname == 'nfs01')
image
网友评论