当前位置: 首页 > article >正文

初学playbook,从一个简单的示例开始。

---		# 文档的开始,用来明确这是一个yaml格式的文件,其实不写也可以
- hosts: 192.168.0.132			# 要控制的主机组或者主机名,这里是主机名
  tasks:		# 定义一组任务,这些任务将在指定的主机上执行
    - name: test connection		# 任务列表的第一个任务,方便在执行时识别和调试。
      ping:			# Ansible的一个模块,用来测试Ansible是否能够成功连接到目标主机。它不是用来发送ICMP ping请求,而是用来建立SSH连接,并确认目标主机可达。
[root@192 ~]# ansible-playbook ping-playbook.yaml		

PLAY [192.168.0.132] ****************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]

TASK [test connection] **************************************************************************************************************************************
ok: [192.168.0.132]

PLAY RECAP **************************************************************************************************************************************************
192.168.0.132              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
  • 使用 ansible-playbook 指向 playbook 剧本
  • PLAY [192.168.0.132] :这表示Ansible正在对IP地址为192.168.0.132的主机执行剧本。
  • TASK [Gathering Facts]: Ansible自动执行的第一个任务,用于收集目标主机的一些基本信息(称为facts),例如操作系统类型、内核版本、IP地址、内存大小等。
  • ok: [192.168.0.132]: 表示任务执行成功,目标主机192.168.0.132的facts已经被收集。
  • TASK [test connection]: 这是剧本中定义的任务,任务名称在上面有定义。
  • ok: [192.168.0.132]: 表示任务执行成功,Ansible能够成功连接到目标主机192.168.0.132。
  • PLAY RECAP: 剧本执行的总结。
  • 192.168.0.132 : ok=2: 192.168.0.132 : ok=2:
  • changed=0: 表示没有任务改变了目标主机的状态。
  • unreachable=0: 表示没有无法到达的目标主机。
  • failed=0: 表示没有失败的任务。
  • skipped=0: 表示没有被跳过的任务。
  • rescued=0: 表示没有被救援的任务(救援任务是指在某些任务失败时,尝试执行的任务)。
  • ignored=0: 表示没有被忽略的任务。

上面通过一个简单的示例完成了一个play任务,下面来扩展一些知识

1. 如何指定用户执行

- hosts: webservers
  remote_user: root
  tasks:
    - name: test connection
      ping:
  • tasks 上面定义远程用户,将对所有的任务生效
  tasks:
    - name: test connection
      ping:
      remote_user: root

只对“test connection”任务生效。

2. 使用普通用户执行如何使用sudo

确保你已经将公钥传输到了普通用户

ansible-playbook代码如下:

---            
- hosts: 192.168.0.132                 
  tasks:                
    - name: Reboot the server 
      reboot:
      remote_user: media

执行效果:

[root@192 ~]# ansible-playbook ping-playbook.yaml 

PLAY [192.168.0.132] ****************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]

TASK [Reboot the server] ************************************************************************************************************************************
fatal: [192.168.0.132]: FAILED! => {"changed": false, "elapsed": 0, "msg": "Reboot command failed. Error was Must be root., Shared connection to 192.168.0.132 closed.", "rebooted": false, "start": "2024-09-29T13:00:08.633940"}

PLAY RECAP **************************************************************************************************************************************************
192.168.0.132              : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0 
  • Reboot command failed. Error was Must be root. : 报错很明显,需要root权限。

修改代码如下:

---            
- hosts: 192.168.0.132                 
  tasks:                
    - name: Reboot the server 
      reboot:
      remote_user: media
      become_user: root
      become: yes

我这里在执行sudo权限时没有要求输出密码,是因为在被控机上,%wheel ALL=(ALL) NOPASSWD: ALL 有这条配置,无需wheel 组用户输出密码。

[root@192 ~]# ansible-playbook  reboot-playbook.yaml 

PLAY [192.168.0.132] ****************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]

TASK [Reboot the server] ************************************************************************************************************************************
changed: [192.168.0.132]

PLAY RECAP **************************************************************************************************************************************************
192.168.0.132              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
  • remote_user: media: 指定远程用户
  • become_user: root:切换远程用户,这个可以放到tasks上面全局生效,配置文件默认sudo是切换root权限
  • become: yes: 在执行任务时提升权限,也可以放到tasks上面全局生效。

使用sudo权限时,如果要求输入密码:
a) 方法一、在环境变量中声明

export ANSIBLE_BECOME_PASS="123456"

b) 方法二、在 inventory 文件中声明变量

[root@192 ~]# tail -2  /etc/ansible/hosts 
192.168.0.132 ansible_become_pass="123456"

c) 方法三、在 配置文件中,将 become_ask_pass=True 改为True,在需要提权的时候要求输出密码

[root@192 ~]# grep  become_ask_pass  /etc/ansible/ansible.cfg 
become_ask_pass=True

d) 在使用ansible-playbook使用剧本的时候使用 -K 参数来要求手动输入密码

# ansible-playbook   reboot-playbook.yaml  -K

今天的学习就到此为止吧。


http://www.kler.cn/news/325431.html

相关文章:

  • Vue前端浏览器指纹获取:数字世界的身份密码
  • linux常见指令与权限【第四课】
  • C语言基本语法————基本数据类型、变量与常量
  • HDFS组件相关问题-持续更新
  • Growthly Quest 增长工具:助力 Web3 项目实现数据驱动的增长
  • RTE 大会报名丨AI 时代新基建:云边端架构和 AI Infra ,RTE2024 技术专场第二弹!
  • 【在Linux世界中追寻伟大的One Piece】进程间通信
  • 在Windows on Arm上使用Electron构建桌面应用
  • Rust和Go谁会更胜一筹
  • Day28笔记-Python自动化操作Word
  • Redis结合Caffeine实现二级缓存:提高应用程序性能
  • 计算机组成原理之数制与编码
  • 交通标志与路面标识检测系统源码分享
  • linux 系统磁盘空间查看与清理
  • 基于nodejs+vue的旅游管理系统
  • 【OS】计算机系统概述|操作系统基本概念|并发|并行|虚拟异步
  • 如何在O2OA中使用ElementUI组件进行审批流程工作表单设计
  • C++:模拟实现vector
  • 2025秋招内推|招联金融
  • 推荐常用的搜索渠道
  • Unity 热更新(HybridCLR+Addressable)-创建Addressable资源
  • H.264与H.265
  • FFmpeg源码:avio_seek函数分析
  • Codeforces Round 301 (Div. 2) C题 Ice Cave(BFS)
  • 昇思MindSpore进阶教程--高级自动微分
  • 基于springboot+小程序的儿童预防接种预约管理系统(疫苗1)(源码+sql脚本+视频导入教程+文档)
  • 依赖倒置原则(学习笔记)
  • PostgreSQL的表碎片
  • 学习Java (五)
  • Go Sonyflake学习与使用