Ansible的配置、主机清单、Ansible的脚本Playbook详解

news2024/12/25 9:00:18

文章目录

  • Ansible的配置
    • 配置文件
  • 主机清单
      • 远程主机的分组
      • 变量
  • Ansible的脚本Playbook
    • Playbook的文件格式YAML
    • ansible-playbook的命令
    • Playbook的基本语法
    • 变量

Ansible的配置

配置文件

Ansible是一款功能强大的自动化工具,可以实现对远程主机的管理和操作,下面是Ansible配置文件的详解。

Ansible的配置文件为ansible.cfg,默认情况下会在以下路径中查找:

  • 当前工作目录下的ansible.cfg
  • 用户主目录下的.ansible.cfg
  • /etc/ansible/ansible.cfg

如果需要使用其他文件名或路径,可以通过在命令行中指定-c参数来覆盖默认配置。

下面是Ansible常用的配置文件参数及其含义:

  1. inventory:指定主机清单文件的路径,默认为/etc/ansible/hosts
inventory = /etc/ansible/hosts
  1. library:用于指定自定义模块的路径。
library = /usr/share/my_modules/
  1. remote_tmp:指定了远程主机上用于存储临时文件的目录路径。
remote_tmp = ~/.ansible/tmp
  1. local_tmp:指定了本地主机上用于存储临时文件的目录路径。
local_tmp = ~/.ansible/tmp
  1. remote_user:指定 Ansible 在远程主机上执行任务时所使用的用户名。默认情况下,Ansible 会使用当前登录用户的用户名。
remote_user = root
  1. private_key_file:指定 Ansible 在远程主机上执行任务时所使用的私钥文件路径。可以使用 SSH 密钥对进行身份验证。
private_key_file = /path/to/file
  1. host_key_checking:指定是否检查远程主机的 SSH 主机密钥。默认情况下,该参数值为 true,表示检查主机密钥;可以将其修改为 False 来关闭主机密钥检查。
host_key_checking = False
  1. forks:指定 Ansible 在同时执行任务时所使用的进程数。默认情况下,该参数值为 5
forks          = 5
  1. becomebecome_method:用于在远程主机上以管理员身份执行任务。become 参数用于指定是否启用管理员身份执行任务,可以将其设置为 truefalsebecome_method 参数用于指定管理员身份的获取方式,常用的取值包括 sudosu 等。
become=True
become_method=sudo
  1. log_path:指定 Ansible 的日志文件路径。可以在该文件中查看 Ansible 的执行日志和错误信息。
log_path = /var/log/ansible.log

主机清单

Ansible 主机清单(Inventory)是指 Ansible 用于管理和执行任务的主机列表。主机清单可以是一个文本文件,也可以是一个脚本或程序。在主机清单中,每个主机都有一个唯一的名称和一个或多个变量,用于指定主机的连接参数、主机组、主机状态等信息。

Inventory的配置文件

/etc/ansible/hosts

在配置文件中修改 Inventory 文件的位置,文件上面讲过默认是在/etc/ansible/ansible.cfg

如果你要修改到 /opt/ansible/hosts的话就要修改配置文件

inventory = /opt/ansible/hosts

利用参数-i传递主机清单配置文件

[root@localhost ~]# ansible-playbook -i /opt/ansible/hosts xxx.yaml

远程主机的分组

给远程主机分组,以便于在Playbook中使用。下面的文件中,展示了主机清单文件中最简单的分组方法,[ ]内是组名。将远程主机分为 test1、test2、test3几个组

vim /etc/ansible/ansible.cfg
# 添加如下
192.168.100.10

[test1]
192.168.200.10
192.168.200.20
three.ipipip.com

[test2]
192.168.200.40
192.168.200.50

[test3]
192.168.200.60

分组也可以支持嵌套。例如 [new_york][california][texas] 等。那么,我们就可以使用 [usa:children] 来将这些子组组合在一起,并将它们作为一个整体来管理。

[new_york]
192.168.200.20
192.168.100.30

[california]
192.168.200.40
192.168.100.10

[texas]
192.168.100.20

[test3]
192.168.200.60

[usa:children]
new_york
california
texas

变量

