ansible 任务块以及循环

任务块

  • 可以通过block关键字,将多个任务组合到一起
  • 可以将整个block任务组,一起控制是否要执行
复制代码
# 如果webservers组中的主机系统发行版是Rocky,则安装并启动nginx
复制代码
[root@pubserver ansible]# vim block1.yml
复制代码
---
复制代码
- name: block tasks
复制代码
  hosts: webservers
复制代码
  tasks:
复制代码
    - name: define a group of tasks
复制代码
      block:
复制代码
        - name: install nginx   # 通过yum安装nginx
复制代码
          yum:
复制代码
            name: nginx
复制代码
            state: present
复制代码
复制代码
        - name: start nginx     # 通过service启动nginx服务
复制代码
          service:
复制代码
            name: nginx
复制代码
            state: started
复制代码
            enabled: yes
复制代码
      when: ansible_distribution=="Rocky"   # 条件为真才会执行上面的任务

rescue和always

lock和rescue、always联合使用:

  • block中的任务都成功,rescue中的任务不执行
  • block中的任务出现失败(failed),rescue中的任务执行
  • block中的任务不管怎么样,always中的任务总是执行

loop循环

  • 相当于shell中for循环
  • ansible中循环用到的变量名是固定的,叫item

role角色

复制代码
# 创建角色
复制代码
# 1. 声明角色存放的位置
复制代码
[root@pubserver ansible]# vim ansible.cfg 
复制代码
[defaults]
复制代码
inventory = hosts
复制代码
roles_path = roles    # 定义角色存在当前目录的roles子目录中
复制代码
# 2. 创建角色目录
复制代码
[root@pubserver ansible]# mkdir roles
复制代码
# 3. 创建名为motd的角色
复制代码
[root@pubserver ansible]# ansible-galaxy init roles/motd
复制代码
[root@pubserver ansible]# ls roles/ motd     # 生成了motd角色目录

ansible加解密文件

root@pubserver ansible# echo "tedu.cn" > pass.txt

root@pubserver ansible# echo "hello wrord" > data.txt

root@pubserver ansible# ansible-vault encrypt data.txt --vault-id pass.txt 加密

Encryption successful

root@pubserver ansible# ansible-vault decrypt data.txt --vault-id pass.txt 解密

  • 使用ansible管理远程主机,存储敏感数据时(如,文件中包含密码),应该将其加密
  • 执行playbook时,通过--ask-vault-password选项提示输入密码
  • ansible-vault encrypt test02.yml

ansible-playbook test02.yml

ansible-playbook test02.yml --ask-vault-password

echo 123 > 123.txt

ansible-playbook test02.yml --vault-id 123.txt

sudo命令

特殊的主机清单变量

  • 如果远程主机没有使用免密登陆,如果远程主机ssh不是标准的22端口,可以设置特殊的主机清单变量
  • ansible_ssh_user:指定登陆远程主机的用户名
  • ansible_ssh_pass:指定登陆远程主机的密码
  • ansible_ssh_port:指定登陆远程主机的端口号
复制代码
 删除远程主机的/root/.ssh/authorized_keys,以便恢复通过密码登陆
复制代码
# 修改web1 ssh服务的端口为220
复制代码
[root@web1 ~]# systemctl stop firewalld
复制代码
[root@web1 ~]# echo 'Port 220' >> /etc/ssh/sshd_config
复制代码
[root@web1 ~]# systemctl restart sshd
复制代码
# 退出再登陆时,需要指定端口号
复制代码
[root@myhost ~]# ssh -p220 192.168.88.11 
复制代码
# 配置ssh通过用户名、密码管理远程主机,通过220端口连接web1
复制代码
[root@pubserver myansible]# vim inventory 
复制代码
[group1]
复制代码
web1 ansible_ssh_user=root ansible_ssh_pass=a ansible_ssh_port=220
复制代码
web2 ansible_ssh_user=root ansible_ssh_pass=a
复制代码
db1 ansible_ssh_user=root ansible_ssh_pass=a
相关推荐
实战派K8S&DB5 分钟前
TDSQL 核心模块与进程体系
运维·数据库·分布式·sql·mysql
Rooting++7 分钟前
用友打包的APP壳子怎么获取SHA1码?
运维·服务器
云飞云共享云桌面11 分钟前
降本 + 护图纸:珠海制造装备工厂 SolidWorks 服务器共享设计方案
运维·服务器·制造
anxiao_m32 分钟前
内外网文件交换如何兼顾安全与效率?2026企业工具选型攻略
运维·服务器·安全
程序员-Benothing1 小时前
Linux编码转换命令:iconv、dos2unix、base64、md5sum
linux·运维·服务器
RoboWizard1 小时前
搭配W790芯片组的超频服务器内存(架构选型)FAQ合集
运维·服务器·架构
2402_882893861 小时前
Linux 进程概念详解(上)—— 从冯诺依曼体系到僵尸进程与孤儿进程
linux·运维·服务器
格物致胜工业数智技术1 小时前
皮尔磁纸板进料安全方案运维实录:O300传感器用了三年的个人体会
运维·安全
夜之眷属1 小时前
服务启动即崩:InetAddress.getLocalHost() 抛 UnknownHostException 排查记
java·运维·后端·docker
可涵不会debug1 小时前
实测ToDesk新终端:跨端会话恢复+多终端并行,远程Vibe Coding的完整体验报告
运维·电脑