ansible高级进阶

学习目标:

学习内容:

迭代with_items

迭代:当有需要重复性执行的任务时,可以使用迭代机制

  • 对迭代项的引用,固定变量名 “item”
  • 要在task中使用with_items给定要迭代的元素列表
  • 列表格式:字符串 字典
[root@zabbix_server ansible]# cat testitem.yml 
---
- hosts: all
  remote_user: root

  tasks:
  - name: create file
    file: name=/home/myscripts/{{ item }} state=touch
    when: ansible_hostname == "zabbix_agent2"
    with_items:
     - file1
     - file2
     - file3

[root@zabbix_server ansible]# ansible-playbook testitem.yml 

PLAY [all] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************************
ok: [172.28.102.130]
ok: [172.28.102.131]

TASK [create file] ******************************************************************************************************************************************************************************************
skipping: [172.28.102.131] => (item=file1) 
skipping: [172.28.102.131] => (item=file2) 
skipping: [172.28.102.131] => (item=file3) 
changed: [172.28.102.130] => (item=file1)
changed: [172.28.102.130] => (item=file2)
changed: [172.28.102.130] => (item=file3)

PLAY RECAP **************************************************************************************************************************************************************************************************
172.28.102.130             : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
172.28.102.131             : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

[root@zabbix_server ansible]# ansible all -m shell -a 'ls /home/myscripts'
172.28.102.130 | CHANGED | rc=0 >>
file1
file2
file3
hostname.sh
newfile
172.28.102.131 | CHANGED | rc=0 >>
hostname.sh
newfile

迭代子嵌套变量

在这里插入图片描述

[root@zabbix_server ansible]# ansible 172.28.102.130 -m shell -a 'getent passwd'|tail -3
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1001:1001::/home/user2:/bin/bash
user3:x:1002:1002::/home/user3:/bin/bash

[root@zabbix_server ansible]# ansible 172.28.102.130 -m shell -a 'getent group'|tail -3
g1:x:1000:
g2:x:1001:
g3:x:1002

template for if
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

roles

ansible自1.2版本引入的新特性,用于层次性、结构化的组织playbook。roles能够根据层次型结构装载变量,tasks以及handlers等,要使用roles只需要在playbook中使用include指令即可,简单来讲,roles就是分别通过变量,文件,任务,模块及处理器放置与单独的目录中,并可以便捷的include他们的一种机制,角色一版用于主机构建服务的场景中,但也可以用于构建守护进程等场景中,
复杂场景:建议使用roles,代码复用度高

  • 变更指定主机或主机组
  • 如命名不规范维护和传承成本大
  • 某些功能需多个playbook,通过include即可实现
    角色(roles):角色集合
    roles/
    mysql/
    httpd/
    nginx/
    memcached/
    在这里插入图片描述
    roles目录结构
    在这里插入图片描述
    在这里插入图片描述

安装nginx的样例

[root@zabbix_server ansible]# ll
total 36
-rw-r--r-- 1 root root 19984 Apr 28 21:36 ansible.cfg
-rw-r--r-- 1 root root  1232 Apr 30 10:27 hosts
-rw-r--r-- 1 root root  1016 Apr 27 11:24 hosts.bak
-rw-r--r-- 1 root root    59 May  2 16:00 nginx_role.yml
drwxr-xr-x 3 root root  4096 May  2 16:03 roles
[root@zabbix_server ansible]# tree roles/
roles/
└── nginx
    ├── tasks
    │   ├── group.yml
    │   ├── main.yml
    │   ├── restart.yml
    │   ├── start.yml
    │   ├── template.yml
    │   ├── user.yml
    │   └── yum.yml
    └── templates
        └── nginx.conf.j2

3 directories, 8 files
[root@zabbix_server ansible]# pwd
/etc/ansible

[root@zabbix_server tasks]# cat group.yml 
- name: create group
  group: name=nginx gid=80
[root@zabbix_server tasks]# cat user.yml 
- name: create user
  user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin
[root@zabbix_server tasks]# cat yum.yml 
- name: install package
  yum: name=nginx
[root@zabbix_server tasks]# cat start.yml 
- name: start service
  service: name=nginx state=started enabled=yes
[root@zabbix_server tasks]# cat main.yml 
- include: group.yml
- include: user.yml
- include: yum.yml
- include: template.yml
- include: start.yml
[root@zabbix_server tasks]# cat template.yml 
- name: copy template
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf

学习产出:

提示:这里统计学习计划的总量

例如:

  • 技术笔记 2 遍
  • CSDN 技术博客 3 篇
  • 习的 vlog 视频 1 个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值