Ansible自动化运维之playbook详解(含yaml介绍)及ansible的加密控制

本文详细介绍了Ansible Playbooks的使用,包括YAML语言特性、Playbooks的结构、变量的设定与使用,以及如何通过命令行参数进行控制。通过示例展示了如何在Playbooks中定义和引用变量,创建和管理用户,以及执行服务管理等任务。此外,还探讨了Ansible的加密控制和shell脚本加密的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

playbook简介

Playbooks 记录并执行 Ansible 的配置、部署和编排功能。它们可以描述希望远程系统执行的策略,或一般 IT 流程中的一组步骤。

如果 Ansible 模块是工具,那么Playbooks就是说明手册,主机清单inventory就是原材料

在基本层面上,Playbooks可用于管理远程机器的配置和部署。在更高级的层面上,他们可以对涉及滚动更新的多层部署进行排序,并且可以将操作委托给其他主机,并在此过程中与监控服务器和负载平衡器进行交互。

Playbooks 被设计为人类可读的,并且是用基本的文本语言开发的。有多种方法可以组织 playbook 及其包含的文件。

playbook 是由一个或多个play组成的列表。Playbook 文件使用YAML来写的

官网:https://docs.ansible.com/ansible/latest/user_guide/playbooks.html#working-with-playbooks

YAML语言

YAML(Yet Another Markup Language)不是标记语言,它是适用于所有编程语言的人类友好数据序列化标准。
使用 YAML 是因为它比 XML 或 JSON 等其他常见数据格式更易于人类读写。此外,大多数编程语言中都有可用于 YAML 的库。

yaml官网:https://yaml.org/
ansible官网:https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html

特点:

可读性好、和脚本语言交互性号、易于实现、适用程序执行流梳理方式、可扩展性强

语法简介:

几乎每个 YAML 文件都以列表开头。列表中的每一项都是一个键/值对列表,通常称为“哈希”或“字典”。
所有 YAML 文件(无论它们是否与 Ansible 关联)都可以选择---...,表示文档的开始和结束
列表的所有成员都是以相同缩进级别开头的行,以破折号和空格开头:"- "
字典以简单的形式表示(冒号后面必须跟一个空格)key: value

次行一般书写文件内容、缩进严格、大小写敏感。
key/value可以多行书写也可一行书写,一行书写用,隔开。
value可以是个字符串,也可是list
一个play需要包括name和tasks,name 是描述;tasks 是动作
一个name只能包含一个task
扩展名称yml或者yaml。

在这里插入图片描述
列表和字典另一种表示方法(麻烦,不推荐):

1、这种形式[Linux,C++,Java,Python]
等价于:
- Linux
- C++
- Java
- Python

2、这种形式
- file: {path: /mnt/file1, state: touch}
等价于:
- file:
    path: /mnt/file1
    state: touch

演示环境

三台虚拟机:rhel7.6的OS
server1(controller)		192.168.122.11		ansible管理端
server2(node1)			192.168.122.12		远程主机
server3(node1)			192.168.122.13		远程主机

查看帮助

使用如下命令查看某一模块的帮助,EXAMPLE就是一个很好的playbook的模板。不会写的时候可以看着仿照着写

[devops@controller ansible]$ ansible-doc service | less

在这里插入图片描述

playbook执行命令

格式:ansible-playbook xxx.yml ...

常用参数含义
–check/-C预执行检测
–syntax-checkcheck language,检查语法有没有问题
–list-hosts列出hosts
–list-tags列出tag
–list-tasks列出task
–limit指定执行主机
-v -vv实现过程

编写一个yaml脚本

[devops@controller ansible]$ vim test.yaml
---
- name: test
  hosts: all
  tasks:
    - name: debug
      debug:
        msg: hello world                         

检查语法有没有问题,如下图就是没有
在这里插入图片描述
预执行检测
在这里插入图片描述列出主机和任务
在这里插入图片描述
执行没有问题,当有多台受控主机时可以--limit指定执行主机
在这里插入图片描述

playbook中变量的命名和变量的级别

  • 变量的命名:
    只能包含数字,下划线,字母
    只能用下划线或字母开头
  • 变量级别
    1、全局:从命令行或配置文件中设定的
    2、paly:在play和相关结构中设定的
    3、主机:由清单,事实收集或注册的任务
  • 变量优先级设定:
    狭窄范围有限与广域范围

playbook中变量设定和使用方式

1.在playbook中直接定义变量

直接在yaml脚本里定义变量并使用

[devops@controller ansible]$ vim test.yaml
---
- name: test
  hosts: all
  vars:
    string_1: hello world		#定义了一个变量
  tasks:
    - name: test
      debug:
        msg: "{{  string_1  }}"	#使用上边定义的变量

执行成功
在这里插入图片描述

2.在文件中定义变量

变量定义在其他文件,引用过来

[devops@controller ansible]$ vim value.yaml
---
lucky: hello world		#在这个文件里定义了lucky这个变量
#多个时可如下定义
#---
#lucky: 
#  - hello world
#  - hello linux
[devops@controller ansible]$ vim test.yaml 
---
- name: test
  hosts: all
  vars_files: ./value.yaml		#使用value.yaml文件定义的变量
  tasks:
    - name: test
      debug:
        msg: "{{  lucky  }}"	#使用value.yaml文件定义的变量lucky

执行成功
在这里插入图片描述
使用多个文件中的变量

