Linux运维-day44-综合架构-playbook剧本的变量
环境准备:
m01管理服务器(外网:10.0.0.61;内网:172.16.1.61)
backup(外网:10.0.0.41;内网:172.16.1.41)
nfs01(外网:10.0.0.31;内网:172.16.1.31)
/etc/ansible/hosts主机清单中的配置为:
[oldboy]
172.16.1.41
172.16.1.31
注:养成良好的编写习惯,编写完剧本一定要先检查剧本剧本的执行情况
检查剧本执行情况:ansible-playbook -C 剧本名
执行剧本:ansible-playbook 剧本名
一、playbook变量
1.1 普通变量
1.1.1 #批量在backup服务器和nfs01服务器上创建/oldboy/ip,这里的ip写死为10.0.0.200
1>使用变量编写剧本
[root@m01 /server/ansible-playbook]# cat ansible-var01.yml
---
- hosts: oldboy
vars: \\定义变量
ip: 10.0.0.200
tasks:
- name: mkdir dir
file:
path: /oldboy/{{ ip }}
state: directory
[root@m01 /server/ansible-playbook]#
2>查询创建的是否有问题
[root@m01 /server/ansible-playbook]# ansible oldboy -a "tree /oldboy"
172.16.1.41 | CHANGED | rc=0 >>
/oldboy
└── 10.0.0.200
1 directory, 0 files
172.16.1.31 | CHANGED | rc=0 >>
/oldboy
└── 10.0.0.200
1 directory, 0 files
[root@m01 /server/ansible-playbook]#
1.2 #在nfs01、backup中创建/backup/lidao的目录,把/etc/目录打包压缩到/backup/lidao目录下面etc.tar.gz,目录名存放在变量中
\\编写的剧本内容
[root@m01 /server/ansible-playbook]# cat ansible-var02.yml
---
- hosts: oldboy
vars:
dirs: /backup/lidao
tasks:
- name: make dir
file:
path: "{{ dirs }}"
state: directory
- name: tar /etc
archive:
path: /etc
dest: "{{ dirs }}/etc.tar.gz"
\\执行剧本之后结果查询
[root@m01 /server/ansible-playbook]# ansible oldboy -a "tree /backup"
172.16.1.41 | CHANGED | rc=0 >>
/backup
└── lidao
└── etc.tar.gz
1 directory, 1 file
172.16.1.31 | CHANGED | rc=0 >>
/backup
└── lidao
└── etc.tar.gz
1 directory, 1 file
[root@m01 /server/ansible-playbook]#
1.2 playbook变量注册(register)
注册变量:register关键字可以存储指定命令的输出结果到一个自定义的变量中
1.2.1 在nfs01和backup 中创建/backup/lidao/时间的目录,把 /etc/目录打包压缩到/backup/lidao/时间的目录下面 etc.tar.gz
分析:
打包压缩 /etc/到时间命名的目录中。
创建变量存放时间(写死为2019-05-31)
创建变量存放目录
\\\--------擦看编写的剧本内容
[root@m01 /server/ansible-playbook]# cat ansible-var03.yml
---
- hosts: oldboy
vars:
dirs: /backup/lidao/
times: 2019-05-31
tasks:
- name: make dir
file:
path: "{{ dirs }}/{{ times }}"
state: directory
- name: tar /etc
archive:
path: /etc
dest: "{{ dirs }}/{{ times }}/etc.tar.gz"
[root@m01 /server/ansible-playbook]#
\\----------检查剧本的执行结果
[root@m01 /server/ansible-playbook]# ansible oldboy -a "tree /backup"
172.16.1.41 | CHANGED | rc=0 >>
/backup
└── lidao
└── 2019-05-31
└── etc.tar.gz
2 directories, 1 file
172.16.1.31 | CHANGED | rc=0 >>
/backup
└── lidao
└── 2019-05-31
└── etc.tar.gz
2 directories, 1 file
[root@m01 /server/ansible-playbook]#
1.2.2 把/etc/打包备份到/backup/ip地址命名目录/etc-时间.tar.gz
分析:
ip是每台机器的内网ip
时间是当天的日期:年-月-日
需要用到叫register的内容
\\\--------------编写的剧本内容
[root@m01 /server/ansible-playbook]# cat ansible-var04.yml
---
- hosts: oldboy
vars:
dirs: /backup
tasks:
- name: ip var
shell: hostname -I|awk '{print $NF}'
register: ipaddr
- name: date var
shell: date +%F
register: time
- name: cesgu
debug: msg={{ ipaddr.stdout }}
- name: make dir
file:
path: "{{ dirs }}/{{ ipaddr.stdout }}"
state: directory
- name: tar /etc
archive:
path: /etc
dest: "{{ dirs }}/{{ ipaddr.stdout }}/etc-{{ time.stdout }}.tar.gz"
\\\---------------------执行剧本的结果
[root@m01 /server/ansible-playbook]# ansible-playbook ansible-var04.yml
PLAY [oldboy] ************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************
ok: [172.16.1.41]
ok: [172.16.1.31]
TASK [ip var] ************************************************************************************************************************
changed: [172.16.1.41]
changed: [172.16.1.31]
TASK [date var] **********************************************************************************************************************
changed: [172.16.1.41]
changed: [172.16.1.31]
TASK [cesgu] *************************************************************************************************************************
ok: [172.16.1.41] => {
"msg": "172.16.1.41"
}
ok: [172.16.1.31] => {
"msg": "172.16.1.31"
}
TASK [make dir] **********************************************************************************************************************
changed: [172.16.1.31]
changed: [172.16.1.41]
TASK [tar /etc] **********************************************************************************************************************
changed: [172.16.1.31]
changed: [172.16.1.41]
PLAY RECAP ***************************************************************************************************************************
172.16.1.31 : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.1.41 : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@m01 /server/ansible-playbook]#
1.3 playbook内置变量
****常用的ansible内置变量
含义 | 内置变量(未精简) | 内置变量(精简之后) |
---|---|---|
查询主机名 | ansible_facts.hostname | ansible_hostname |
查询所有的IP | ansible_facts.all_ipv4_addresses | ansible_all_ipv4_addresses |
查询第一块网卡的IP地址 | ansible_facts.eth0.ipv4.address | ansible_eth0.ipv4.addresses |
查询系统发行版,如CentOS本 | ansible_facts.distribution | ansible_facts_distribution |
\\\\-------在剧本中查询所有的内置变量
- hosts: oldboy
tasks:
- debug: msg={{ansible_facts}}
二、playbook条件语句
playbook中条件判断语句使用when;when与ansible内置变量搭配
2.1 #在nfs01和backup服务器上的/backup下创建以自己主机名命名的文件,其他服务器不创建
\\\----------------------查看剧本内容
[root@m01 /server/ansible-playbook]# cat ansible-var06.yml
---
- hosts: all
tasks:
- name: create file
file: path=/backup/{{ ansible_hostname }}.txt state=touch
when: (ansible_hostname =="nfs01") or (ansible_hostname =="backup")
[root@m01 /server/ansible-playbook]#
\\\------------剧本的执行
[root@m01 /server/ansible-playbook]# ansible-playbook ansible-var06.yml
PLAY [all] ***************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************
ok: [172.16.1.31]
ok: [172.16.1.7]
ok: [172.16.1.8]
ok: [172.16.1.41]
TASK [create file] *******************************************************************************************************************
skipping: [172.16.1.7]
skipping: [172.16.1.8]
changed: [172.16.1.41]
changed: [172.16.1.31]
PLAY RECAP ***************************************************************************************************************************
172.16.1.31 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.1.41 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.1.7 : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
172.16.1.8 : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
\\\--------------------查看剧本的执行之后是否创建成功
[root@m01 /server/ansible-playbook]# ansible all -a "ls -l /backup/"
172.16.1.31 | CHANGED | rc=0 >>
total 0
-rw-r--r-- 1 root root 0 Jun 1 12:10 nfs01.txt
172.16.1.41 | CHANGED | rc=0 >>
total 0
-rw-r--r-- 1 root root 0 Jun 1 12:10 backup.txt
172.16.1.7 | FAILED | rc=2 >>
ls: cannot access /backup/: No such file or directorynon-zero return code
172.16.1.8 | FAILED | rc=2 >>
ls: cannot access /backup/: No such file or directorynon-zero return code
[root@m01 /server/ansible-playbook]#
三、playbook循环语句
3.1 #批量创建安装软件
\\\--------没安装之前
[root@m01 ~]# ansible oldboy -a "rpm -qa nfs* tree lrzsz"
172.16.1.31 | CHANGED | rc=0 >>
172.16.1.41 | CHANGED | rc=0 >>
[root@m01 ~]#
\\\-------查看编写的剧本内容
[root@m01 ~]# cat /server/ansible-playbook/ansible-var05.yml
---
- hosts: oldboy
tasks:
- name: install ruanjiain
yum: name={{ item }} state=present
with_items:
- tree
- lrzsz
- nfs-utils
[root@m01 ~]#
//--------------------执行剧本
[root@m01 /server/ansible-playbook]# ansible-playbook ansible-var05.yml
PLAY [oldboy] ************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************
ok: [172.16.1.31]
ok: [172.16.1.41]
TASK [install ruanjiain] *************************************************************************************************************
changed: [172.16.1.41] => (item=[u'tree', u'lrzsz', u'nfs-utils'])
changed: [172.16.1.31] => (item=[u'tree', u'lrzsz', u'nfs-utils'])
PLAY RECAP ***************************************************************************************************************************
172.16.1.31 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.1.41 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@m01 /server/ansible-playbook]#
\\\-------------------执行剧本之后的查询结果
[root@m01 ~]# ansible oldboy -a "rpm -qa nfs* tree lrzsz"
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'. If you need to use command because yum, dnf or
zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of
this message.
172.16.1.31 | CHANGED | rc=0 >>
lrzsz-0.12.20-36.el7.x86_64
tree-1.6.0-10.el7.x86_64
nfs-utils-1.3.0-0.61.el7.x86_64
172.16.1.41 | CHANGED | rc=0 >>
lrzsz-0.12.20-36.el7.x86_64
tree-1.6.0-10.el7.x86_64
nfs-utils-1.3.0-0.61.el7.x86_64
[root@m01 ~]#
3.2 #批量创建文件并指定所有者、所有属组及权限
11 - name: batch create file
12 file:
13 path: "{{ item.path }}"
14 state: touch
15 mode: "{{item.mode }}"
16 owner: "{{ item.owner }}"
17 group: "{{item.group }}"
18 with_items:
19 - {path: /backup/aaa.txt, mode: "600", owner: oldboy, group: oldboy }
20 - {path: /backup/bbb.txt, mode: "644", owner: nfsnobody, group: nfsnobody }
21 - {path: /backup/ccc.txt, mode: "777", owner: root, group: root }
~
\\\--------------------执行结果
[root@m01 /server/ansible-playbook]# ansible-playbook ansible-var05.yml --start-at-task='batch create file'
PLAY [oldboy] ************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************
ok: [172.16.1.41]
ok: [172.16.1.31]
TASK [batch create file] *************************************************************************************************************
changed: [172.16.1.31] => (item={u'owner': u'oldboy', u'path': u'/backup/aaa.txt', u'group': u'oldboy', u'mode': u'600'})
changed: [172.16.1.41] => (item={u'owner': u'oldboy', u'path': u'/backup/aaa.txt', u'group': u'oldboy', u'mode': u'600'})
changed: [172.16.1.31] => (item={u'owner': u'nfsnobody', u'path': u'/backup/bbb.txt', u'group': u'nfsnobody', u'mode': u'644'})
changed: [172.16.1.41] => (item={u'owner': u'nfsnobody', u'path': u'/backup/bbb.txt', u'group': u'nfsnobody', u'mode': u'644'})
changed: [172.16.1.41] => (item={u'owner': u'root', u'path': u'/backup/ccc.txt', u'group': u'root', u'mode': u'777'})
changed: [172.16.1.31] => (item={u'owner': u'root', u'path': u'/backup/ccc.txt', u'group': u'root', u'mode': u'777'})
PLAY RECAP ***************************************************************************************************************************
172.16.1.31 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.1.41 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@m01 /server/ansible-playbook]#
\\\---------------执行之后的结果查询
[root@m01 /server/ansible-playbook]# ansible oldboy -a "ls -l /backup/aaa.txt /backup/bbb.txt /backup/ccc.txt"
172.16.1.31 | CHANGED | rc=0 >>
-rw------- 1 oldboy oldboy 0 Jun 1 11:32 /backup/aaa.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jun 1 11:32 /backup/bbb.txt
-rwxrwxrwx 1 root root 0 Jun 1 11:32 /backup/ccc.txt
172.16.1.41 | CHANGED | rc=0 >>
-rw------- 1 oldboy oldboy 0 Jun 1 11:32 /backup/aaa.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jun 1 11:32 /backup/bbb.txt
-rwxrwxrwx 1 root root 0 Jun 1 11:32 /backup/ccc.txt
[root@m01 /server/ansible-playbook]#
作业:
shell的面试题
m01使用ansible
部署
rsync
nfs
sersync
全网备份
尝试云服务器部署服务
预习:HTTP协议 Nginx
待补充……