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


1. 什么是task。

task是playbook中的基本执行单元,调用模块执行操作。

  • 每个task必须有name,用于输出结果。
  • 每个 task 的目标在于执行一个 moudle。

2. 什么是playbook,其文件格式是什么,这种格式有什么优点。

Playbook 是 Ansible的配置,部署,编排语言,是希望远程主机执行命令的方案(希望他们怎么做并描述出来)。

它是由多个 play 组成的 YAML 格式文件,内容是一个以 ‘plays’ 为元素的列表,而内容是一个以 plays则由上文的task构成。后文有具体样式。

  • 优点:
    • 可读性强:结构清晰,适合复杂场景的编排。
    • 幂等性:多次执行结果一致,避免重复操作冲突。
    • 模块化:支持 roles 和 include 实现代码复用。

3. 除了这种配置文件的格式,你还了解哪些格式,分别有什么特点。

  • INI 格式:用于 hosts 文件(Inventory),定义主机及组信息,语法简单但功能有限。
  • JSON 格式:可通过 ansible-config 命令生成配置,适合程序化调用,但可读性较差。
  • Jinja2 模板:用于动态生成配置文件(如 templates 模块),支持变量替换和逻辑判断。

4. playbook中的内容是顺序执行的还是并行的。

默认状态下是顺序执行的。

同一 Play 内的 Task 按定义顺序逐个执行,同一时间同一主机仅执行一个 Task。

如果需要并行控制则可以在命令行加上forks参数:

ansible-playbook playbook.yml -f 10

-f 10就是启用 10 个并发进程,假设有20台主机,加上这个配置后只需

5. 如果palybook中前面的task失败,会退出还是继续执行。如何按照自己需求进行改变

当task遇到失败时,立即终止 Playbook 执行。

如果一个 host 执行 task 失败,这个 host 将会从整个 playbook 的 rotation 中移除。

如果想要略过错误继续执行,可以在tasks里加入action:

ignore_errors: True

6. task中如何设置和使用变量。

变量名可以为字母,数字以及下划线.变量始终应该以字母开头。

task的变量可以分为

  • 局部变量
    • 在tasks的var字段里直接定义
    tasks:    
    – name:    
    vars:        
    task_port: 8080  
  • 全局变量
    • 在play的var中定义,则所有的task共享- hosts: webservers
      vars:
      http_port: 80  
      tasks:

此外,变量还可以这样设置使用:

  • 编写变量文件
    • 编写vars下的文件,这里以aaa举例:
      • 创建vars/aaa.yml
      http_port: 80
      max_clients: 200
      • 在playbook中引用
      vars_files:
        – vars/aaa.yml
      tasks:
  • 使用命令覆盖变量
    • 加上参数-e ansible-playbook user.yml -e "USER=cc"

7. 如何将task的执行结果赋值为变量

可以使用关键字register将task的执行结果赋值为字典变量。

register的格式如下:

  • register: 变量名(存储结果的变量名)
  • 可以这么用: – name: 查询用户列表
    hosts: webservers
    tasks:
    – name: 查询用户列表
      shell: cat /etc/passwd
      register: etc_files  #(输出的结果就存在这个变量里了)
    – name: 输出结果
      debug:
        var: etc_files.stdout  #(这是查看存储结果的方式)-debug:输出变量值var:指定哪个变量要输出

8. 如何对变量进行判断,比如大小,是否有内容等

可以使用基本比较运算符,逻辑运算符,when语句,条件判断语句等对变量进行判断,主要通过 Jinja2 模板引擎处理。

下边是大小数量判断:

- name: 判断账户数量是否大于10
hosts: all
tasks:
   # 步骤1:获取账户数量)
  - name: 获取账户数量
    ansible.builtin.stat:
      path: /etc/passwd
    register: passwd_file

   # 步骤2:计算账户数量(
  - name: 计算账户数量
    set_fact:
      account_count: "{{ passwd_file.stat.size | default(0) | int // 25 }}"
    vars:
      line_size: 25  # 每个账户占25字节

   # 步骤3:判断
  - name: 执行账户数量检查
    ansible.builtin.debug:
      msg: "账户数量 {{ account_count }}超过10"
      when: account_count > 10

如果要判断是否有内容,则:

- name: 变量存在时执行
ansible.builtin.debug:
  msg: "变量 {{ var_name }} 已定义"
when: var_name is defined

ansible.builtin.stat: 文件状态检查模块

path:要检查的文件路径ansible.builtin.debug:文件调试输出模块

msg:自定义输出内容

9. 写一个playbook,分发一个压缩包解压到其他机器的/opt/任意目录下。

- name: 分发并解压压缩包
hosts: webservers
remote_user: root
tasks:
  - name: 传输压缩包
    copy: #从(src)本地复制到(dest)远程
      src: /opt/nginx.tar.gz
      dest: /tmp/
      mode: 0644 #设置权限

  - name: 解压到目标目录
    unarchive:
      src: /tmp/nginx.tar.gz
      dest: /opt/
      remote_src: yes
      creates: /opt/nginx
感谢大家参观我的毛坯房。
暂无评论

发送评�? 编辑评论


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