Ansible学习笔记

本文介绍了Ansible,一种基于Python的自动化工具,以其声明性语法、无需客户端、模块化和可扩展性等特点。文章详细讲解了Ansible的清单文件、配置文件以及剧本(Playbooks)的概念和使用方法,包括如何管理主机、配置权限和编写任务脚本。
摘要由CSDN通过智能技术生成

一、什么是Ansible

Ansible是一种开源的自动化工具,用于配置管理、应用程序部署、任务自动化和多台计算机系统之间的协调。它是一种基于Python语言的配置管理和自动化平台。通过SSH管理受控节点,将各种模块小程序推送到受控节点,并完成playbook的任务,完成后受控节点会自动删除这些模块。

Ansible的特点:

1.声明性语法: Ansible使用YAML语言来描述配置文件

2.无需客户端: Ansible不需要在被管理的主机上安装客户端,只需在控制节点上安装即可。这简化了部署和配置过程。

3.模块化: Ansible使用模块执行任务,这些模块可以用于各种操作,如文件操作、软件包管理、服务管理等。

4.可扩展性: Ansible可以轻松地与现有的工具和脚本集成,也可以通过编写自定义模块扩展其功能。

5.剧本和角色: Ansible使用剧本(Playbooks)来定义一系列任务的执行流程,并且这些任务可以组织成角色,方便复用和共享。

6.实时任务执行: Ansible采用SSH协议与远程主机进行通信,实时执行任务,同时可以在执行中收集并输出有关主机状态的信息。

二、Ansible的清单文件(inventory)

1.清单文件的定义:清单文件是Ansible管理主机的集合。这些主机可以分配到组中,以进行集中管理。组也可以包含子组。

2.清单文件可分为两种,一是使用文件定义的静态清单,二是通过外部信息提供程序,使用Ansible插件按需生成动态主机清单

3.清单文件的文件格式包括INI或YAML,INI格式最为常见。

INI格式:

[web]
web1.example.com
web2.example.com
192.0.2.42

[db-server]
db1.example.com
db2.example.com

[production:children]
web
db-server

INI格式的清单文件中,主机名或IP地址每行一个,[ ]是主机组,通过:children的主机名称来实现嵌套组

重要

两个主机组始终存在:

1.  all主机组中含有清单中明确列出的每个主机

2. ungrouped主机组中含有清单中明确列出、但不属于任何其他组的每个主机(即包含未分组的主机)

 4.通过范围简化主机清单

[START:END]

范围匹配从START到END(含)的所有值

例如:

[a:c].dns.example.com可匹配名为a.dns.example.com、b.dns.example.com、c.dns.example.com

192.168.[4:7].[0:255]可匹配192.168.4.0到192.168.7.255的所有主机

5.默认清单文件

/etc/ansible/hosts文件被视为系统默认的静态清单文件。但是,一般都不使用该文件,而是指定其他位置的清单文件,在ansible项目的配置文件ansible.cfg中指定清单文件inventory的路径。或者在运行playbook时使用 -i 选项指定清单文件的路径。

注意:

清单文件要创建在Ansible项目目录下,项目目录就是创建在家目录下用于隔离不同ansible项目的目录。

三、Ansible的配置文件

在ansible项目目录下创建名为ansible.cfg的文件用于配置anisble的行为。

Ansible配置文件由几部分组成,每一部分含有以键值对形式定义的设置。部分的标题以方括号括起。对于基本操作,请使用以下两个部分:

[defaults],用于设置Ansible操作的默认值

[privilege_escalation],用于配置Ansible如何在受管主机上执行特权升级。

[defaults]

inventory = ./inventory

remote_user = user

ask_pass = false

[privilege_escalation]

become = true

become_method = sudo

become_user = root

become_ask_pass = false

inventory指定清单文件的路径

remote_user在ansible连接受管主机的用户名

ask_pass是否输入SSH密码,如果使用SSH公钥身份验证,则为false

当执行任务权限不够时,需要提升权限

become为是否提权

become_method提权的方法

become_user提权成什么用户

become_ask_pass使用sudo进行权限升级时,是否需要输入密码

注意:

在/etc/sudoers中有一行

 %wheel        ALL=(ALL)       NOPASSWD: ALL

这个wheel是支持sudo命令的用户组,这个NOPASSWD: ALL字段是指用户在使用sudo命令时不需要输入自己密码,只有这里配置了NOPASSWD: ALL,become_ask_pass = false才会生效,如果不配置则become_ask_pass配置项则不会生效

四、剧本(playbook)

Playbook由一个或多个任务组成。每个任务定义了一项工作,例如安装软件包、配置文件、启动服务等。任务是由Ansible模块执行的,模块是Ansible的基本执行单元,负责执行特定的功能。

下例是一个具有单个任务的playbook:

---
- name: Configure important user consistently
  hosts: servera.lab.example.com
  tasks:
    - name: Newbie exists with UID 4000
      ansible.builtin.user:
      name: newbie 
      uid: 4000 
      state: present

Playbook是以YAML格式编写的文本文件,通常使用.yml拓展名保存

Playbook以三个破折号- - -开头,Playbook本身是一个键值对集合。

上面的示例中有三个键值对:name、hosts和tasks。这三个键均按相同方式缩进。

YAML的缩进基本规则:

1.处于层次结构中同一级别的数据元素必须具有相同的缩进量

2.如果项目属于其他项目的子项,其缩进量必须大于父项

注意:使用空格缩进,不要使用制表符(Tab),因为Tab是四个空格。

或者配置vim的配置文件,

在$HOME/.vimrc文件中添加如下内容,将Tab设置为两个空格,并自动缩进。

autocmd FileType yaml setlocal ai ts=2 sw=2 et

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值