RHCE学习笔记(RHEL8) - RH294

Chapter Ⅰ 介绍Ansible

RHCE学习笔记(RHEL8) - RH294_第1张图片
ansible
ansible是一款开源自动化平台
ansible围绕一种无代理架构构建,在控制节点上安装ansible,且客户端不需要任何特殊的代理软件;ansible使用SSH等标准协议连接受管主机,并在受管主机上运行代码或命令来确保他们处于ansible指定的状态

Ansible帮助:
1、官方网站:https://docs.ansible.com/ansible/2.8/modules/modules_by_category.html
2、ansible-doc 模块名称
RHCE学习笔记(RHEL8) - RH294_第2张图片

Chapter Ⅱ 部署Ansible

类别 文件 说明
配置文件 ansible.cfg 通过哪个账号、登录方式(用户名密码/密钥)、提权
管理清单 inventory 管理设备的清单列表(支持分组)
运行脚本 playbook ansible的语法、具体执行任务脚本

1、配置文件
三种配置文件

配置文件 所在路径 优先级
ansible.cfg 当前目录
~/.ansible.cfg 家目录 次高
/etc/ansible/ansible.cfg 全局配置目录
# some basic default values...
[defaults]
# 指定清单文件
inventory      = /home/student/ansible/inventory
# 登录是否需要输入密码,因为已经在sshd中设置密钥登录,所以此处可以设置为False
ask_pass      = False
# 指定登录到被管主机的账号
remote_user = devops

[privilege_escalation]
# 是否可以切换高权限账号
become=True
# 切换的方式采用sudo
become_method=sudo
# 切换到什么账号
become_user=root
# 切换时是否需要密码
become_ask_pass=False

注:提权sudo等相关配置在/etc/sudoers中配置

2、管理清单
清单定义Ansible将要管理的一批主机。这些主机也可以分配到组中,以进行集中管理。组可以包含子组,主机也可以是多个组的成员。清单还可以设置应用到它所定义的主机和组的变量。
RHCE学习笔记(RHEL8) - RH294_第3张图片
验证inventory
ansible 主机名或组名 --list-hosts,或者直接用all也可以
在这里插入图片描述
3、运行临时命令
Ansible有两种方式运行:临时运行(单词命令行)和脚本运行(playbook)

ansible host-pattern -m moudule [-a 'module arguments'] [-i inventory]

Ansible模块

模块类别 模块
文件模块 ▪ copy:将本地文件复制到受管主机
▪ file:设置文件的权限和其他属性,如创建、删除等
▪ lineinfile:确保特定行是否在文件中
▪ synchronize:使用rsync同步内容
软件包模块 ▪ package:使用操作系统本机的自动监测软件包管理器管理软件包
▪ yum:使用YUM软件包管理器管理软件包
▪ apt:使用APT软件包管理器管理软件包
▪ dnf:使用DNF软件包管理器管理软件包▪ gem:管理Ruby gem
▪ pip:从PyPI管理Python软件包
系统模块 ▪ firewalld:使用firewalld管理任意端口和服务
▪ reboot:重启计算机
▪ service:管理服务
▪ user:添加、删除和管理用户账户
Net Tools模块 ▪ get_url:通过HTTP、HTTPS或FTP下载文件
▪ nmcli:管理网络
▪ uri:与web服务交互

在受管主机上运行任意命令
command模块允许管理员在受管主机的命令行中运行任意命令,要运行的命令通过-a选项指定为该模块的参数
RHCE学习笔记(RHEL8) - RH294_第4张图片

Chapter Ⅲ 实施PLAYBOOK

1、规范
Playbook是以YAML格式编写的文本文件,通常使用扩展名yml或yaml保存。Playbook使用空格字符缩进来表示其数据结构。
- 处于层次结构中同一级别的数据元素必须具有相同的缩进量
- 如果项目属于其他项目的子项,其缩进量必须大于父项

YAML语法规则:
- 大小写敏感
- 使用缩进量表示层级关系
- 缩进时不允许使用tab键,只可以使用空格
- 缩进时空格数量不重要,只要相同元素左侧对齐,表示这些元素属于同一个层级
- #表示当行注释
- 字符串可以不用引号标注(但建议加上引号,便于理解和阅读)

Playbook开头的一行由三个破折号(—)组成,标记文档开始;末尾可能使用三个圆点(…),实际中通常会省略;首末标记位之间,会以play列表的形式定义playbook,YAML列表中的项目以一个破折号加空格开头。

---
- name: "install and start http"
  hosts: intranetweb
  vars:
  tasks:
    - name: "install http"
      yum:
        name: httpd
        state: present
    - name: "start http"
      service:
        name: httpd
        state: started
        enabled: true

RHCE学习笔记(RHEL8) - RH294_第5张图片
2、语法检查
ansible-playbook --syntax-check test.yaml

