Ansible--详解

目录

一、Ansible核心组件

 二、Ansible配置

1.配置案例

(1)管理安装ansible

(2)管理机分发公匙

(3)配置管理

(4)测试连接

2.命令说明

三、playbook剧本编写

1.playbook模板

2.playbook剧本话管理

3.常用模块

4.文件管理

 5.文件分发

6.处理程序(Handlers)

7.角色管理

8.事实

9.加密


一、Ansible核心组件

  • Host Inventory模块:

               定义ansible管理的主机,可以进行分组管理。

  • Core Modules Ansible核心模块

                ansible中模块就是用来指定对远程主机具体的操作,比如执行命令模块command、创建文件模块file等(ansible自带的模块)。

  • Custom Modules自定义模块

                如果黑犀牛模块不足以完成魔种功能呢就可以使用任何语言自定义模块。

  • Connection Plugins连接插件

                Ansible用来连接被管理端的一种方式,比如客户端运行了SSH服务,Ansible利用SSH服务跟客户端进行通信,Ansible是通过python编写的,而python有一个模块paramiko支持并行连接SSH,Ansible事实上就是使用paramiko进行连接被管理端。但是它还支持其他的连接方式需要插件(如zeroMQ就是C/S模式工作)。

  • Plugins第三方插件支持

                如email、logging模块,只要有Python编写能力就可以自行编写插件。

二、Ansible配置

1.配置案例

实验环境准备:

  • 192.168.10.10 管理机       192.168.10.11 被管理机
  • 目前只要机器上安装了python2.6或python2.7(windows系统不可以做控制主机),都可以运行Ansible。
  • 主机的系统可以是Red Hat,Debian,CentOS,OS X,BSD的各种版本等等。

(1)管理安装ansible

yum -y install epel-release#ansible在epel扩展源中yum -y install ansible#安装ansible

(2)管理机分发公匙

ssh-keygen -t rsa -b 4096#生成密钥对ssh-copy-id root@192.168.10.11#将公钥传给被管理机

#编写批量化传公钥的脚本

yum -y install expect#安装expect,让脚本支持expect的命令,可以出发远程登录。vim send_isa_pub.sh#编写批量化传公钥的脚本#!/bin/bash
ip1=100
pwd=123456
while [ $ip1 -le 200 ];
doip=192.168.10.$ip1
expect << EOF
spawn ssh-copy-id root@$ip
expect {
"yes/no" {send "yes\n";exp_continue}
"password" {send "$pwd\n"}
}
export eof
EOFlet ip1=$ip1+1
done

(3)配置管理

cd /aetc/ansible
vim hosts#编辑主机管理文件
[web]	#定义模块
# 设置管理的主机(被管理主机的IP地址)192.168.10.11
[local]127.0.0.1
[remote]192.168.10.11

(4)测试连接

ansible -i /etc/ansible/hosts --connection=local local -m ping# 测试本地连接,-i 指定主机文件;-m指定调用的命令模块;# --connection=local告诉ansible本机通信不需要通过SSH运行命令ansible -i /etc/ansible/hosts remote -m ping# 测试远程连接,-m后面跟调用的命令模块# 测试到 remote 模块的主机是否网络通畅

2.命令说明

命令:ansible
参数:-i /etc/ansible/hosts# --inventory=PATH# 指定库存文件,命名为hostsremote,local,all# 使用这个标签的下定义的服务器hosts清单文件# “all”是针对文件中定义的每个服务器运行的特殊关键字的。--private-key=PRIVATE_KEY_FILE_PATH# #使用指定路径的密匙建立认证连接-m shell# --module-path=DIRECTORY# 使用shell模块,它只是运行ping命令并返回结果。-a 'yum -y install httpd'# 用于将任何参数传递给 -m 指定的模块-c local或--connecion=local#在本地服务器上运行命令,而不是SSH。-b --become-user=root# 以用户“root”身份运行命令-u USERNAME --user=USERNAME# 指定移动端的执行用户-U SUDO_USERNAME --sudo-user=USERNAME-s --sudo# -u指定用户的时候,使用sudo获得root权限-k --ask-pass# 提示输入ssh的密码,而不是使用基于ssh的密钥认证-K --ask-sudo-pass# 提示输入sudo密码,与--sudo一起使用示例:ansible -i /etc/ansible/hosts web -b --become-user=root -m shell -a 'yum -y install httpd'# -i指定hosts文件(内有管理主机的IP)中的web组里的主机# -b指定以root用户执行后面的命令# -m指定shell模块(运行命令)# -a指定yum -y install httpd运行这个命令,并将这个参数传给shellansible -i ./hosts local --connection=local -b --become-user=root -m shell -a 'yum -y install nginx'# --connection=local对本机执行ansible -i ./hosts local remote -b --become-user=root -m shell -a 'yum -y install httpd'# 同时指定多个模块