主机清单文件中的变量

为单个远程主机指定参数

[test1]
192.168.100.10   http_port=80  
192.168.100.20   http_port=303 

为一个组指定变量

[test1]
192.168.100.10   
192.168.100.10
[test1:vars]
http_port=80

Ansible的脚本Playbook

Playbook的文件格式YAML

Ansible Playbook 使用 YAML 格式编写,YAML(YAML Ain’t Markup Language)是一种轻量级的数据序列化格式,易于阅读和编写。下面是一个 YAML 文件的示例:

---

- hosts: webservers
  become: yes
  tasks:

  - name: Install Apache2
    apt:
     name: apache2
     state: latest

  - name: Start Apache2
    service:
     name: apache2
     state: started
   
# 该示例中,--- 表示 YAML 文件的开始
# hosts 指定了要管理和配置的主机组
# become 表示以管理员身份执行任务。
# tasks 则包含了一组有序的任务列表,其中包括了安装和启动 Apache 两个任务。
# apt 和 service分别表示使用 apt 命令安装 Apache 和启动 Apache 服务

需要注意的是,YAML 文件的缩进与格式非常重要,它们决定了文件的语义和结构。

以下是一些常见的 YAML 语法:

  1. 注释 :YAML 文件支持注释注释使用 # 标记

  2. 键值对:在 YAML 文件中,键值对使用冒号 : 分隔,键和值之间使用空格进行缩进。例如:

key: value
  1. 数组list
- item1
- item2
- item3

数组中的每个元素都是以-开始的

  1. 需要注意的地方

变量里有冒号(:)时要加引号

foo: "ansibleLinuxdocker:i like"

