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剧本-template中的for循环和if的使用(1)
ansible剧本-template中的for循环和if的使用(2)
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
公众号
收录于合集 #一站式教程
233个上一篇ansible剧本-roles(1)