三、playbook剧本编写

  • 功能:剧本文件中可以写入多个执行项,并排列好执行顺序,一次性给客户执行

  • 特点:剧本文件,必须按照yml语言编写,后缀必须是.yml

               剧本中调用对应的模块(即程序段),实现对应的功能

1.playbook模板

mkdir /etc/ansible/playbook && cd /etc/ansible/playbookvim default.yml
- hosts: web        #指定hosts文件里的web模块的主机become: yes		#允许使用指定的用户身份去执行become_user: roottask:			#针对web主机组执行的操作 - name: install httpd	#定义一个任务名shell:		#调用shell模块执行命令'yum -y install httpd'#command: 'yum -y install httpd'    #等于shell模块-name: create web page file	#创建网页文件shell:'echo "www.daboluo.com" > /var/www/html/index.html' -name: start httpd		#定义一个任务名service:				#服务name: httpd			#服务名为httpdstate: restarted		#指定服务状态重启ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/default.yml# 指定主机文件/etc/ansible/hosts,剧本文件为/etc/ansible/playbook/default.yml

2.playbook剧本话管理

  • 功能:制定被管主机服务,业务的部署方案,实现复杂配置
  • 配置思路:

                首先定义.yml文件,文件内容按ad-hoc格式编写

                再用ansible-playbook -i ./hosts XXX.yml的方式调用运行剧本

  • 模块化管理:

                .yml文件中使用不同模块完成不同的配置功能

3.常用模块

tasks		    # 定义各种任务,.yml启动时执行,常用任务类型如下:command		# 运行指定命令shell		# 调用指定脚本file		# 文件创建copy		# 文件复制service		# 服务管理yum			# 软件安装handlers	# 设定处理程序user		# 用户模块group		# 组模块
# command和shell的区别:
# command只能调用一条指令,不支持保留字;shell可以使用管道。
# 不支持别名命令

4.文件管理

# task任务中可设定file模块,创建文件或目录
file:path: '/mnt/d1'mode: 775state: directory		
# 指定文件类型:touch文件,directory目录,link软连接,hard硬链接,absent删除文件owner: www-datagroup: www-data#src=/mnt/f1	# 若state=link/hard的时候,src来指定原文件#force=yes		# 若创建软链接时,需要强制创建,则增加force=yes#recurse=yes	# 若state=directory时,并且更改权限或所属的时候,需递归继承,增加此选项。
# 若文件/目录不存在,则创建;若文件/目录存在,则更改权限,所属。

参数详解:

  • state参数:文件需要将state的值设置为touch。软链接需要将state设置为link,硬链接需要将state设置为hard。删除文件时(删除时不用区分目标是文件、目录还是链接),需要将state的值设置为absent,“absent”为缺席之意,当我们想让操作的目标“缺席”时,就表示我们想要删除目标。

  • src参数:当state设置为link或hard时,表示我们想要创建一个软连接或硬链接,所以,我们必须知知名软连接或硬链接的那个文件,通过src参数即可指定链接源。

  • force参数:当state=link的时候,可以配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件。

  • recurse参数:当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性。

示例:

vim test1.yml#编写剧本文件
- hosts: webbecome: yesbecome_user: roottasks:- name: chuang jian wen jianfile:		#创建一个文件path=/mnt/f1	#文件的路径state=touch		#状态为创建mode=644		#权限为644owner=root		#所有者为rootgroup=root		#所属组为rootansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/test1.yml
vim link-test.yml
- hosts: webbecome: yesbecome_user: roottasks:- name: an zhuang httpdfile:		        #创建一个文件path=/mnt/f1	#源文件的路径src=/mnt/f1		#软连接文件为f1state=link		#创建软链接mode=644		#权限为644force=yes		#如果已经存在,那就强制创建owner=root		#所有者为rootgroup=root		#所属组为rootansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/link-test.yml	

 5.文件分发

