ansible剧本-roles(2)

ansible剧本-roles(2)

图片图片

教程每周二、四、六更新

图片下面我们来实践一下:使用roles方式安装httpd服务:准备环境:先把前面练习用的文件都备份起来,/root/ansible目录下不剩余任何文件。
[root@m01 ansible]# mkdir -p roles/{httpd,haproxy}
[root@m01 ansible]# cd roles/httpd/
[root@m01 httpd]# mkdir tasks templates handlers
相应的目录结构已经按照ansible的规范建立好了,安装http的服务需要经过三步:第一步:安装httpd第二步:配置httpd配置文件第三步:启动服务这三步就是我们需要的task,动手吧:
[root@m01 httpd]# cd tasks/
[root@m01 tasks]# cat install.yml
---
- name: install pkg of httpd
  yum:
    name: httpd
    
[root@m01 tasks]# cat config_httpd.yml
---
- name: config httpd service
  template:
    src: httpd.conf.j2
    dest: /etc/httpd/conf/httpd.conf 
    
[root@m01 tasks]# cat start_service.yml
---
- name: start httpd service
  systemd:
    name: httpd
    state: started
    
# 准备需要修改的模板文件
[root@m01 tasks]# cd ..
[root@m01 httpd]# cat templates/httpd.conf.j2
ServerRoot "/etc/httpd"

Listen {{ LISTEN_PORT }}

Include conf.modules.d/*.conf

User apache
Group apache


ServerAdmin root@localhost


<Directory />
    AllowOverride none
    Require all denied
</Directory>


DocumentRoot "/var/www/html"

<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>

<Directory "/var/www/html">
    Options Indexes FollowSymLinks

    AllowOverride None

    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"

LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>


    CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>


    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

</IfModule>

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig /etc/mime.types

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz



    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8

<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>


EnableSendfile on

IncludeOptional conf.d/*.conf

注意:这里yml文件是放在tasks目录下的,它本身就是一个task,所以文件内容里就不需要写“tasks:”和“”- hosts:“,直接写task的名字、需要的模块即可。

task都写完了,模板也准备好了。但是对于tasks,ansible不可能知道先执行哪个,后执行哪个,所以,在main里调用的时候定义顺序就好了:

[root@m01 tasks]# cat main.yml 
---
- include: install.yml
- include: config_httpd.yml
- include: start_service.yml

最后,准备执行任务的playbook,playbook应该和roles文件夹保持平级:

[root@m01 tasks]# cd ../../..
[root@m01 ansible]# cat httpd_role.yml
---
- hosts: com
  roles:
    - role: httpd # 这里的role就是roles下的对应的目录名称

测试:

[root@m01 ansible]# ansible-playbook -C httpd_role.yml
[root@m01 ansible]# ansible-playbook httpd_role.yml

小回顾:上面这两条命令的作用分别是什么?

 


 

雷哥开通了抖音(云计算雷哥)和微信视频号,求关注!!!和大家一起学习 技术!

图片

推荐阅读

 

《一站式教程之集群架构》:

 

ansible剧本-变量的定义(2)

ansible - 模板template

ansible剧本-when

ansible剧本-循环

ansible剧本-template中的for循环和if的使用(1)

ansible剧本-template中的for循环和if的使用(2)

 

 

 

看完本文有收获?请分享给更多人

推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
188篇原创内容

图片


图片

 

Cloud研习社
收录于合集 #一站式教程
 233
上一篇ansible剧本-roles(1)
阅读 39
 
posted @ 2023-05-11 15:51  往事已成昨天  阅读(18)  评论(0编辑  收藏  举报