深入Ansible

1.什么是ansible

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

2.为什么使用ansible

1.ansible特性

  • 模块化:调用特定的模块,完成特定的任务
  • 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
  • 支持自定义模块,可以使用任何语言进行开发
  • 基于Python语言实现
  • 部署简单,基于python和SSH,agentless
  • 安全,基于OpenSSH
  • 支持playbook编排任务
  • 幂等性:一个任务执行1遍和n遍效果一样,不因重复执行带来意外情况,Ansible通过任务模块的设计来实现幂等性
  • 无需代理不依赖PKI(无需ssl)
  • 可使用任何编程语言写模块
  • YAML格式,编排任务,支持丰富的数据结构
  • 较强大的多层解决方案

2.ansible架构

image-20230826164529055

3.ansible工作

image-20230826171347371

  • CMDB:CMDB 存储和管理者企业IT架构中的各项配置信息,是构建 ITIL 项目的核心工具,运维人员可以组合 CMDB 和 Ansible,通过 CMDB 直接下发指令调用Ansible 工具集完成操作者所希望达到的目标;
  • PUBLIC/PRIVATE 方式:Ansible 除了丰富的内置模块外,同时还提供丰富的 API语言接口,如PHP、Python、PERL 等多种流行语言,基于 PUBLIC/PRIVATE,Ansible 以 API 调用的方式运行;
  • Ad-Hoc 命令集:Users直接通过Ad-Hoc命令集调用Ansible工具集来完成任务;
  • playbook:任务剧本(任务集),编排定义ANSIBLE任务集的配置文件,由ANSIBLE顺序执行
  • INVENTORY:ANSIBLE管理主机的清单,/etc/ansible/hosts
  • MODULES:ansible执行命令的功能模块,多数为内置核心模块,也可定义
  • PLUGIN:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,不常用
  • API:供第三方程序调用的应用程序编程接口
  • ANSIBLE:组合以上全部功能,可以理解为是ANSIBLE命令根据,为核心执行工具

image-20230826172014114

image-20230826172339581

image-20230826180217075

3.ansible使用

1.配置文件

# 基础配置项
[defaults]# some basic default values...inventory      = /etc/ansible/hosts  # 主机清单
library        = /usr/share/my_modules/ # 模块库目录
module_utils   = /usr/share/my_module_utils/ # 模块工具目录
remote_tmp     = ~/.ansible/tmp  # 远程脚本目录
local_tmp      = ~/.ansible/tmp  # 本地脚本目录
plugin_filters_cfg = /etc/ansible/plugin_filters.yml # 插件
forks          = 5  # 并发数
poll_interval  = 15 # 间隔
sudo_user      = root # sudo用户
ask_sudo_pass = True # 
ask_pass      = True
transport      = smart
remote_port    = 22
module_lang    = C
module_set_locale = False
host_key_checking = False # 检查对应服务器的host_key,建议取消注释
log_path = /var/log/ansible.log # 日志文件,建议取消注释

2.ansible系列命令

# 修改默认的编辑器为vim
echo export EDITOR=vim >> /etc/profile.d/env.sh

1.ansible-doc

image-20230828203416883

2.ansible

image-20230828204018795

  • -i PATH(—inventory=PATH):指定inventory信息,默认为/etc/ansible/hosts;

  • –private-key=PRIVATE_KEY_FILE:指定密钥文件;

  • -M DIRECTORY(—module-path=DIRECTORY) :指定模块存放路径,默认为/usr/share/ansible;

  • -l subset(—limit=SUBSET):限制运行主机;

image-20230828213326171

image-20230828210155748

image-20230828211036914

3.ansible-galaxy

image-20230829212034128

4.ansible-vault

image-20230829214524680

5.ansible-console

image-20230829214911050

6.ansible-pull、ansible-playbook