[devops@controller ansible]$ vim value.yaml
---
lucky: hello world
[devops@controller ansible]$ vim value2.yaml 
---
two: this is second value
[devops@controller ansible]$ vim test.yaml 
---
- name: test
  hosts: all
  vars_files: 
    - ./value.yaml
    - ./value2.yaml
  tasks:
    - name: test
      debug:
        msg: "{{  lucky  }} {{  two  }}"	#将两个变量当作一个输出

执行成功
在这里插入图片描述
循环使用一个变量里的多个值创建用户

[devops@controller ansible]$ vim value.yaml
---
lucky: 
  - user1
  - user2
[devops@controller ansible]$ vim test.yaml
---
- name: test
  hosts: all
  vars_files:
    - ./value.yaml
  tasks:
    - name: user
      user:
        name: "{{  item  }}"
        state: present
      loop:
        "{{  lucky  }}"
[devops@controller ansible]$ ansible-playbook test.yaml
[root@node1 mnt]# tail -n 6 /etc/passwd | awk -F : '{ print $1 }'

执行成功
在这里插入图片描述
到node端查看用户创建成功
在这里插入图片描述

编写一个下载httpd和ftp并开启的脚本

[devops@controller ansible]$ vim service.yaml
---
service:
  - httpd
  - vsftpd
[devops@controller ansible]$ vim install.yaml
---
- name: httpd and vsftpd
  vars_files:
    - ./service.yaml
  hosts: all
  tasks:
    - name: install
      yum:
        name: "{{  service  }}"		#yum模块可以引用多个变量所以不需要循环,系统是8的用dnf模块
        state: present
    - name: start service
      service:
        name: "{{  item  }}"		#service一次只能一个所以要循环
        state: restarted
        enabled: yes
      loop:
        "{{  service  }}"

执行成功
在这里插入图片描述到node端查看服务开启成功
在这里插入图片描述

3.设定主机变量和清单变量

在定义主机变量和清单变量时使用,直接在主机清单里定义变量

[devops@controller ansible]$ vim hosts 
[test]
node1

[test:vars]		#这儿要与前面的名称一致,都是test。相当于是主机变量
USER=test1
[devops@controller ansible]$ vim user.yaml
---
- name: create user
  hosts: all
  tasks:
    - name: user mode
      user:
        name: "{{  USER  }}"		#直接引用即可,主机变量已经采集到
        state: present

执行成功
在这里插入图片描述用户创建成功
在这里插入图片描述

4.目录设定变量

group_vars:清单变量,目录中的文件名称与主机清单名称一致
host_vars:主机变量,目录中的文件名称与主机名称一致

创建清单变量

[devops@controller ansible]$ mkdir group_vars	#固定目录名,只有这个目录下的才能采集到,随便其他的目录不行
[devops@controller ansible]$ cd group_vars/
[devops@controller group_vars]$ vim test.yaml	#文件名要和主机清单里的组名一致,否则采集不到
---
USER: testuser1			#一个变量时必须这么写,否则会报错
[devops@controller ansible]$ vim user.yaml	#文件和上面一样
---
- name: create user
  hosts: all
  tasks:
    - name: user mode
      user:
        name: "{{  USER  }}"		#直接引用即可,主机变量自动采集
        state: present

执行成功
在这里插入图片描述创建主机变量

[devops@controller ansible]$ mkdir host_vars
[devops@controller ansible]$ cd host_vars/
[devops@controller host_vars]$ vim node1.yaml	#这个要和主机清单里写的一致,如果清单里写的是ip那这里也要写ip,主机名就写主机名
---
USER: testuser2
[devops@controller ansible]$ vim user.yaml	#文件和上面一样
---
- name: create user
  hosts: all
  tasks:
    - name: user mode
      user:
        name: "{{  USER  }}"		#直接引用即可,主机变量自动采集
        state: present

执行成功
在这里插入图片描述用户创建成功
在这里插入图片描述

5.用命令覆盖变量

直接在命令后边跟变量

[devops@controller ansible]$ ansible-playbook user.yaml -e "USER=hello"

在这里插入图片描述

Ansible的加密控制

shell脚本的加密

shell脚本加密:使用shc工具,安装步骤如下

下载并编译shc工具:
yum -y install gcc gcc-c++
wget http://www.datsi.fi.upm.es/%7Efrosal/sources/shc-3.8.7.tgz
tar zxf shc-3.8.7.tgz
mkdir -p /usr/local/man/man1
cd shc-3.8.7
make test && make strings && make expiration &&make install

使用示例:
[root@controller ~]# shc -r -f test.sh		#脚本前一定要加#!/bin/bash
r其他系统也能用,f指定要编译的shell的路径及文件名

xxxx.sh.x 二进制文件,重命名后用 chmod +x xxxx.sh 赋予权限后可执行
xxxx.sh.x.c C语言文件,无用,可以删除

在这里插入图片描述

ansible中的加密

1、创建加密文件
在这里插入图片描述2、文本密钥形式创建加密文件
在这里插入图片描述
3、交互式查看加密文件
在这里插入图片描述
4、文本密钥形式查看加密文件
在这里插入图片描述
5、编辑加密文件
也可以指定密钥文件编辑
在这里插入图片描述
6、更改密码
也可以指定密钥文件编辑
在这里插入图片描述
7、解密文件
也可以指定密钥文件编辑,解密后可以直接看
在这里插入图片描述8、加密现有文件
也可以指定密钥文件编辑
在这里插入图片描述9、执行加密脚本
也可以指定密钥文件
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值