roles的用法
回顾
redirect 临时重定向
ad-hoc:临时执行
playbook:使用yml语法记录了多条ad-hoc
roles:解耦
site里面写了,依赖也写了,不会执行两遍
client 客户端
server 服务端
yum:
1.路径(本地)
2.包名(镜像仓库)
3.url(网站中的)
cat /var/lib/nfs/etab 可以查看nfs配置文件是否生效(该结果只与配置文件是否生效有关)
防火墙如果是开着的话,那么在web上是不能看挂载点的(不能showmount -e),无论是否可以挂载
zabbix:
https://www.zabbix.com/documentation/4.0/manual/installation/install_from_packages/rhel_centos
jumpserver官网
https://docs.jumpserver.org/
Ansible Roles基本概述
- 角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。
roles
:不管是Ansible还是saltstack,都可以使用roles
roles目录结构使用ansible-galaxy创建
[root@m01 ~]# cd /etc/ansible/roles/
[root@m01 roles]# ansible-galaxy init nfs #nfs目录位置可以随意创建
[root@m01 roles]# tree nfs
nfs/ #项目名称
├── defaults #低优先级变量
│ └── main.yml
├── files #存放文件,存放由copy或script·解压等模块调用的文件
├── handlers #触发器文件
│ └── main.yml
├── meta #依赖关系文件
│ └── main.yml
├── README.md #项目目录用法
├── tasks #工作任务文件,使用include的时候不需要指明文件的路径
│ └── main.yml
├── templates #jinja2模板文件(Python变量)
├── tests #测试文件(与-C类似)
│ ├── inventory #测试用的主机清单
│ └── test.yml
└── vars #高优先级变量文件
└── main.yml
[root@m01 roles]# vim site.yml
1.项目目录里,第一个加载的是meta目录,查看该项目是否有依赖,有的话先执行该项目的依赖,没有的话
2.执行tasks目录下的main.yml文件,如果有copy模块
3.执行files目录中找src指定的文件名(#不需要指明路径)
4.执行tasks中的template模块,去找template目录找src指定的文件名(#不需要指明路径)
5.如果有变量,去找vars目录main.yml
去找defaults目录下的main.yml
6.如果有触发器,在所有的tasks执行完之后,去找handlers目录下的main.yml
Ansible Roles依赖关系
- ansible 1.3及其以后的版本才支持
roles
允许你再使用roles时自动引入其他的roles。role依赖关系存储在roles目录中meta/main.yml文件中。
例如:推送wordpress并解压,前提条件,必须要安装nginx和php,把服务跑起来,才能运行wordpress的页面,此时我们就可以在wordpress的roles中定义依赖nginx和php的roles
[root@m01 roles]# vim /etc/ansible/roles/wordpress/meta/main.yml
dependencies:
- { role: nginx }
- { role: php }
#nginx·php,项目名称,先执行依赖,再执行该项目
使用Ansible Roles对rsync剧本解耦
1.使用ansible-galaxy创建'任务角色'
[root@m01 rsync]# cd /etc/ansible/roles/
[root@m01 roles]# ansible-galaxy init rsync
- rsync was created successfully
[root@m01 roles]# tree
.
└── rsync
├── defaults ---------------------------- 5.低级变量
│ └── main.yml
├── files -------------------- 3.src指定文件名(不含j2变量)
├── handlers ------------------------------------ 6.触发器
│ └── main.yml
├── meta --------- 1.项目的依赖目录
│ └── main.yml --如果有的话,先执行
├── README.md
├── tasks ---------------- 2.任务(include include_tasks)
│ └── main.yml
├── templates ------------------------ 4.python变量,j2模板
├── tests
│ ├── inventory
│ └── test.yml
└── vars --------------------------------- 5.高级变量
└── main.yml
#以组名为文件名
mkdir /etc/ansible/roles/group_vars
2.编辑'主机清单'(选做)
[root@m01 roles]# vim /etc/ansible/roles/hosts
...
3.编辑site.yml,指定roles(可以在这里指定变量),'site.yml是入口文件'(名字随意)。可以写多个site,site和tasks的关系类似于包含
[root@m01 roles]# vim /etc/ansible/roles/site.yml
1>列表
- hosts: all
vars:
- user_group: www
- uid_gid: 666
roles:
- rsync #指定的这个角色名是galaxy创建的目录名,可以指定多个
2>判断
- hosts: all
roles:
- role: rsync
when: ansible_fqdn is match 'backup*'
3>字典
- hosts: all
roles:
- { role: rsync , when: ansible_fqdn == 'backup' }
4>字典+变量
roles:
- { role: nginx, http_port: 8080, web_root: /data/ }
5>为roles设置触发条件
- hosts: all
roles:
- { role: some_role, when: "ansible_os_family == 'RedHat'" }
6>为roles设置标签
- hosts: all
roles:
- { role: nfs, tags: ["bar", "baz"],when: ansible_fqdn is match 'web*' }
- { role: nfs, tags: ["bar", "baz"],when: ansible_fqdn is match 'nfs*' }
4.编辑rsync角色的tasks'任务' (不要写路径,路径无效)
#不要用include_tasks
#直接写注释·模块·动作
[root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/install_rsync.yml
- name: install rsync
yum:
name: rsync
state: present
[root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/config_rsync.yml
- name: config rsync
template:
src: rsyncd.j2
dest: /etc/rsyncd.conf
notify: restart rsyncd
[root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/start_rsync.yml
- name: start rsyncd
service: rsyncd
state: started
[root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/main.yml
- include: install_rsync.yml
- include: config_rsync.yml
- include: start_rsync.yml
5.编辑rsync角色的'handlers'
[root@m01 roles]# vim /etc/ansible/roles/rsync/handlers/main.yml
- name: restart rsyncd
service:
name: rsyncd
state: restarted
6.编辑rsync角色的'files目录'
[root@m01 roles]# vim /etc/ansible/roles/rsync/files/
7.编辑rsync角色的'template目录'
[root@m01 roles]# vim /etc/ansible/roles/rsync/template/rsyncd.j2
8.编辑handlers
- name: restart rsyncd
service:
name: rcyncd
state: restarted
9.编辑'变量文件'(vars defaults)
[root@m01 roles]# vim /etc/ansible/roles/rsync/defaults
use_dir_mk: backup
10.'执行roles'
[root@m01 roles]# ansible-playbook rsync site.yml
测试yml语法是否正确
[root@ansible roles]# ansible-playbook -C site.yml
Ansible-galaxy命令格式
ansible-galaxy [init|info|install|list|remove] [--help] [options] ...
init: 初始化本地roles配置
info: 指定roles详细信息
install: 下载并安装Galaxy上指定的roles
list: 列出本地已下载的roles
remove: 删除本地已下载的roles
#查看选项帮助
ansible-galaxy init -–help
ansible-vault
[root@m01 ~]# rpm -ql ansible |egrep -v 'share|lib'
/etc/ansible/ansible.cfg #配置文件
/etc/ansible/hosts #主机清单
/etc/ansible/roles #解耦目录
/usr/bin/ansible ad-hoc的使用命令
/usr/bin/ansible-2
/usr/bin/ansible-2.7
/usr/bin/ansible-config
/usr/bin/ansible-connection
/usr/bin/ansible-console
/usr/bin/ansible-console-2
/usr/bin/ansible-console-2.7
/usr/bin/ansible-doc #查看帮助
/usr/bin/ansible-doc-2
/usr/bin/ansible-doc-2.7
/usr/bin/ansible-galaxy #roles目录的创建和删除
/usr/bin/ansible-galaxy-2
/usr/bin/ansible-galaxy-2.7
/usr/bin/ansible-inventory
/usr/bin/ansible-playbook #yml文件的执行命令
/usr/bin/ansible-playbook-2
/usr/bin/ansible-playbook-2.7
/usr/bin/ansible-pull
/usr/bin/ansible-pull-2
/usr/bin/ansible-pull-2.7
/usr/bin/ansible-test
/usr/bin/ansible-vault #加密命令
/usr/bin/ansible-vault-2
/usr/bin/ansible-vault-2.7
[root@m01 tasks]# ansible-vault --help
usage: ansible-vault [-h] [--version] [-v]
{create,decrypt,edit,view,encrypt,encrypt_string,rekey}
1.使用'ansible-vault'加密文件或目录
[root@m01 tasks]# ansible-vault encrypt main.yml
2.使用'view'查看加密文件的内容
[root@m01 tasks]# ansible-vault view main.yml
Vault password:
---
# tasks file for rsync
- include: install.yml
- include: config_rsync.yml
3.使用'edit'编辑加密文件
[root@m01 tasks]# ansible-vault edit main.yml
4.使用'rekey'更换加密密码
[root@m01 tasks]# ansible-vault rekey main.yml
5.执行加密的playbook
ansible-playbook include.yml --vault-password-file=ansible.pass
6.创建一个新的加密的目录或文件
ansible-vault create hello.yml