image-20230829214143480

  • ansible-playbook [option] playbook [playbook …]

    • -i INVENTORY, --inventory=INVENTORY:指定清单文件或主机列表。

    • --list-hosts:列出运行任务的主机

    • list-tasks:列出playbook中的任务列表

    • -l SUBSET, --limit=SUBSET:进一步限制选定的主机/组。

    • -e EXTRA_VARS, --extra-vars=EXTRA_VARS:设置额外的变量,可以是键值对或 YAML/JSON 文件。

    • -t TAGS, --tags=TAGS:仅运行标记为这些值的任务。

    • --skip-tags=SKIP_TAGS:仅运行未标记为这些值的任务。

    • -C, --check:不进行任何更改,而是尝试预测可能发生的更改。

    • -D, --diff:显示可能更改的文件中的差异。

    • -v, --verbose:详细模式,可以使用多个 -v 选项以增加详细程度。

3.ansible命令执行过程

image-20230828211548457

4.常用模块

image-20230828214503573

  • command模块:

    Ansible 的 command 模块用于在目标主机上执行命令。该模块接受命令名称,后跟一系列以空格分隔的参数。给定的命令将在所有选定的节点上执行。命令不会通过 shell 处理,因此像 $HOSTNAME 这样的变量和像 *、<>|;& 这样的操作将无法使用
    
  • script模块:会把脚本自动发往各主机且自动赋予x权限

image-20230828220337450

  • copy模块:文件内容不一致也会进行操作
  • fetch模块:自动创建目录,只能抓单个文件
if the `dest' directory is `/backup' a`src' file named `/etc/profile' onhost `host.example.com', would besaved into `/backup/host.example.com/etc/profile'. The host name isbased on the inventory name.

image-20230829203541534

  • yum:
# 如果想装多个包
name=nginx,mysql

image-20230829205646280

5.playbook

  • playbook是由一个或多个play组成的列表
  • play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中task定义好的角色。从根本上讲,所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可让它们连同起来按事先编排的机制同唱一台大戏
  • playbook采用yaml语言编写

image-20230829215446854

image-20230829215723475

image-20230829215826811

image-20230829215916137

1.playbook组件

image-20230829220136633

2.Hosts

image-20230829220348347

image-20230829221521394

3.task

image-20230830145305826

image-20230830145356883

image-20230830150834305

一个name列表里面只能有不重名的模块,否则只会执行最后一个同名模块
如果在playbook中书写相对路径,则该路径是相对与playbook存在位置而言的

4.handlers

image-20230830154802353

---
- hosts: 192.168.19.128remote_user: roottasks:- name: yum nginxyum: name=nginx- name: copy conf filecopy: src=nginx/nginx.conf dest=/etc/nginx/ backup=yesnotify: - restart service- stop seervice- name: start nginxservice: name=nginx state=startedhandlers:- name: restart serviceservice: name=nginx state=restarted- name: stop serviceservice: name=nginx state=stopped

5.tags

---
- hosts: 192.168.19.128remote_user: roottasks:- name: yum nginxyum: name=nginxtags: install- name: copy conf filecopy: src=nginx/nginx.conf dest=/etc/nginx/ backup=yesnotify: - restart service- stop seervice- name: start nginxservice: name=nginx state=startedtags: startnginxhandlers:- name: restart serviceservice: name=nginx state=restarted- name: stop serviceservice: name=nginx state=stopped# 使用tag
ansible-playbook -t install,startnginx nginx.yml

6.变量

  • setup模块:查看本机信息,filter参数能过滤

image-20230830202922776

# 变量优先级为:命令行 > playbook > 主机清单
# 可以在hosts文件中定义
[w]
192.168.19.120 port=10 node=20
[w:vars]
node=178
node=20---
- hosts: wremote_user: rootvars:           - pkname1: nginx- pkname2: httpdtasks:- name: install nginxyum: name={{ pkname1 }}- name: install httpdyum: name={{ pkname2 }}# vars_files: 可以使用变量文件#    - vars.yml# vars.yml- var1: httpd- var2: nginx

image-20230830205422626

7.模板

image-20230830212336232

image-20230830212539505