3、显示详细信息verbose
ansible-playbook -vvv test.yaml

选项 描述
-v 显示任务结果
-vv 任务结果和任务配置都会显示
-vvv 包含关于与受管主机连接的信息
-vvvv 增加了连接插件相关的额外详细程度选项,包括受管主机上用于执行脚本的用户,以及所执行的脚本

4、模拟仿真(空运行)
ansible-playbook -C test.yaml
返回结果,但不会真的到受管主机上执行

Ansible模块维护
用ansible-doc查询模块时,需要注意维护属性,有些非商用的模块有可能后期会下线,尽量使用stableinterface和core的模块
1、status(开发状态)
- stableinterface:模块的关键字稳定,将尽力确保不删除关键字或更改其含义
- preview:模块处于技术预览阶段,可能不稳定,其关键字可能会更改,或者可能需要本身受到不兼容更改的库或web服务
- deprecated:模块已被弃用,未来某一发行版中将不再提供
- removed:模块已从发行版中移除,但因文档需要存根,以帮助之前的用户迁移到新的模块
2、supported_by(维护人)
- core:由上游“核心”Ansible开发人员维护,始终随Ansible提供
- curated:模块由社区中的合作伙伴或公司提交并维护
community:模块不受到核心上游开发人员、合作伙伴或公司的支持,完全由一般开源社区维护
RHCE学习笔记(RHEL8) - RH294_第6张图片

Chapter Ⅳ 管理变量和事实

https://docs.ansible.com/ansible/2.8/user_guide/playbooks_variables.html

命名变量:变量的名称必须以字母开头,并且只能含有字母、数字和下划线
1、全局范围变量:从命令行或Ansible配置设置的变量
2、Play范围变量:在play和相关结构中设置的变量
3、主机范围变量:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量
优先级:1<2<3,不同级别定义相同变量,采用优先级最高的变量,即低优先级会被高优先级覆盖
注:清单中的变量优先级小于playbook中的变量,一般在其中定义与playbook相同的变量,作用是防止playbook未定义变量导致执行错误

变量的使用

  • 双花括号
  • 以变量开始的时候,必须加"“,即”{ { var }}"(建议都加)
  • 在when语句中调用变量不能加{ {}}
    RHCE学习笔记(RHEL8) - RH294_第7张图片
    RHCE学习笔记(RHEL8) - RH294_第8张图片

变量数组
如下代码可以转换为名为users的数组

user1_first_name: Bob
user1_last_name: Jones
user1_home_dir: /users/bjones
user2_first_name: Anne
user2_last_name: Cook
user2_home_dir: /users/acook
users:
  bjones:
    first_name: Bob
    last_name: Jones
    home_dir: /users/bjones
  acook:
    first_name: Anne
    last_name: Cook
    home_dir: /users/acook

可以用如下两种形式访问数据:

# Returns 'Bob'
users.bjones.first_name

# Returns '/users/acook'
users.acook.home_dir

# Returns 'Bob'
users['bjones']['first_name']

# Returns '/users/acook'
users['accok']['home_dir']

模块debug
在调试的时候使用,相当于打印
var:取变量值打印

使用目录填充主机和组变量
根据被管主机或组进行分别定义的变量
目录group_hosts、hosts_group的名字必须这么写,不能改
文件名必须和Inventory中定义的主机相同
实验:servera归属groupA,serverB归属groupB,其中groupA安装ntpd、groupB安装httpd、servera添加用户devops、serverb添加用户student
RHCE学习笔记(RHEL8) - RH294_第9张图片
RHCE学习笔记(RHEL8) - RH294_第10张图片
RHCE学习笔记(RHEL8) - RH294_第11张图片

---
- name:
  hosts: groupA, groupB
  vars:
  ignore_errors: yes
  tasks:
    - name: "group: install software"
      yum:
        name: "{
   { package }}"
        state: present
      
    - name: "hosts: add user"
      user:
        name: "{
   { user_name }}"

RHCE学习笔记(RHEL8) - RH294_第12张图片

注册变量register
register变量,可以临时保存本模块执行后的结果,一般用在判断关系中,决定后续语句如何执行
示例:在servera上安装httpd,通过结果判断是否已经预先安装,第一个显示全部结果信息,第二个只显示msg字段信息

---
- name: "test httpd is installed"
  hosts: servera.lab.example.com
  vars:
  tasks:
    - name: "install httpd"
      yum:
        name: httpd
        state: present
      register: result_install
      
    - name: "display result"
      debug:
        var: result_install

    - name: "display simple result"
      debug:
        var: result_install['msg']

RHCE学习笔记(RHEL8) - RH294_第13张图片
facts变量
Ansible执行YAML前,会去被管主机上采集信息,并通过json格式存储在内存中。(Gathering Facts)
目的:做环境状态的判断
可以收集IP地址、硬件信息(CPU、内存

你可能感兴趣的:(运维,linux)