551 字
3 分钟
Ansible学习笔记(2)
关于Role
用我的理解来说,你写了一个安装和配置 httpd 的 Playbook,里面有一堆任务、变量和模板,Role 就是把这些东西打包成一个“积木包”。以后想装 httpd,直接拿来用就行,还可以灵活向里面修改添加变量以适应需求
下面列出一个role的文件结构
roles/└── httpd/ # Role 的名字叫 httpd ├── defaults/ # 默认变量 —— 优先级最低,最容易被覆盖 ├── vars/ # 强变量 —— 优先级高,不容易被覆盖 ├── tasks/ # 核心:要做的每一步动作 ├── handlers/ # 触发器 ├── templates/ # 模板文件:里面有 {{变量}},会动态生成真实文件 ├── files/ # 普通文件:直接拷贝,不做变量替换 └── meta/ # 元信息:作者、依赖关系等(可选)下面拿出上篇文章中安装http服务的案例,用role实现
defaults/main.yml
httpd_port: 8080student_name: "张三"student_id: "20240001"tasks/main.yml
- name: 安装 httpd 软件包 yum: name=httpd state=present
- name: 复制配置文件模板 template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf notify: restart httpd
- name: 复制首页模板 template: src=index.html.j2 dest=/var/www/html/index.html
- name: 启动并开机自启 service: name=httpd state=started enabled=yeshandlers/main.yml
- name: restart httpd service: name=httpd state=restartedtemplates/httpd.conf.j2
# 全局环境ServerRoot "/etc/httpd"Listen {{ httpd_port }}User apacheGroup apacheServerAdmin root@localhostServerName localhost:{{ httpd_port }}
# 加载 MPM 模块(通过主配置文件加载,不依赖 conf.modules.d)LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# 加载其他必需模块LoadModule authz_core_module modules/mod_authz_core.soLoadModule dir_module modules/mod_dir.soLoadModule log_config_module modules/mod_log_config.soLoadModule mime_module modules/mod_mime.soLoadModule unixd_module modules/mod_unixd.so
# 文档根目录DocumentRoot "/var/www/html"<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted</Directory>
# 默认首页<IfModule dir_module> DirectoryIndex index.html</IfModule>
# 日志配置ErrorLog "logs/error_log"CustomLog "logs/access_log" combined
# MPM 配置(prefork 默认值)<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 256 MaxConnectionsPerChild 3000</IfModule>templates/index.html.j2
<h1>Welcome</h1><p>Name: {{ student_name }}</p><p>ID: {{ student_id }}</p>添加完以上文件后,这个role的文件结构应该是这样
roles/└── httpd/ ├── defaults/ │ └── main.yml ├── vars/ │ └── main.yml ├── tasks/ │ └── main.yml ├── handlers/ │ └── main.yml ├── templates/ │ ├── httpd.conf.j2 │ └── index.html.j2 └── meta/如果调用这个role? 新疆一个playbook文件 text.yml
---- name: 用role装httpd hosts: webservers #对其进行操作的组 become: yes
roles: - httpd #这里就是调用 roles/httpd运行指令
ansible-playbook text.yml这样就完成了role的编写与使用
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 165 天
部分内容可能已过时
评论