---
- hosts: webremote_user: roottasks:- name: install serviceyum: name=nginx- name: copy filetemplate: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
# nginx.conf.j2
worker_processes {{ ansible_processor_vcpus**2 }}
{# example.j2 #}
{% for user in users %}
{% if user.authorized %}
User {{ user.name }} is authorized.
{% else %}
User {{ user.name }} is not authorized.
{% endif %}
{% endfor %}

8.when

image-20230830215528779

9.迭代with_items

  • 迭代:当有需要重复性执行的任务时,可以使用迭代机制
    • 对迭代项的引用,固定变量名位"item"
    • 要在task中使用with_items给定要迭代的元素列表
    • 列表格式:
      • 字符串
      • 字典
---
- hosts: wremote_user: roottasks:- name: create filefile: name={{ item }} state=touchwhen:  item == "f2.txt"with_items:- f1.txt- f2.txt

image-20230831140056583

6.role

image-20230831145943079

image-20230831161256088

image-20230831161328714

1.调用role

image-20230831170831536

image-20230831171839044

在这个文件能直接给role传递变量

{ role: nginx,username:nginx }

关于ansible role注意事项

  • vars变量文件中只能使用字典,但是vars_files的变量文件只要带有字典就行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/156222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux操作系统使用及C高级编程-D11-D13结构体

由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员”&#xff0c;其描述了一块内存空间的大小及解释意义。 语法&#xff1a; struct 结构体名 { 结构体成员列表 }; 下图是struct的定义和使用方法&#xff0c;其中20行这种赋值方式错误&#xf…

向pycdc项目提的一个pr

向pycdc项目提的一个pr 前言 pycdc这个项目&#xff0c;我之前一直有在关注&#xff0c;之前使用他反编译python3.10项目&#xff0c;之前使用的 uncompyle6无法反编译pyhton3.10生成的pyc文件&#xff0c;但是pycdc可以&#xff0c;但是反编译效果感觉不如uncompyle6。但是版…

BGP笔记

自治系统----AS AS划分的原因&#xff1a;如果网络太大&#xff0c;路由数量进一步增加&#xff0c;路由表规模变得太大&#xff0c;会导致路由收敛速度变慢&#xff0c;设备性能消耗加大&#xff0c;且全网设备对于路由信息的认知不同&#xff0c;造成流量通讯障碍 AS号&…

Django批量插入数据及分页器

文章目录 一、批量插入数据二、分页1.分页器的思路2.用一个案例试试3.自定义分页器 一、批量插入数据 当我们需要大批量创建数据的时候&#xff0c;如果一条一条的去创建或许需要猴年马月 我们可以先试一试for循环试试 我们首先建立一个模型类来创建一个表 models.py&#xff…

腾讯云代金券怎么领取(腾讯云代金券在哪领取)

腾讯云代金券是可抵扣费用的优惠券&#xff0c;领券之后新购、续费、升级腾讯云相关云产品可以直接抵扣订单金额&#xff0c;节省购买腾讯云的费用&#xff0c;本文将详细介绍腾讯云代金券的领取方法和使用教程。 一、腾讯云代金券领取 1、新用户代金券【点此领取】 2、老用户…

【软考】文件的组织结构

目录 一、说明二、逻辑结构2.1 说明2.2 记录式文件2.2.1 说明2.2.2 顺序文件2.2.3 索引文件2.2.4 索引文件 2.3 流式文件 三、物理结构3.1 说明3.2 链接方式之隐式链接3.3 链接方式之显式链接 一、说明 1.组织结构是文件的组织形式。 2.逻辑结构为用户可见的的文件结构。 3.物理…

模拟量采集----测量输入的电压

生活中的模拟量有很多 大多都为电压信号和电流信号 今天讲如何测量输入的电压信号 由图中的黄线可知&#xff0c;该运放是采用的同相放大器中的电压跟随器 电压跟随器的特点是电压的输入和输出隔离 同相运放的输入与输出的关系是&#xff1a;输出1R2/R1 在图上对应的就是输…

大数据安全 测试

测试1、用户 hive/1.common2.hadoop.fql.comLEXIN.COM 和 nn/1.common2.hadoop.fql.com 分别对 Hive 进行查询 &#xff08;1&#xff09;HDFS 配置 vim /usr/local/fqlhadoop/hadoop/conf/core-site.xml <property><name>hadoop.proxyuser.hive.hosts</name&g…

linux基本指令以及热键

基本指令 ♥clear ♥whoami ♥who ♥pwd ♥ls指令&#xff08;重点&#xff09; ls -a&#xff1a; ls -l ♥mkdir ♥cd指令 ♥touch指令 ♥stat指令 ♥rmdir指令 && rm 指令 ♥man指令 ♥nano指令 ♥cp指令 ♥mv指令 ♥cat指令 &#x1f5e1;输出/输出重定向 &#x1…

腾讯云HAI域AI作画

目录 &#x1f433;前言&#xff1a; &#x1f680;了解高性能应用服务 HAI &#x1f47b;即插即用 轻松上手 &#x1f47b;横向对比 青出于蓝 &#x1f424;应用场景-AI作画 &#x1f424;应用场景-AI对话 &#x1f424;应用场景-算法研发 &#x1f680;使用HAI进行…

【链表的说明、方法---顺序表与链表的区别】

文章目录 前言什么是链表链表的结构带头和不带头的区别 链表的实现&#xff08;方法&#xff09;遍历链表头插法尾插法任意位置插入一个节点链表中是否包含某个数字删除链表某个节点删除链表中所有关键字key清空链表所有节点 ArrayList 和 LinkedList的区别总结 前言 什么是链…

整套数字化招采平台安全防御体系

招采平台作为数字化供应链的重要组成部分&#xff0c;需要确保招标采购过程的安全性,主体信息和交易数据信息尤为重要,通过必要的安全架构、技术和安全管理制度&#xff0c;做到事前防范、事中监管和事后审计的安全防御。 一、平台技术安全架构 1、先进的技术架构&#xff0c…

Latex学习

二 实例 1. \Delta_{w}\frac{\partial l}{\partial w_{i1}}weight:\frac{\partial l}{\partial x_{i1}} 效果如下 其中对于希腊字母的大小写来说&#xff0c;可以参考&#xff1a; 【LaTeX 语法】字母表示 ( 大写、小写、异体 希腊字母 | 粗体字母 | 花体字母 )_latex字母_韩…

Centos8部署LNMP架构

LNMP架构 LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux&#xff0c;N指Nginx&#xff0c;M一般指MySQL&#xff0c;也可以指MariaDB&#xff0c;P一般指PHP&#xff0c;也可以指Perl或Python。 1.Linux是一类Unix计算机操作系统的统称…

09【保姆级】-GO语言的数组和切片

09【保姆级】-GO语言的数组 一、数组1.1 数组定义1.2 数组的使用1.3 数组的遍历1.4 数组的应用案例 二、切片2.1 切片的介绍2.2 切片的原理2.3 切片的三种使用 之前我学过C、Java、Python语言时总结的经验&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节。先Know how&a…

Spring框架学习 -- 创建与使用

目录 (1) 创建spring 项目 ① 创建maven项目 ②添加spring框架支持 ③ 添加启动项 (2) 创建 Bean对象 (3) 将Bean注入到容器 (4) 获取Bean对象 (5) 注意事项 (6) Spring的创建和使用流程图 创作不易多多支持 (1) 创建spring 项目 首先我们使用的开发工具为idea 专业版…

为什么原生IP可以降低Google play账号关联风险?企业号解决8.3/10.3账号关联问题?

在Google paly应用上架的过程中&#xff0c;相信大多数开发者都遇到过开发者账号因为关联问题&#xff0c;导致应用包被拒审和封号的情况。 而众所周知&#xff0c;开发者账号注册或登录的IP地址及设备是造成账号关联的重要因素之一。酷鸟云最新上线的原生IP能有效降低账号因I…

时间序列预测(9) — Informer源码详解与运行

目录 1 源码解析 1.1 文件结构 1.2 mian_informer.py文件 1.3 模型训练 1.4 模型测试 1.5 模型预测 2 Informer模型 2.1 process_one_batch 2.2 Informer函数 2.3 DataEmbedding函数 2.4 ProbAttention稀疏注意力机制 2.5 Encoder编码器函数 2.6 Decoder解码器函数…

PG数据中DBeaver上传csv文件作为数据表

DBeaver 是一个开源的数据库工具&#xff0c;还是蛮好用的&#xff0c;有时候需要我们上传数据做表&#xff0c;数据为CSV格式的&#xff0c;DBeaver本身自带有功能实现的。 可打开连着的数据库&#xff0c;找到模式&#xff0c;点到下面的表里&#xff0c;选择一个表直接导入…