Ansible-第五天
本文最后更新于 253 天前,其中的信息可能已经有所发展或是发生改变。

1. 在Ansible项目中,如何拆分Playbook,主Playbook如何导入其他Playbook

1.拆分playbook

在Ansible项目中,我们可以按功能的不同拆分出不同的playbook。

例如:

  • db.yml (和数据库有关的)
  • build.yml(和构建包相关的)
  • nginx.yml (和nginx相关的)

这么做有几个好处:

  • 模块化:把总的部署拆分成几个小的,可以重用的playbook
    • 提高重用性
    • 提高可维护性
    • 使每个playbook负责特定的任务

2. 引入playbook

主的playbook(~~ oh god please give me a playbook ~~)通过import_playbook 模块导入其他的playbook。

假设ansible项目下的playbook/有main.yaml,db.yaml,nginx.yaml这三个文件,我们现在想只搭建数据库,只需要在main.yaml里引入db.yaml即可。

 ---
- name: 主Playbook
  hosts: all
  tasks:
    - name: 导入其他Playbook
      import_playbook: db.yaml

2. 在Ansible项目中,在哪个目录中定义主机节点

主机节点通常在 inventory (主机清单)目录中定义。

文件格式大概就是:

[web_servers]
server1.example.com
server2.example.com

[db_servers]
db1.example.com
db2.example.com

这里按功能进行了分类

3. 在Ansible项目中,如何创建角色及相关目录,命令是什么

Ansible提供了 ansible-galaxy 命令来创建角色及其相关目录结构。

创建角色的命令:ansible-galaxy init role_name

步骤:

  • 跳转到roles/文件夹下
  • 使用命令ansible-galaxy init nginx

这样,命令就会在 roles/ 目录下创建一个名为 nginx 的文件夹,并在其中生成标准的角色目录结构。

roles/
└── nginx
  ├── defaults
  │   └── main.yml        # 角色的默认变量
  ├── files
  │   └──                # 存放由任务调用的静态文件
  ├── handlers
  │   └── main.yml       # 角色的处理程序(通常用于服务重启等)
  ├── meta
  │   └── main.yml       # 角色的元数据,如依赖关系
  ├── tasks
  │   └── main.yml       # 角色的主任务列表,可以包含对其他任务的导入
  ├── templates
  │   └──                # 存放Jinja2模板文件
  ├── tests
  │   ├── inventory      # 测试用的主机清单文件
  │   └── test.yml       # 测试这个角色的Playbook示例
  └── vars
      └── main.yml       # 角色的变量(通常用于不希望被轻易覆盖的变量)

4. Playbook中如何指定执行角色及执行节点

在Playbook中

  • 可以使用 roles 关键字来指定要执行的角色
  • 并使用 hosts 关键字来指定执行节点。

举个例子:

---
- name: 部署Web应用
hosts: web_servers
roles:
  - role: my_web_role
  - role: my_db_role

hosts指定了执行的节点(哪台机工作)是web_servers;

roles指定了执行的角色(做什么动作)是my_web_role和my_db_role。

5. 角色中在哪个目录中编写task

一般情况下,role被创建之后底下有个tasks文件夹,我们就在这个目录中编写task。具体可以参考第三点。

6. 如何拆分task,主task中如何导入其他task

这个的操作原理和主playbook拆分差不多。

我们可以根据task的不同功能拆分不同的task文件,再通过include_tasks 模块导入这些文件。

举个例子:

---
- name: 导入task1
include_tasks: nginx.yml

- name: 导入task2
include_tasks: db.yml
#这是main文件

7. 角色中的变量要在哪个目录中定义

参考第三点的目录,角色中的变量通常在vars中定义。

定义的yaml文件格式大概如下:

# roles/nginx/vars/main.yml

# Nginx 访问日志文件路径(通常由模板或系统决定,但角色内部可能需要知道)
nginx_access_log_path: "/var/log/nginx/access.log"

# Nginx 错误日志文件路径
nginx_error_log_path: "/var/log/nginx/error.log"

# 内部使用的标志,表示这个角色是用于 Web 服务器
nginx_is_web_server: true

# Nginx 版本号(如果角色需要特定版本,但通常建议通过包管理器自动获取最新稳定版)
# nginx_version: "1.18.0" # 示例,但通常不推荐硬编码版本

# 用于判断是否在 RedHat 系系统上
nginx_is_rhel_family: "{{ ansible_os_family == 'RedHat' }}"

8. 变量的优先级是怎样的,如何强制覆盖变量

Ansible变量的优先级从高到低如下:

  • 命令行参数(如 --extra-vars
  • 角色默认变量(defaults/main.yml
  • 角色变量(vars/main.yml
  • inventory变量
  • host变量
  • group变量
  • group vars all

强制覆盖变量,我们可以使用优先级最高的命令行参数来覆盖。

格式:ansible-playbook -e "var=xxx" xxx.yml

9. Ansible如何加密数据库密码

Ansible提供了 ansible-vault 工具来加密敏感数据。

  • 加密数据库密码
    • 使用命令ansible-vault encrypt secret_file.yml
    • 输入密码进行加密。
  • 查看加密文件:ansible-vault view group_vars/all/secret_file.yml

10. 加密的密码如何解密传递给Playbook

我们可以把密码用变量存储起来,之后在playbook里引用变量,自动输入密码。

---
- name: 解密
hosts: all
become: yes
vars_files:
  - group_vars/all/secret_file.yml  # 这里引用的是加密文件
tasks:
  - name: 密码
    ansible.builtin.command: echo "{{ password }}" #输出密码

当然,在运行Playbook时,我我们也可以使用 --ask-vault-pass 参数来提供解密密码:

  • ansible-playbook --ask-vault-pass xxx.yml

也可以将解密密码存储在一个文件中,并使用 --vault-password-file 参数:

  • ansible-playbook --vault-password-file /path/to/vault_password_file xxx.yml

梳理芋道项目部署的步骤和角色

1. 你觉得整个项目分为几个角色

项目可以分为环境配置,前端,后端,数据库,nacos这几个角色。

2. 按顺序描述每个角色要进行的步骤(task),比如这些步骤你觉得应该如何拆分成多个task?

  1. 环境配置:
  • 下载java
  • 下载docker
  • 下载maven
  • 更改系统配置(如防火墙)
  1. 前端:
  • 拉取前端代码
  • 更改配置文件
  • 安装前端环境
  • 构建前端项目
  1. 后端:
  • 拉取后端代码
  • 更改配置文件
  • 构建后端项目
  • 构建docker镜像
  1. 数据库:
  • 安装 MySQL 并启动服务
  • 创建 yudao 项目的数据库和用户
  • 导入脚本
  • 配置mysql远程访问
  1. Nacos :
  • 下载 Nacos 安装包并解压。
  • 更改配置文件
感谢大家参观我的毛坯房。
暂无评论

发送评�? 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