功能:从ansible服务器端分发文件给客户机

copy:

    src=/mnt/f1        # 指定本机要分发出去的文件路径

    dst=/mnt/           # 指定客户机上分发后存放的路径

# 复制文件- hosts: webbecome: yesbecome_user: roottasks:- name: testcopy:src=/mnt/f1		
# 本机要分发出去的文件,src=/mnt表示把整个目录分发下去,src=/mnt/表示分发目录下所有内容dest=/mnt/		# 客户机上存放的路径mode=644		# 权限为644owner=root		# 所有者为rootgroup=root		# 所属组为rootansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml

# 复制多个文件
# 多个文件复制传到相同位置- hosts: testvars:filename: /mnt/f*become: yesbecome_user: roottasks:- name: start httpcopy:src={{item}}			#占位符dest=/mnt/mode=755owner=rootgroup=rootwith_fileglob:"{{filename}}"	#调用变量的值,将变量的值传给占位符ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml

  

# 多个文件传到不同位置- hosts: testremote_user: rootgather_facts: falsebecome: yestasks:- name: "copy from target cpu"copy:src="{{item.src}}“			#占位符,src调用src项dest="{{item.dest}}"		#占位符:dest调用dest项mode=755owner=rootgroup=root with_items:- {src:"/mnt/f1",dest:"/mnt"}	#被调用变量- {src:"/mnt/f2",dest:"/var"}	#被调用变量,给占位符传值ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml# 使用变量支持保留字时,只针对批量文件分发有效,对批量目录的分发无效
# 添加用户或组- hosts: webremote_user: rootbecome: yestasks:- name: testuser:name: wang			#创建名为wang的用户state: presentansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml

6.处理程序(Handlers)

       处理程序与任务完全相同(它可以做task可以做的任何事),相当于一个函数,只是在剧本启动时不被执行,只有当另一个任务调用它时才会运行,您可以将其视为时间系统的一部分,处理程序将通过其侦听的时间调用进行操作。

       这对于运行任务后可能需要的“辅助”操作非常有用,例如在配置更改后安装或重新加载服务后启动新服务。

功能:使用handlers模块,创建任务,但并不会被直接执行,实在任务中调用执行,类似于软件开发中欧给的函数功能。

注:使用notify关键字调用handlers程序,而且notify不可以独立完成任务,需要跟在其他任务后。

示例:

- hosts: webbecome: yesbecome_user: roottasks:- name: an zhuangyum:name: httpdstate: installednotify:jian wang ye			#调用下方的handlers的执行的操作- name: qi fu wuservice:name: httpdstate: restartedhandlers:					#被上面notify调用- name: jian wang yeshell:'echo "www.daboluo.com" > /var/www/html/index.html'ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/XXX.yml

7.角色管理

  • 角色的功能:

           将剧本中需要定义的各个模块,如:handlers、files、变量等分别存放于不同的目录中,然后在task中组织任务部署的流程,方案。

  • 角色的优点:

            模块化、离散化编写复杂任务

            可支持的功能比单个task文件较为丰富,如:可创建文件模板,便于某服务的配置文件的统一化配置

  • 角色的创建:

            ansible-galaxy init NFS-test                 #创建角色,角色名为NFS-test

cd /etc/ansible/rolesansible-galaxy init test		#创建角色,命名为testcd files && mkdir d1echo aaaa > d1/f1cd ../tasksvim main.yml
-name: copy d1copy:src: d1		#不用指定路径,他会自动到角色的目录下的files目录下找d1文件dest: /mnt/mode=644owner: rootgroup: rootvim test.yml
- hosts: webroles:			#调用web_admin用户的所有任务- web_adminansible-playbook -i /etc/ansible/hosts tt.yml

8.事实

       在运行任何任务之前,Ansible将手机有关其配置的系统的信息,这些被成为事实,并且包括广泛的系统信息,如:CPU核心数量,可用的ipv4和ipv6网络,挂载的磁盘,Linux发行版等等。

       事实在“任务”或“模板”配置中通常很有用,例如在nginx的配置文件模块文件中设定与CPU核数一样的进程数。

