Ansible01-Ansible基础和部署
目录
一、Ansible简介
二、安装部署Ansible
2.1、在控制节点安装ansible
2.2、对Linux和Unix受管节点要求
2.3、基于 Microsoft Windows 的受管主机
2.4、受管网络设备
三、Ansible配置文件
3.1、ansible.cfg配置文件推荐做法
3.2、ansible.cfg配置文件内容
四、Ansible清单
五、运行临时命令
一、Ansible简介
Asnible是什么?一种简单的自动化语言,可通过playbooks完美描述IT应用架构。一种自动化引擎,运行playbooks。也就是自动化运维,避免手动操作的误操作,管理功能一致的服务器避免差异。
- Ansible无代理,无需开放更多端口,仅通过ssh通信执行任务。
- playbook用YAML格式编写,简单易学,人类可读的自动化。
- 跨平台支持,Ansible提供Linux、Windows、UNIX和网络设备的无代理支持, 适用于物理、虚拟、云和容器
- 使用非root账号即可管理,需要root的时候再sudo提权。
二、安装部署Ansible
Ansible中的主机分为 控制节点 和 受管节点。在控制节点上进行操作就可以管理受管节点。
2.1、在控制节点安装ansible
Ansible的安装在控制节点进行。Ansible是用python开发的,要先安装python,再安装ansible。红帽环境直接安装。CentOS环境ansible需要epel源来安装ansible。
sudo yum install epel-release
sudo yum list installed platform-python
sudo yum install ansible
2.2、对Linux和Unix受管节点要求
受管节点不需要安装特殊的代理。Ansible 控制节点使用 标准的网络协议连接受管主机,从而确保系统处于指定的状态。
受管主机可能要满足一些要求,具体取决于控制节点连接它们的方式以及它们要运行的模块。 Linux 和 UNIX 受管主机需要安装有 Python,这样才能运行大部分的模块。 对于 RHEL8 和 CentOS8 可以依靠 platform-python 软件包。也可以启用并安装 python36
2.3、基于 Microsoft Windows 的受管主机
- 大部分专门为 Microsoft Windows 受管主机设计的模块需要在受管主机上安装 PowerShell 3.0 或更高版本,而不是安装 Python。
- 受管主机也需要配置 PowerShell 远程连接。Ansible 还要求至少将 .NET Framework 4.0 或更高版本安装在 Windows 受管主机上。
2.4、受管网络设备
- Ansible 可以自动化配置受管网络设备,例如路由器和交换机。 Ansible 包含大量专门为此目的而设计的模块。
- 由于大多数网络设备无法运行 Python,因此 Ansible 在控制节点上运行网络模 块,而不是在受管主机上运行。
三、Ansible配置文件
3.1、ansible.cfg配置文件推荐做法
可以通过修改 Ansible 配置文件中的设置来自定义 Ansible 安装的行为。 Ansible 从控制节点上多个可能的位置之一选择其配置文件。
- /etc/ansible/ansible.cfg ansible 软件包提供一个基本的配置文件, 如果找不到其他配置文件、则使用此文件。
- ~/.ansible.cfg ansible在用户的主目录中查找.ansible.cfg文件。如果存在此配置并且当前工作目录中也没有 ansible.cfg 文件,则使用此配置取代 /etc/ansible/ansible.cfg。
- ./ansible.cfg 如果执行 ansible 命令的目录中存在 ansible.cfg 文件,则使用它,而不使用全局文件或用户的个人文件。
可以用ansible --version查看当前ansible的配置文件。
推荐做法是在要运行 Ansible 命令的目录中创建 ansible.cfg 文件。目录中也包含任何供 Ansible 项目使用的文件,如清单 inventory 和 playbook,这是用于 Ansible 配置文件的最常用位置。一般不使用 ~/.ansible.cfg 或 /etc/ansible/ansible.cfg 文件。
3.2、ansible.cfg配置文件内容
Ansible配置文件由几个部分组成,每一部分含有以 key = value 键值对形式定义的设置。 每个部分的标题以方括号 [ ] 括起。对于基本操作,使用以下两部分:
- [defaults] 部分设置 Ansible 操作的默认值
- [privilege_escalation] 配置 Ansible 如何在受管主机上执行特权升级
[student@workstation ~]$ mkdir -p ansible/roles
[student@workstation ~]$ cd ansible/
[student@workstation ansible]$ vim ansible.cfg
[student@workstation ansible]$ tree
.
├── ansible.cfg
└── roles1 directory, 1 file[student@workstation ansible]$ cat ansible.cfg # [defaults]部分设置 Ansible 操作的默认值
# inventory 清单文件的路径
# remote_user 在受管主机上登录的用户的名称。如果未指定,则使用当前用户的名称
# ask_pass 是否提示输入SSH密码。如果使用SSH公钥身份验证,则可以是 false
# roles_path 查找roles的路径,多个路径用冒号 : 分隔
[defaults]
inventory = /home/student/ansible/inventory
remote_user = devops
ask_pass = false
roles_path = /home/student/ansible/roles # [privilege_escalation]部分配置 Ansible 如何在受管主机上执行特权升级
# become 指定连接后是否自动在受管主机上切换用户(通常切换为 root)
# become_method 如何切换用户,通常为sudo
# become_user 要在受管主机上切换到的用户(通常是root,这也是默认值)
# become_ask_pass 是否需要为become_method提示输入密码。默认为 false
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false [student@workstation ansible]$ ansible --version
ansible 2.9.21config file = /home/student/ansible/ansible.cfgconfigured module search path = ['/home/student/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python3.6/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 3.6.8 (default, Aug 24 2020, 17:57:11) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
ansible命令可以用命令选项覆盖配置文件,具体用 ansible --help 查看。
- 用 --inventory 、--user 、--ask-pass 选项指定替代 [default] 部分
- 用--become、--become-method 、--become-user 、--ask-become-pass 选项指定替代 [privilege_escalation] 部分
[student@workstation ansible]$ ansible --helpPrivilege Escalation Options:control how and which user you become as on target hosts--become-method BECOME_METHODprivilege escalation method to use (default=sudo #如何切换用户,通常为sudo), use `ansible-doc -t become -l` tolist valid choices.--become-user BECOME_USERrun operations as this user (default=root #要在受管主机上切换到的用户(通常是root,这也是默认值))-K, --ask-become-passask for privilege escalation password-b, --become run operations with become (does not imply passwordprompting)Connection Options:......-k, --ask-pass ask for connection password-u REMOTE_USER, --user REMOTE_USERconnect as this user (default=devops #在受管主机上登录的用户的名称。如果未指定,则使用当前用户的名称)
四、Ansible清单
清单定义 Ansible 将要管理的一批主机。这些主机也可以分配到组中,以进行集 中管理。组可以包含子组,主机也可以是多个组的成员。
可以通过两种方式定义主机清单。静态主机清单可以通过文本文件来定义。动态主机清单可以根据需要使用外部信息提供程序通过脚本或其他程序来生成。
指定清单的推荐做法,是在目录的配置文件 ansible.cfg 中 inventory = 配置。命令行用 --inventory 指定主机列表来覆盖默认的。主机列表写主机名、IP地址,可以用冒号 : 指定连续的范围,可以分组。使用asnible --list-host 检查。
[student@workstation ansible]$ vim inventory
[student@workstation ansible]$ cat inventory
[dev]
servera.lab.example.com[test]
serverb.lab.example.com[prod]
serverc.lab.example.com
serverd.lab.example.com[webservers:children]
prod[student@workstation ansible]$ ansible webservers --list-hosthosts (2):serverc.lab.example.comserverd.lab.example.com# 默认存在all和ungrouped组
[student@workstation ~]$ ansible -i inventory all --list-host
[student@workstation ~]$ ansible -i inventory ungrouped--list-host
五、运行临时命令
临时命令可以快速执行单个Ansible任务。使用的模块可以用 ansible-doc -l 列出。大多数模块具有幂等性,这表示它们可以安全地多次运行;如果系统已处于正确的状态,它们不会进行任何操作。
ansible servera.lab.example.com -m ping
ansible all -m pingansible-doc -l # 列出可用模块
快速进行测试。
[student@workstation ansible]$ ansible dev -m pingservera.lab.example.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}[student@workstation ansible]$ ansible webservers -m shell -a "yum repolist"[WARNING]: Consider using the yum module rather than running 'yum'. If you need to use command because yum is insufficient you can add 'warn: false' to this command task or set
'command_warnings=False' in ansible.cfg to get rid of this message.
serverd.lab.example.com | CHANGED | rc=0 >>
repo id repo name
appstream CentOS Linux 8 - AppStream
baseos CentOS Linux 8 - BaseOS
extras CentOS Linux 8 - Extras
serverc.lab.example.com | CHANGED | rc=0 >>
repo id repo name
appstream CentOS Linux 8 - AppStream
baseos CentOS Linux 8 - BaseOS
extras CentOS Linux 8 - Extras
比如,使用copy模块向webservers复制文件,并向webservers添加一个john用户指定其为wheel组。-m 指定模块,-a 指定模块参数,参数的使用方法用ansible-doc查看例子即可。
[student@workstation ansible]$ ansible-doc copy
[student@workstation ansible]$ ansible webservers -m copy -a "src=/etc/hosts dest=/tmp owner=student group=student mode=0664"
[student@workstation ansible]$ ansible webservers -m shell -a "ls -l /tmp"[student@workstation ansible]$ ansible-doc user
[student@workstation ansible]$ ansible webservers -m user -a "name=john comment='Jonh Nash' group=wheel"
[student@workstation ansible]$ ansible webservers -m shell -a "id john"
- 在大多数情形中,避免使用 command、shell 和 raw 这三个“运行命令”模块。
- 当 shell 或 command 模块运行时,通常会基于它是否认为影响了计 算机状态而报告 CHANGED 状态。
相关文章:

C++/C文件读取
1、C文件操作 ofstream:写操作ifstream: 读操作fstream : 读写操作 打开方式解释ios::in为读文件而打开文件ios::out为写文件而打开文件ios::ate初始位置:文件尾ios::app追加方式写文件ios::trunc如果文件存在先删除,…

HashSet中的add()方法( 二 )(详尽版)
本篇接着上一篇:(详尽版)HashSet中的add()方法( 一 )(详尽版) 有些东西上一篇说过了,这里就不再赘述了,具体说一下再次添加与第一次添加的区别: import java.util.HashSet;public …

20155321 实验四 Android程序设计
20155321 实验四 Android程序设计 安装Android studio成功 任务一:Android Stuidio的安装测试: 参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十四章: 安装 Android Stuidio完成Hello World, 要求修改res目录…

Ansible02-实施playbook
一、编写和运行playbook 1.1、编写playbook play 是针对清单中选定的主机运行的一组有序任务。playbook 是一个文本文件,其中包含由一个或多个按特定顺序运行的 play 组成的列表。 playbook 是以 YAML 格式编写的文本文件,通常使用扩展名 .yml 保存。…

linux下解压缩文件中文乱码问题的解决
在windows上压缩的文件,是以系统默认编码中文来压缩文件。由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。 虽然2005年就有人把这报告为bug, 但是info-zip的官方网站没有把自动识别编码列入计划&a…

ROS知识点总结
1、ROS功能包的目录下不能有中文 2、 WorkSpace --- 自定义的工作空间|--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。|--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库…

Effective Java:对于全部对象都通用的方法
前言: 读这本书第1条规则的时候就感觉到这是一本非常好的书。可以把我们的Java功底提升一个档次,我还是比較推荐的。这里我主要就关于覆盖equals、hashCode和toString方法来做一个笔记总结。希望可以与君共勉。 概述: 这一章主要是说明一些对…

HashSet中的add()方法( 一 )(详尽版)
让我们用例子来理解add()方法的底层代码吧,Let’s go: import java.util.HashSet;public class Test {public static void main(String[] args) {HashSet<String> names new HashSet<String>();names.add("Jim");//向HashMap集合…

Ansible03-管理变量、加密、事实
目录 一、管理变量 1.1、变量的基本用法 1.2、使用已注册变量捕获命令输出 二、管理加密 2.1、ansible-vault常用场景 三、管理事实 3.1、事实基本用法 3.2、创建自定义事实 3.3、魔法变量hostvars、group_names、groups、inventory_hostname 一、管理变量 1.1、变量…

HashSet中的add()方法( 零 )(详尽版)
我们知道在使用HashSet集合时,也就是在用HashMap集合,这是因为HashSet的底层是HashMap, public HashSet() {map new HashMap<>(); }在详述HashSet中的add()方法之前,我们要知道HashMap中的hash,因为在add()的底…

layui上传图片接口
mvc中 前台调用接口 url:"../upload/uploadfiles/" 然后开始接口 代码: string a ""; try { HttpFileCollection file context.Request.Files;//获取选中的文件 for (int i 0; i < file.Count; i) { string cFileName Path.G…

shell与 .sh文件与 .bash文件
一、shell和bash shell是LInux系统下的解释器,类似于windows下的cmd。shell对用户输入到窗口中的命令行进行解释,输入到内核。 bash同样是Linux系统下的解释器,是bash的改进版。 二、.sh文件与.bash文件 .sh文件和.bash文件都是脚本文件&a…

php session存入redis
一、 安装phpredis扩展php连接redis需要安装phpredis扩展。下载地址:https://github.com/phpredis/phpredis/releases,选用相应版本。笔者用的是php5.6.29,下载了phpredis-3.0.0安装出了问题,于是换成phpredis-2.2.8,正…

Ansible04-任务控制
目录 一、循环 二、条件 三、handlers 四、失败的处理 一、循环 使用 loop 关键字对一组项目迭代任务,循环变量 item 保存每个迭代过程中使用的值。 [studentworkstation ansible]$ vim loop.yml --- - name: Test loophosts: devgather_facts: novars:num:- …

HashSet中的add()方法( 三 )(详尽版)
上接HashSet中的add()方法( 二 )(详尽版) ,前两篇说的是泛型为String类的add()方法的具体执行过程,此后三篇说说泛型为自定义类的add()方法的具体执行过程: 首先让我们来自定义一个学生类: public class …

mono修改配置
当前mono安装目录为:/home/mono,安装成功后修改配置需进入这个路径: cd /home/mono 1.修改TcpBinaryFrameManager.cs文件 cd /home/mono/mono-2.10.8 vim mcs/class/System.ServiceModel/System.ServiceModel.Channels.NetTcp/TcpBinaryFrameManager.cs …

[Java in NetBeans] Lesson 01. Java Programming Basics
这个课程的参考视频在youtube。 主要学到的知识点有: Create new project, choose Java Application.one .jar file/ package(.jar name with the same as package), one package can contains mutiple .java files.Comment mutiple lines by using "/* */&quo…

ubuntu中常用指令
常用指令 清空命令行 CtrlL Conda 创建虚拟环境 conda create -n 虚拟环境名称 python3.7.10 查看虚拟环境列表 conda info --envs 激活虚拟环境 conda activate 虚拟环境名 退出虚拟环境 conda deactivate 虚拟环境名称 安装功能包 conda install 功能包名称 卸载功能包 con…

Ansible05-部署文件
目录 一、部署文件的常用模块 二、使用jinja2文件部署自定义文件 一、部署文件的常用模块 部署文件常用模块有 file 创建、删除文件或目录,修改selinux上下文。copy 复制文件到受控节点上,也可以直接在受控结点上创建文件。fetch 从受控结点获取文件…

HashSet中的add()方法( 四 )(详尽版)
上接 HashSet中的add()方法( 三 )(详尽版) ,我们重写一下Student类中的hashCode()方法来看看是否还能不能添加重复的学号了, 在学生类中重写hashCode()方法: public class Student {private String id;public Studen…

Laravel框架中的event事件操作
有时候当我们单纯的看 Laravel 手册的时候会有一些疑惑,比如说系统服务下的授权和事件,这些功能服务的应用场景是什么,其实如果没有经历过一定的开发经验有这些疑惑是很正常的事情,但是当我们在工作中多加思考会发现有时候这些服务…

yolact_ros出坑记录
教程:https://github.com/Eruvae/yolact_ros 下载通信中的话题msg 创建虚拟环境 conda create -n yolact python3.7.10 conda activate yolact 配置yolact环境 https://github.com/dbolya/yolact 运行效果如下所示: 在虚拟环境中安装需要的包 conda …

堡垒机高危命令正则表达式
堡垒机可以设置高危命令阻断,防止操作人员误操作造成删库跑路。但是什么是高危命令,需要管理员通过配置正则表达式,进行命令匹配。 今天2021年8月6日先匹配最常见的删库跑路命令 rm -rf / ,以下几种表达式联合起来就可以阻断这类…

实验吧 速度爆破
题目链接:http://ctf5.shiyanbar.com/ppc/sd.php 这道题很简单呀,一点斜的歪的都没有,只是我一个小菜鸟在完成时会遇到一些小麻烦,几度想去看wp,最后还是忍住了。。。 思路很简单 1、 先抓取页面里生成的hash值 2、 循…

返回一个二维整数数组中的最大的子数组和
一。题目: 1、输入一个二维整形数组,数组里有正数有负数。 2、二维数组中连续的一个子矩阵组成一个子数组。 3、求所有子数组的和的最大值。 二.设计思想: .定义一个二维数组,使用二重循环对其进行赋值,对其进行遍历&a…

HashSet中的add()方法( 五 )(详尽版)
上接 HashSet中的add()方法( 四 )(详尽版) ,我们再重写一下equals()方法来看看是否可以不能存入相同的id: 在学生类中再重写equals()方法: public class Student {private String id;public Student(String id) {thi…

ROS话题通信中创建自定义数据类型的两种方式
一、在同一个功能包下创建.msg文件 1、在功能包目录下创建msg文件夹 2、在文件夹中创建.msg文件 3、在该功能包的package.xml文件中加入: <build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>4、在…

2542513 - AS Java fails to start - Initialization of destination UMEBackendConnection failed
今天发现SAP As Java 开发机无法启动,根据 Note 2542513 处理该问题并记录。 今天发现SAP EPBPM服务器不能正常启动,jstart.exe进程显示 some process running 的黄灯状态。重启也不管用。到SAP官网 https://wiki.scn.sap.com/wiki/display/ASJAVA/%28J…

WordCount扩展与优化
合作者:201631062327,201631062128码云地址:https://gitee.com/LIUJIA6/WordCount3 一:项目说明 本次项目是在上次作业WorldCount的基础上,利用结对编程的思想,完成对WorldCount项目的功能扩展 -s 递归处理…

进制转换 位运算(包括补码、原码、反码、~0等一些零碎东西一次说清)
我发现网上关于标题上的内容介绍的都很零碎,因此为了方便查找、也为了本人对这一部分的充分理解,就想着写一篇这样的博客(我分成了几个部分,以便查找): 一、进制转换 让我们先来看看各个进制的定义&#…