ansible 中變量的使用
定義一個(gè)ip地址變量判帮,創(chuàng)建目錄的時(shí)候引用
[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 創(chuàng)建/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中使用變量是在{{}}中使用的局嘁,需要注意的是如果在開頭某個(gè)模塊的開頭使用變量需要用引號(hào)引起來
在nfs01 backup 創(chuàng)建/backup/lidao/時(shí)間 的目錄 把 /etc/目錄打包壓縮到/backup/lidao/時(shí)間 目錄下面 etc.tar.gz
打包壓縮 /etc/到時(shí)間命名的目錄中。
創(chuàng)建變量存放時(shí)間(寫死為2019-05-31)
創(chuàng)建變量存放目錄名
編寫劇本
[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-時(shí)間.tar.gz
ip是每臺(tái)機(jī)器的內(nèi)網(wǎng)ip
時(shí)間是當(dāng)天的日期:年-月-日
預(yù)備知識(shí):
將register結(jié)果定向到文件
[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是用來注冊(cè)變量的晦墙,他在劇本中可以吧上一條命令的結(jié)果注冊(cè)為一個(gè)變量悦昵。
內(nèi)容如下
[root@m01 /etc/ansible]#
ipaddr變量的內(nèi)容
[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]
}
這么多內(nèi)容我們就需要,stdout的值晌畅。他的含義是標(biāo)準(zhǔn)輸出 但指。就是我們想要的前面命令的結(jié)果。就像我們?cè)诿钚兄惺褂梅匆?hào)一樣。
注冊(cè)變量進(jìn)行調(diào)試
[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 模塊是用來調(diào)試的棋凳,他可以讓變量的內(nèi)容顯示到屏幕拦坠,一般定義變量是可以用它先進(jìn)行測(cè)試
編寫劇本
[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
循環(huán)的使用
---
- 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