变量以 {开头时要加引号

foo: "{{chenshiren}}"

ansible-playbook的命令

如何执行Ansible脚本Playbook呢?Ansible提供了一个单独的命令:ansible-playbook

常见的ansible-playbook的使用方法如下:

执行Playbook的基本方法

ansible-playbook playbook.yml
# playbook.yml 是要执行的 Ansible Playbook 文件名

使用--syntax-check参数检测脚本的语法

ansible-playbook  playbook.yml --syntax-check

使用--verbose查看输出的细节

ansible-playbook playbook.yml --verbose

使用 --list-hosts 查看该脚本影响哪些主机(host)

ansible-playbook playbook.yml --list-hosts

并行执行脚本

ansible-playbook playbook.yml -f 10

Playbook的基本语法

如最上面展示的yaml脚本为例

---

- hosts: webservers
  become: yes
  tasks:

  - name: Install Apache2
    apt:
     name: apache2
     state: latest

  - name: Start Apache2
    service:
     name: apache2
     state: started

可以分为两部分

  1. 在什么机器上面以什么身份执行
- hosts: webservers
  become: yes
key含义
hosts为主机的IP,或者主机组名,或者关键字all
remote_user在远程以哪个用户身份执行
become切换成其他用户身份执行,值为yes或者no
become_method与become一起用,指可以为’sudo’/'su’等
become_user与become_user 一起用,可以是root或者其他用户名
  1. 执行的任务都有什么
  - name: Install Apache2
    apt:
     name: apache2
     state: latest

  - name: Start Apache2
    service:
     name: apache2
     state: started
  • 任务(task)是从上至下顺序执行的,如果中间发生错误,那么整个Playbook会中止

  • 每一个任务都是对模块的一次调用,只是使用不同的参数和变量而已

  • 每个任务最好有name属性,这是供人读的,没有实际的操作。然后会在命令行里面输出,提示用户执行情况

任务的基本语法

 tasks:
  - name: Install Apache2
    apt:
     name: apache2
     state: latest

其中name是可选的,也可以简写成下面的样子

 tasks:
  - apt:
     name: apache2
     state: latest

写了name的任务在Playbook执行时,会显示对应的名字,信息更友好、丰富。

如下

TASK [install http]   *********************************************************************
changed: [192.168.200.20]
changed: [192.168.200.30]

没有写name的任务在执行Playbook时,直接显示对应的任务语法,如果调用模块很多很容易就不知道运行到哪里了

TASK [yum: name=httpd state=present] *********************************************************************
changed: [192.168.200.20]
changed: [192.168.200.30]

参数的不同写法

法1

 tasks:
  - name: Install Apache2
    apt: name=apache2 state=latest

法2

当需要传入的参数过长时,可以分隔到多行

  tasks:
  - name: 设置文件权限  
    copy: src=/home/csq.txt  dest=/tmp/csq.txt
           owner=csq  group=csq  mode=0644

法3
或者使用YML的字段格式传入参数

 tasks:
  - name: Install Apache2
    apt:
     name: apache2
     state: latest

任务执行的状态

  • 如果本次执行了,那么Action会得到返回值changed

  • 如果不需要执行,那么Action会得到返回值ok

# 以这个文件内容为例执行两次看看结果
- hosts: server
  tasks:
  - name: 复制文件
    copy:
     src: /etc/sudoers
     dest: /opt/

执行第一次

image-20230601202326290

执行第二次

image-20230601202355665

由于第一次执行时,已经复制过文件,因此Ansible会根据目标文件的状态避免重复执行复制

变量

在Playbook中用户自定义的变量

用户可以在 Playbook中,通过vars关键字自定义变量,使用时用{{}}引用起来即可

例如

[root@localhost ceshi]# vim ansible.yaml 
- hosts: server
  vars:
   stdin: "hello,word"
  tasks:
  - name: 输出hello,word
    command: echo {{stdin}}

把变量放在单独的文件中

在 Ansible 中,当变量较多或需要在多个 Playbook 中重用时,可以将变量放置在一个单独的文件中,然后在 Playbook 中通过 var_files 关键字来引用这个文件中定义的变量。 例如,我们可以在 vars.yml 文件中定义一些变量

例如,我们可以在 vars.yml 文件中定义一些变量:

[root@localhost ceshi]# mkdir vars
[root@localhost ceshi]# vim vars/vars.yaml 
#定义数据库的连接信息
files: /home/csq/csq.txt

然后,在 Playbook 中使用 var_files 来引用这些变量:

[root@localhost ceshi]# vim ansible.yaml 
---

- hosts: server
  vars_files:
   - vars/vars.yaml
  tasks:
  - name: 创建两个文件 /home/csq/csq.txt /home/zhw/zhw.txt
    file:
     path: "{{files}}"
     state: touch
     mode: 0600

文件模板中使用的变量

在 Ansible 中,template 模块用于将本地的 Jinja2 模板文件渲染后,将结果写入到远程主机上的某个文件中。在 template 模块中,可以使用多种方式来传递模板文件中需要使用的变量。下面是几种常见的方式:

使用 vars 参数来传递变量

可以在 template 模块中使用 vars 参数来传递变量。

例如:

[root@localhost ceshi]# vim ansible.yaml 
---

- hosts: test1
  vars:
   defined_name: "Hello My name is Chenshiren"
   ansible_hostname: chenshiren
   ansible_default_ipv4: 192.168.200.10
  remote_user: root
  tasks:
  - name: 安装http
    yum:
     name: httpd
     state: present
  - name: 写入配置文件http.conf
    template:
     src: templates/httpd.conf.j2
     dest: /etc/httpd/conf/httpd.conf
  - name: 写入html文件
    template:
     src: templates/index.html.j2
     dest: /var/www/html/index.html
  - name: 重启http服务 设置开机自启
    service:
     name: httpd
     state: restarted
     enabled: yes
# 执行过程
[root@localhost ceshi]# ansible-playbook ansible.yaml 

PLAY [test1] ****************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [192.168.200.30]

TASK [安装http] ***************************************************************************
ok: [192.168.200.30]

TASK [写入配置文件http.conf] ******************************************************************
ok: [192.168.200.30]

TASK [写入html文件] *************************************************************************
changed: [192.168.200.30]

TASK [重启http服务] *************************************************************************
changed: [192.168.200.30]

PLAY RECAP ******************************************************************************
192.168.200.30             : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
# 执行完成以后关闭一下防火墙

image-20230602125845774

index.html.j2文件内容如下

[root@localhost ceshi]# cat templates/index.html.j2 
<html>
<title>Demo</title>
<body>
<div class="block" style="hight:99%;">
  <div class="centered">
    <h1>#46 Demo {{defined_name}} <h1>
      <p>Served by {{ansible_hostname}} ({{ ansible_default_ipv4}}).</p>
  </div>
</div>
</body>
</html>
# 你只需要知道 {{}} 是用来引用变量的就行了

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

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

相关文章

华为认证 | HCIA-Datacom 考试大纲

今天给大家说点基础的&#xff0c;很多人对华为认证考试有了一定了解后&#xff0c;想要进一步了解具体的考试内容。 这篇先说HCIA-Datacom的具体考试大纲~ 01 华为HCIA-Datacom认证考试 02 华为HCIA-Datacom考试内容 HCIA-Datacom V1.0考试覆盖数通基础知识&#xff0c;包括&…

java 中的动态代理实现

1. 什么是代理模式 代理模式是常见的设计模式之一&#xff0c;顾名思义&#xff0c;代理模式就是代理对象具备真实对象的功能&#xff0c;并代替真实对象完成相应操作&#xff0c;并能够在操作执行的前后&#xff0c;对操作进行增强处理。&#xff08;为真实对象提供代理&…

表格软件有哪些?热门表格软件推荐

作为报表开发人员&#xff0c;我们经常需要使用各种表格软件来处理数据并生成清晰、易读的报表。在市面上&#xff0c;有许多不同类型的表格软件可供选择。下面我将列举7款热门的表格软件&#xff0c;并详细介绍其中一款优秀的软件—VeryReport。 编辑搜图 请点击输入图片描述…

Qt6.5.1+WebRTC学习笔记(九)运行官方示例(win10+vs2019)

前言 webrtc源码目录下&#xff0c;有个examples目录&#xff0c;里面放置着官方的示例&#xff0c;其有peerconnection示例。 一、问题 peerconnection示例分客户端和服务端&#xff0c;以win系统为例&#xff0c;编译后会在输出目录生成两个可执行文件 服务端程序可以正常…

【基于GD32E230的定时器级联M/T法电机测速】

前言 在有感电机控制中&#xff0c;获取电机转速是非常重要的步骤&#xff0c;转速获取越准确&#xff0c;控制电机时越方便&#xff0c;抛开霍尔不谈&#xff0c;这里讨论电机编码器。 目前常见的电机编码器按种类分为绝对值编码器和增量编码器&#xff0c;绝对值编码器相对…

厚积薄发,AR光学方案商光舟半导体于AWE 2023首次公开亮相

青亭网6月2日报道&#xff0c;国内AR光波导技术厂商“光舟半导体”&#xff08;深圳市光舟半导体技术有限公司&#xff09;在AWE 2023首次公开亮相&#xff0c;并展示了最新的AR光波导模组、光机/光引擎、汽车HUD三大产品。 光舟半导体成立于2020年1月&#xff0c;公司由AR光学…

5.8 几个常见JavaScript图表库

几个常见JavaScript图表库 目录1、 Chart.js2、 Chartist.js3、 Highcharts.js4、 D3.js5、 Plotly.js6、 ECharts.js7、 Google Charts8、Other Charts 目录 1、 Chart.js 官方网站&#xff1a; www.chartjs.org Chart.js 是一个基于 HTML5 Canvas 的 JavaScript 图表库&…

Day59【单调栈】503.下一个更大元素II、42.接雨水

503.下一个更大元素II 力扣题目链接/文章讲解 视频讲解 本题和739.每日温度很相似&#xff0c;只不过是循环数组 一种处理循环的方式是&#xff0c;直接把两个数组拼接在一起&#xff0c;然后使用单调栈求下一个最大值 class Solution { public:vector<int> nextGre…

【JUC基础】13. 线程池(二)

目录 1、前言 2、Java实现线程池 2.1、Executors框架 2.2、newFixedThreadPool 2.3、newCachedThreadPool 2.4、newSingleThreadExecutor 2.5、newScheduledThreadPool 2.5.1、scheduleAtFixedRate 2.5.2、scheduleWithFixedDelay 2.5.3、异常中断 3、execute()和sub…

大数据挖掘企业服务平台(TipDM大数据挖掘建模平台)-快速构建数据挖掘工程

“TipDM大数据挖掘建模平台”&#xff08;以下简称平台&#xff09;是由广东泰迪智能科技股份有限公司自主研发&#xff0c;基于Python引擎的数据挖掘建模平台。使用平台配置的开箱即用的算法组件&#xff0c;用户可在没有编程基础的情况下&#xff0c;通过拖拽的方式进行操作&…

蓝牙规范系列--经典蓝牙概述(第一篇)

一、目的 从本篇开始介绍经典蓝牙的基础知识&#xff0c;内容较多故会分成多篇进行介绍。 经典蓝牙&#xff08;BR/EBR&#xff09;射频&#xff08;物理层PHY&#xff09;工作在免授权的2.4G ISM频段&#xff08;2400 - 2483.5 MHz&#xff09;&#xff0c;使用跳频技术来对抗…

基于java的班级管理系统的设计与实现

一:需求分析 1.功能需求 1).能够实现对班级学生基本资料的录入,包括学生的学号,姓名,性别,所学专业,家庭住址以及出生年月等。 2).能够实现对学生基本资料的修改。 3).根据学号对学生资料进行查询。 4).能够删除某些学生的资料。 二:总体设计 本班级管理系统共有6…