user www-data:worker_processes {{ ansible _processor_cores }};# 定义进程数pid /var/run/nginx.pid;# 所有的ansible facts全局变量都是以“ansible_"为前缀,并且可以在其他任何地方使用。ansible -m setup --connection=local localhost# 查看本机事实ansible -i ./hosts remote -m setup# 查看远端事实(获取客户端信息)示例:ansible -i /etc/ansible/hosts web -m setup# 查看客户端信息

9.加密

       我们经常需要将敏感数据存储在我们的模板,文件或变量文件中,这样安全性由一定要求的情况时不可避免的。

        Ansible有一个j奥做Ansible Valult的解决方案

       Vault允许加密任何Yaml文件,通常用于将其作用与遍历啊ing文件,Vault不会加密文件和模板,只能加密Yaml文件。

       在创建加密文件时,系统会询问您必须使用的密码,以便稍后在调用角色或playbook时进行编辑。

参数:       create      #创建一个新文件并进行加密decrypt     #从加密文件创建明文文件edit        #编辑已经存在的加密文件encrypt     #加密现有的纯文本文件rekey       #在加密文件中设置新密码示例:
ansible-vault create vars/main.yml# 创建一个新的变量文件,并加密。# 输入加密密码后,该文件将在默认编辑器(通常是vim或nano)中打开。

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

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

相关文章

AI入门笔记(四)

深度学习是人工智能的一种实现方法。本文我将学习到的关于深度学习的代表卷积神经网络的数学结构分享给大家。 深度学习是重叠了很多层的隐藏层&#xff08;中间层&#xff09;的神经网络。我们以一个例题为例。 建立一个卷积神经网络&#xff0c;用来识别通过 66 像素的图像读…

排序 Comparable接口、Comparator接口

String类的Comparable接口 1、String类实现了Comparable<String>接口&#xff0c;并提供了compareTo方法的实现&#xff0c;因此&#xff0c;字符串对象&#xff08;即String类型的实例&#xff09;可以直接调用compareTo()方法来比较它们。2、String类的compareTo()方法…

LINE社群:为您的跨境出海业务带来更多流量

LINE 社群就是一个大型的公开聊天室&#xff0c;通过LINE社群不需要将对方添加为好友就可以聊天。它主要是以「兴趣」作为区分&#xff0c;所以商家可以在社群中找到不少潜在客户。尤其是面向台湾、日本、泰国这些地区的商家&#xff0c;LINE在这些地区的普及度很高&#xff0c…

云流化技术方案的优势

数字化的时代&#xff0c;许多新兴的技术都逐渐走进人们的视野&#xff0c;云流化作为一种新兴的技术在各个领域发挥着越来越重要的作用&#xff0c;也为我们带来了方便快捷的使用体验&#xff0c;尤其是在虚拟仿真和数字孪生领域&#xff0c;但是有的人可能听到这个词会比较陌…

RT-Thread软件+华大开发板 配置USART+MSH控制台

Step1: 打开IDE 并新建一个工程文件 step2: 在工程文件名右键 -> 点击串口->配置项 Step3: 点击 “硬件” -> “Enable UART” -> "Enable UART7" Step4: 点击“组件” -> “MSH: command shell” Step5: 保存整个工程&#xff0c; 并打开工…

使用 Docker 部署 Next Terminal 轻量级堡垒机

1&#xff09;Next Terminal 介绍 官网&#xff1a;https://next-terminal.typesafe.cn/ GitHub&#xff1a;https://github.com/dushixiang/next-terminal 想必经常玩服务器的都了解过 堡垒机&#xff0c;类似于跳板机&#xff0c;但与跳板机的侧重点不同。堡垒机的主要功能是…

java poi-tl 使用 模板 生成文档

