• Ansible剧本中的角色—playbook中的roles


    roles为完全独立或相互依赖的变量,任务,文件,模板和模块集合提供框架。

    在Ansible中,角色是将playbook分成多个文件的主要机制。这简化了编写复杂的playbook,并使其更易于重用。破坏playbook允许您在逻辑上将剧本分解为可重用的组件。

    每个roles基本上仅限于特定功能或所需输出,并具有在该roles本身内或作为依赖项列出的其他角色中提供该结果的所有必要步骤。

    roles不是playbook。roles是小功能,可以独立使用,但必须在playbook中使用。无法直接执行roles。roles没有明确设置roles将应用于哪个主机。

    Ansible Galaxy

    Ansible Galaxy 是一个网站,网站提供所有类型的由社区开发的 roles,可以在这个网站上下载其他人写好的roles,非常的方便

    roles使用示例

    roles是可以重用的, task中可以import_tasks yml文件 但入口总是main.yml 这个名字不能变

    mkdir -p {nginx,uwsgi,mysql}/{tasks,templates,vars,files} #递归创建目录结构的命令
    

    在自定义创建的data目录下实现示例

    1.创建目录, 及yml文件, 实现roles的整体结构如下

    data
    ├── nginx.yml				# 角色文件, ansible-playbook nginx.yml执行,和roles文件同级
    ├── roles
    │   ├── mysql
    │   ├── nginx
    │   │   ├── files  			# 用来存放file操作的src源文件
    │   │   │   └── c.txt
    │   │   ├── handlers  		# 存放handlers操作的yml文件
    │   │   │   └── main.yml
    │   │   ├── tasks   		# task目录必须存在,用来存放任务的yml文件
    │   │   │   ├── copyfile.yml
    │   │   │   ├── install.yml
    │   │   │   ├── main.yml
    │   │   │   └── start.yml
    │   │   ├── templates
    │   │   │   └── nginx.conf
    │   │   └── vars  			# 存放变量文件
    │   │       └── main.yml
    │   ├── redis
    │   └── uwsgi
    │       └── tasks
    │           └── main.yml
    └── uwsgi.yml
    

    nginx,uwsgi这些名字就是自定义起的,因为就是要对各被控机的这些软件操作,所以这么起名比较直观.以下是各文件内容,

    nginx.yml(和roles文件夹同级的)

    - hosts: web
      roles:
      - nginx
    

    uwsgi.yml

    - hosts: web
      roles:
      - uwsgi
    

    roles/tasks/files/c.txt 这个目录存放的都是file要操作的源文件

    源文件,测试情况下随便写写,可以放要copy的文件
    

    roles/tasks/handlers/main.yml

    - name: restart
      service: name=nginx state=restarted
    

    roles/tasks/tasks/main.yml

    - import_tasks: install.yml
    - import_tasks: copyfile.yml
    - import_tasks: start.yml
    - name: file
      copy: dest=/tmp/aaa.txt src=c.txt
    - name: createuser
      user: name={{user}}
      notify: restart
    

    roles/tasks/tasks/install.yml

    - name: install
      yum: name=nginx
    

    roles/tasks/tasks/copyfile.yml

    - name: copyfile
      template: src=nginx.conf dest=/etc/nginx/nginx.conf
    

    roles/tasks/tasks/start.yml

    - name: start
      service: name=nginx state=started enabled=yes
    

    roles/tasks/templates/nginx.conf

    放的是nginx.conf的模版文件,结合setup中的参数来用
    

    roles/tasks/vars/main.yml

    {"user":Robertx}
    

    2.执行:

    ansible-playbook nginx.yml
    
  • 相关阅读:
    JavaScript递归方法 生成 json tree 树形结构数据
    分布式系统唯一ID生成方案汇总
    Twitter-Snowflake,64位自增ID算法详解
    手机端页面自适应解决方案—rem布局
    vue.js之路由
    kafka数据迁移实践
    mysql查询时强制区分大小写
    js加密参数传给后台,后台解密base64
    Target runtime com.genuitec.runtime.generic.jee60 is not defined
    怎么在点击浏览器前进、后退键时刷新页面而不读取缓存
  • 原文地址:https://www.cnblogs.com/robertx/p/10840769.html
Copyright © 2020-2023  润新知