roles的用法

Posted syy1757528181

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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基本概述

  1. 角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。
  2. 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依赖关系

  1. ansible 1.3及其以后的版本才支持
  2. roles允许你再使用roles时自动引入其他的roles。role依赖关系存储在roles目录中meta/main.yml文件中。

例如:推送wordpress并解压,前提条件,必须要安装nginxphp,把服务跑起来,才能运行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

以上是关于roles的用法的主要内容,如果未能解决你的问题,请参考以下文章

ansible-play中role的基本用法

SQL Select 语句的用法

ansible 条件,循环,roles用法简述

roles的用法

MyBatis注解方式基本用法

Hibernate注解常见错误