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的循环

 

 

 

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...