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命令 ![](https://img-blog.csdnimg.cn/direct/93b9e5047fc6457c9b25e620cba5eb03.png) ![](https://img-blog.csdnimg.cn/direct/f436dda4d5a74bbc8fd6d4915cbf3ccd.png) ### 特殊的主机清单变量 * 如果远程主机没有使用免密登陆,如果远程主机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 ```

相关推荐
枷锁—sha1 小时前
跨站请求伪造漏洞(CSRF)详解
运维·服务器·前端·web安全·网络安全·csrf
云途行者1 小时前
使用 docker 安装 openldap
运维·docker·容器
群联云防护小杜1 小时前
深度隐匿源IP:高防+群联AI云防护防绕过实战
运维·服务器·前端·网络·人工智能·网络协议·tcp/ip
van叶~1 小时前
Linux探秘坊-------15.线程概念与控制
linux·运维·服务器
别致的影分身10 小时前
Docker 镜像原理
运维·docker·容器
庸子10 小时前
Ansible & AWX 自动化运维
运维·自动化·ansible
斯是 陋室10 小时前
在CentOS7.9服务器上安装.NET 8.0 SDK
运维·服务器·开发语言·c++·c#·云计算·.net
ii_best12 小时前
解锁 iOS 按键精灵辅助工具自动化新可能:iOSElement.Click 让元素交互更简单
运维·自动化
云和数据.ChenGuang12 小时前
运维技术教程之Jenkins的秘钥设置
运维·servlet·jenkins·自动化监控·运维技术教程
谢白羽12 小时前
jenkins搭建笔记
运维·笔记·jenkins