1.引入依赖 <!--导出doc模板工具--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.10.6</version></dependency> 2.编码 /*** 导出doc文件* param id* return*/GetMapping(…

快乐生活,快乐分享,5款实用的小软件推荐

​ 分享是一种神奇的东西&#xff0c;它使快乐增大&#xff0c;它使悲伤减小&#xff0c;坚持分享一些好用的软件给大家&#xff0c;今天继续为大家带来五款好用的小软件。 1.数字笔记应用——OneNote ​ OneNote是微软推出的数字笔记应用&#xff0c;提供了一个集中的地方来…

c++ vector使用

动态数组&#xff0c;使用方法与python数组类似 1.定义和初始化 vector<type> name创建一个名为nama的type类型vectorvector<type> name{val1,val2,val3}创建数组并初始化为[val1,val2,val3]vector<type> name2(name1)使用name1的元素初始化name2&#xff…

泡菜生产加工厂污水处理需要哪些工艺设备

泡菜生产加工厂污水处理是一个重要的环境问题&#xff0c;需要采用一系列工艺设备来有效处理污水并降低对环境的影响。以下是一些常见的工艺设备&#xff0c;可以在泡菜生产加工厂中使用&#xff1a; 1. 沉淀池&#xff1a;沉淀池是最常用的工艺设备之一&#xff0c;其主要作用…

连表查询-mybatis

关于关联查询 首先&#xff0c;请准备一些测试数据&#xff0c;使得&#xff1a;存在若干条用户数据&#xff0c;存在若干条角色数据&#xff0c;某个用户存在与角色的关联&#xff0c;最好有些用户有多个关联&#xff0c;又有些用户只有1个关联&#xff0c;还有些用户没有关联…

XML常用介绍

XML代表可扩展标记语言&#xff08;eXtensible Markup Language&#xff09;&#xff0c;它是一种类似于HTML的标记语言。XML用于提供数据描述格式&#xff0c;适用于不同应用程序之间的数据交换&#xff0c;而这种交换不依赖于预定义的数据结构集合&#xff0c;从而增强了可扩…

产品说明文件的二维码怎么做?扫码看文件在线生成技巧

现在很多企业会把产品说明书的文件做成二维码后&#xff0c;印刷到产品包装或者宣传展板上&#xff0c;让其他人通过扫码来查看说明&#xff0c;有效的提高了用户体验。那么文件二维码制作的方法和步骤可能有很多小伙伴都不太清楚&#xff0c;那么今天小编通过本篇文章来给大家…

城市基础信息管理系统 (VB版电子地图源码/公交车线路图/超市平面图)-143-(代码+程序说明)

转载地址http://www.3q2008.com/soft/search.asp?keyword143 请访问 以下地址,查看最新版本, 新增加支持 建筑物 距离测量, 鸟瞰, 地图放大缩小, VB完善地图扩充程序(城市街道基础信息管理系统 )-362-&#xff08;代码&#xff0b;论文&#xff09; 这套系统印象深刻 因为,写…

[云原生] K8s之ingress

1.Ingress的相关知识 1.1 Ingress的简介 service的作用体现在两个方面&#xff0c;对集群内部&#xff0c;它不断跟踪pod的变化&#xff0c;更新endpoint中对应pod的对象&#xff0c;提供了ip不断变化的pod的服务发现机制&#xff1b;对集群外部&#xff0c;他类似负载均衡器…

VideoDubber时长可控的视频配音方法

本次分享由中国人民大学、微软亚洲研究院联合投稿于AAAI 2023的一篇专门为视频配音任务定制的机器翻译的工作《VideoDubber: Machine Translation with Speech-Aware Length Control for Video Dubbing》。这个工作将电影或电视节目中的原始语音翻译成目标语言。 论文地址&…

软件测试 基础(2)

文章目录 1. 软件测试&软件开发生命周期2. 如何描述一个 BUG3. 如何定义 BUG 的级别4. BUG 的生命周期5. 如何进行第一次测试6. 测试的执行和 BUG 管理7. 产生争执怎么办&#xff08;处理人际关系&#xff09; 1. 软件测试&软件开发生命周期 软件测试的生命周期&#…

Matplotlib图形配置--自定义坐标刻度

文章目录 自定义坐标刻度编程要求代码解释 自定义坐标刻度 虽然matplotlib默认的坐标轴定位器与格式生成器可以满足大部分需求&#xff0c;但是并非对每一幅图都合适。 主次要刻度 学习前最好先对matplotlib图形的对象层级有深入了解。 matplotlib的figure对象是一个盛放图形…

Oracle集群ASM磁盘扩容

先通过lsblk来查看集群两端磁盘是否扩容成功 lsblk -a查看自己两边磁盘UUID是否相同(for i in 后面为磁盘sd后字母名) for i in x y z aa ab ac ad ae do echo "KERNEL\"sd*\", SUBSYSTEM\"block\", PROGRAM\"/lib/udev/scsi_id --whitelist…

Vue 3中的ref:响应式变量的强大工具

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…