静态Web服务器搭建

文章目录 一&#xff0c;安装Apache软件&#xff08;一&#xff09;Apache软件安装&#xff08;二&#xff09;Apache软件管理&#xff08;三&#xff09;Apache软件基本设置&#xff08;四&#xff09;测试Apache服务器 二&#xff0c;Apache服务器的配置文件&#xff08;一&a…

【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体 const

文章目录 1. 定义和使用2. 结构体数组3. 结构体指针4. 结构体嵌套结构体5. 结构体做函数参数6. 结构体 const 1. 定义和使用 结构体属于用户自定义的数据类型&#xff0c;允许用户存储不同的数据类型。 struct 结构体 {结构体成员列表}; 通过结构体创建变量的方法有三种&…

2023,智能硬件的AIGC“又一春”

​ 文|智能相对论 作者|佘凯文 消费电子产品风光不再&#xff0c;特别是自去年以来&#xff0c;电子消费市场经历了一整年的寒潮袭击&#xff0c;智能手机等产品达到10年消费谷底&#xff0c;PC出货量整体下降16%&#xff0c;不仅如此&#xff0c;包括平板、可穿戴设备也一改…

URP Shader FrameBuffer Fetch Mali Crash

1&#xff09;URP Shader FrameBuffer Fetch Mali Crash ​2&#xff09;Unity模型Lightmap UV相关的疑问 3&#xff09;动画上下半身融合问题 4&#xff09;AnimatorControllerPlayable.PrepareFrame函数在什么情况下调用 这是第338篇UWA技术知识分享的推送&#xff0c;精选了…

