深入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,一经查实,立即删除!

相关文章

如何使用GitHub托管代码(简易版)

打开IDEA并打开你的项目。 确保你已经安装了Git&#xff0c;并且在你的计算机上设置了Git的全局用户信息&#xff08;用户名和电子邮箱地址&#xff09;。这里设置用户签名和将来登录 GitHub&#xff08;或其他代码托管中心&#xff09;的账号没有任何关系。Git 首次安装必须设…

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号&…

Shader的组成部分Fallback

文档 Fallback 作用 SubShader都不起作用的时候&#xff0c;使用Fallback确保有备有的shader起作用 语法 Fallback "Shader名字” 不使用备用shader Fabllback Off

快慢指针思想(Hare Tortoise 算法)

目录​​​​​​​ 一、快慢指针概念 二、常用场景 2.1 寻找倒数第k个节点 2.2 判断回文链表 2.3 用于判断链表中是否存在 “环” 2.4 用于判断存在“环”的链表中&#xff0c;“环”的起始位置 一、快慢指针概念 快慢指针是一种常用的数据结构思想&#xff0c;主要用于…

Django批量插入数据及分页器

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

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

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

5、基础入门——资产架构端口应用WAF站库分离负载均衡

资产架构 目录型网站安全&#xff1a;一个IP对应一个域名&#xff08;bbs.xiaodi8.com&#xff09;&#xff0c;该域名&#xff08;bbs.xiaodi8.com&#xff09;下有一个网站&#xff0c;该域名的某个目录下&#xff08;bbs.xiaodi8.com/blog&#xff09;也有一个网站。 端口型…

【软考】文件的组织结构

目录 一、说明二、逻辑结构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…

HBase之BlockCache

目录 BlockCacheLruBlockCacheBucketCacheCompressed BlockCache注意点 BlockCache 用于缓存从hdfs读的数据&#xff0c;有两种不同的实现&#xff0c;LruBlockCache(利用堆内存)和BucketCache(利用非堆内存) LruBlockCache 使用LRU算法 Single access级&#xff1a;首次从…

腾讯云HAI域AI作画

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

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

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

代码随想录二刷 | 链表 | 删除链表的倒数第N个节点

代码随想录二刷 &#xff5c; 链表 &#xff5c; 删除链表的倒数第N个节点 题目描述解题思路 & 代码实现双指针法 题目描述 19.删除链表的倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入…

8、信息打点——系统篇端口扫描CDN服务负载均衡WAF

文章目录 获取网络信息获取服务信息获取阻碍信息 获取网络信息 服务器厂商信息&#xff08;阿里云&#xff1f;腾讯云&#xff1f;&#xff09; 收集的原因&#xff1a;如果服务器架设在云上&#xff0c;不同厂商的一些配置信息不同。判断方法&#xff1a;直接在ip/域名网站搜相…

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

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