• Ansible学习笔记15


    1、roles:(难点)

    roles介绍:

    roles(角色):就是通过分别将variables,tasks及handlers等放置于单独的目录中,并可以便捷地调用他们的一种机制。

    假设我们要写一个playbook来安装管理lamp环境,那么这个playbook就会写很长。所以我们希望把这个很大的文件分成多个功能拆分,分成apache管理、php管理、mysql管理,然后在需要使用的时候直接调用就可以了,避免重复写。类似编程里的模块化的概念,已达到代码复用的效果。

    创建roles的目录结构

    1、files:用来存放由copy模块或者scripts模块调用的模板;

    2)tasks:至少有一个main.yml文件,定义各个tasks;

    3)handlers:有一个main.yml文件,定义各handlers;

    4)templates:用来存放jinja2模板;

    5)vars:有一个main.yml,定义变量的;

    6)meta:有一个main.yml文件,定义此角色的特殊设定及其依赖关系。

    注意:在每个角色的目录中分别创建files,tasks,handlers,templates,vars和meta目录,用不到的目录可以创建为空目录。

    通过roles实现lamp:

    需要定制三个角色:apache、mysql、php

    1. [root@localhost roles]# tree
    2. .
    3. ├── httpd
    4. │   ├── files
    5. │   ├── handlers
    6. │   │   └── main.yml
    7. │   ├── meta
    8. │   │   └── main.yml
    9. │   ├── tasks
    10. │   │   └── main.yml
    11. │   ├── templates
    12. │   └── vars
    13. │   └── main.yml
    14. ├── mysql
    15. │   ├── files
    16. │   ├── handlers
    17. │   │   └── main.yml
    18. │   ├── meta
    19. │   │   └── main.yml
    20. │   ├── tasks
    21. │   │   └── main.yml
    22. │   ├── templates
    23. │   └── vars
    24. │   └── main.yml
    25. └── php
    26. ├── files
    27. ├── handlers
    28. │   └── main.yml
    29. ├── meta
    30. │   └── main.yml
    31. ├── tasks
    32. │   └── main.yml
    33. ├── templates
    34. └── vars
    35. └── main.yml
    36. 21 directories, 12 files

    这个roles,就并列写了三个roles。类似于调用了函数。

    检查agent的文件:

    1. [root@agent1 share]# cd /var/www/html
    2. [root@agent1 html]# ll
    3. total 8
    4. -rw-r--r-- 1 root root 10 Aug 31 09:07 index.html
    5. -rw-r--r-- 1 root root 22 Aug 31 09:07 test.php
    1. [root@localhost httpd]# cat tasks/main.yml
    2. - name: install apache etc packages
    3. yum: name=httpd,httpd-devel state=latest
    4. - name: sync configure file
    5. copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.conf
    6. notify: restart httpd
    7. - name: copy data files
    8. copy: src=/etc/ansible/roles/httpd/files/httpd_doc/ dest=/var/www/html/
    9. # notify: restart httpd
    10. - name: start httpd and enabled in boot
    11. service: name=httpd state=started enabled=on
    1. [root@localhost httpd]# cat handlers/main.yml
    2. - name: restart httpd
    3. service: name=httpd state=restarted
    1. [root@localhost roles]# cat mysql/tasks/main.yml
    2. - name: Install mariadb
    3. yum: name=mariadb-server,mariadb-devel state=latest
    4. - name: Start mariadb and enabled=yes
    5. service: name=mariadb state=started enabled=on
    1. [root@localhost roles]# cat php/tasks/main.yml
    2. - name: install php packages
    3. yum: name=php,php-gd,php-ldap,php-odbc,php-pear,php-xml,php-xmlrpc,php-mbstring,php-snmp,php-soap,curl,curl-devel,php-bcmath state=present
    4. notify: restart httpd
  • 相关阅读:
    基于python的药店药品信息管理系统-毕业设计-课程设计
    14、$axios异步加载数据asyncData
    vite-plugin-vue-setup-extend和unplugin-auto-import让v3开发更丝滑
    trie 143. 最大异或对
    HashMap的几种遍历方式及循环删除
    Netty——ByteBuffer的内部结构演示示例(1)
    【力扣每日一题】2023.9.10 打家劫舍Ⅳ
    map和set容器
    网络协议--链路层
    Jenkins如何新建一个项目
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/132599647