如何将 HTML 字符串转换成 DOM 对象:用 DOMParser

如何将 HTML 字符串转换成 DOM 对象&#xff1a;用 DOMParser 一、问题描述 有的时候我们需要处理一些 HTML 字符串&#xff0c;比如我需要从下方 HTML 字符串中提取每个 <a> 标签的内容和属性。 <pre><a href"cc1245.jpg">cc1245.jpg</a>…

将ipa文件上架苹果应用商店详细教程

使用windows电脑打包好uniapp的ios应用之后&#xff0c;还有一个麻烦事&#xff0c;就是需要将这个打包好的ipa格式的文件&#xff0c;上架到苹果的应用商店。用户才能安装。 而苹果提供的上传工具&#xff0c;比如xcode或transports&#xff0c;只能安装在mac电脑&#xff0c…

国产AIGC大模型汇总

“ 随着ChatGPT和GPT-4的出现&#xff0c;直接引爆了全球的AIGC大模型市场&#xff01;为了赶上这一波热潮&#xff0c;国内的大厂和创业公司也纷纷内卷起来&#xff0c;相继发布了自己的大模型。但是到目前为止&#xff0c;没有一个大模型能与ChatGPT相提并论&#xff0c;更比…

【算法系列之二叉树III】leetcode236. 二叉树的最近公共祖先

617.合并二叉树 力扣题目链接 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&…