ansible的主机清单和Playbook(剧本)
创始人
2024-03-18 22:31:19
0次

一、inventory---主机清单

1.1 支持对主机分组,每个组内可以定义多个主机,可以把一台主机分别放在两个组内。

把.10到.100的主机全部放在这个组里面(/etc/ansible/hosts:配置文件)

有的主机不是以ip地址放在主机清单里的,也可以用字母作为范围

如果远程的主机ssh的端口变了需要在ip后面加上端口

1.2 inventory(主机清单)可添加的一些变量

1.3修改主机清单上的小实验

 删除.200主机的秘钥对信息

 这样在.100主机ssh连接.200这台主机时就需要密码验证

 并且修改配置文件把.200主机的ssh端口号改成4499 

 

 重启ssh服务(关闭防火墙!!!)

 到.100这台主机上来修改/ect/ansible/hosts文件,然后保存退出

 

 设置完后使用ansible运行命令依旧可以查询出来网卡信息说明配置没有问题

1.4如果整个组都没有设置密钥对,我们可以对整个组设置一个变量 

我们首先删除.250主机上的密钥对

在到.100主机上配置主机清单

 使用ansible命令是可以查询出webservers组的网卡信息的

 1.5如果你想影响配置文件中的所有组的配置可以

vim /ect/ansible/hosts

[all:vars]

ansible_port=22

1.6组的嵌套

问题:有的时候想单独调用一个组去配置,有的时候需要把两个组同时调用配置

解决方法:

重新定义一个组名

【webs:children】

  nginx

  apache

vim /ect/ansible/hosts   在100主机上修改配置文件

 用ansible命令是可以查看到所有组的网卡信息的

二、Playbooks---剧本

2.1 playbooks的组成

  1. 1.Tasks:任务,可以ansible的模板将多个操作组织成一个playbooks中运行
  2. Variables:变量
  3. Templates:模板
  4. Handlers:处理器:当changed状态条件满足时,(notify)触发执行的操作
  5. Roles:角色,可以多角色复用

2.2Playbooks剧本的格式

剧本的文件类型是yaml格式

---                            ###yaml文件的开始

- name :first play    ## 一个play的名称

  gather_facts:false    ##设置facts的信息收集,如果选择否,将不可以引用facts收集的信息的值

(setup就是用facts收集各个主机的信息的)

 hosts:webservers            ###指定在那个主机组去执行任务,要是多个主机组,用冒号分隔

 remote_user:root                ##指定以什么身份去执行任务

tasks:                                ##定义任务列表,任务列表中的各个任务按次序在指定主机组上执行

- name:test connection     ## -代表一个列表每个任务都用-标识出来,name指定任务名称

   ping:                                ## 指定使用的模块名字,如果后面需要使用命令用引号括起来

##有很多模块后面是需要参数的,需要用键值对的方式来表示

  例如:开启防火墙  name 指定服务名   state指定服务的状态

 - name:disable selinux

   command: “/sbin/setenforce 0”            ##command模块和shell模块无需使用键值对的格式

   ignore errors:True                            ##如果执行命令的返回值不为0,就会报错,tasks停止,     可以使用ignore errors:True忽略失败的任务,因为setenforce如果本来就是永久关闭的话,在       执行setenforce 0  返回值就是1 

- name : install httpd                      ##设置一个任务名称为install httpd

  yum: name=htppd state=latest   ##使用yum模块 来下载httpd服务   yum模块的参数用键值对表示

- name:install configuration file for httpd                                    

  copy:src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf     ##需要一个准备好的httpd.conf 文件

  notify: "restart httpd"                                   ##notify:相当于一个触发器,如果上面做出改变,那就回触发对应名称的handlers操作(handlers操作在下面写的)双引号中的就handlers中定义的名称

- name: start httpd service

  service: enabled=true name=httpd state=started

handlers:     ##就是handlers中定义的就是任务,此处handlers中的任务使用的是service模块

- name : restart httpd

  service:name=httpd state=restarted

ansible在执行完某个任务之后并不会立即执行对应的handlers,他会在执行完所有任务之后在去执行handlers,这样的好处是可以多次触发notify,但最后只执行一次对应的handler,从而避免多次的重启                                                                                           

最后运行playbooks 

ansible-playbook test1.yaml     ##test1.yaml  剧本名称

三、编写palybook

编写yaml文件

[root@localhost ansible]# mkdir playbook                ##创建一个文件夹放剧本
[root@localhost ansible]# cd playbook/
[root@localhost playbook]# vim demo1.yaml           ##编写剧本

 

ansible-playbook demo1.yaml             ##运行yaml文件

 小实验二:

    环境.200这台主机把vim/etc/selinux/conifg 的核心防护状态调整为disabled,最后getenforce在检查一遍

 在.100主机上编写playbook的的vim demo2.yaml文件,ansibles-playbook demo2.yaml 执行一遍

 

 把ignore_errors注释删掉之后

 他是忽略掉的

 小实验:写一个安装apache的palybook的剧本

只装了一台.200

 

 如果/etc/httpd/conf/httpd.conf文件有变化,就会触发notify

 执行命令后会有这个

 小实验:安装nginx

首先准备好nginx.repo到/opt目录因为nginx 的nginx.conf配置文件不要改,只有一个default.conf需要改

 执行文件

 

四、 运行playbook时的参数

-k:用来交互输入ssh密码

-K:用来交互输入sudo密码,进行用户的提权

-u:指定用户来执行

ansible-playbook test1.yaml --syntax=check ##用来检查yaml文件的语法是否正确

                                             --list-task ##检查tasks任务

                                             --list-hosts ##检查生效的主机

                                             --start-at-task=‘install httpd’ 指定从某个task开始运行

yaml文件故意写错

 他会提醒你

 

五、定义和引用变量

vars 定义一个变量 filename:abc.txt

下面在去创建

 

 去101主机查看opt

 

5.1遍历定义的变量

 遍历定义的变量(二)

效果也是一样的 

  遍历定义的变量(三)

把变量全部都装到一个中括号里面

 

 一个列表中有两个变量,可以用item.变量名去调用

 也可以这样定义变量

 两个列表都输出

 两个列表整体输出

 合并输出,两个列表组合

 六、条件判断

当when指令的值为true时,则该任务执行,否则不执行

也可以   != 不等于    <= 小于等于  >=下雨等于

when指令的条件里是可以不用双引号的

 inventory_hostname 主机清单里的主机名 也可以等于ip地址也可以是主机名

 七、Templates模块

创建了一个Templates模板,这个模板文件是把nginx(看你装什么应用,用这个应用)的配置文件常用的一些配置(监听端口,主机名,网页文件等)做了变量,复制生成一个**.j2的文件(模板),然后yaml文件(编写好的剧本)在把带有变量的模板文件传到远程主机作为主机的应用配置文件,我们在主机清单,把变量的值直接定义到里面。以后改一些端口之类的就不用去远程主机的配置文件里面了,直接在/ect/ansible/hosts下面修改即可。

##把nginx的配置文件里面的常改的配置改成变量,web_port ,nginx_servername,nginx_wwwroot

 把修改好的配置文件复制成后缀名为.j2模板,然后修改管理主机的主机清单,把常用的变量的定值写到里面(就是主机组里面的webservers和dbservers)

 写的yaml文件

其中主机清单上的目录可以用item去调用可以少写一点代码

 其中when是和file是一个级别的需要在一行

 

总结

playbook的列表和单个值

 引用取值列表中某个对象的值

 playbook的循环

 

 

 

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...