[内容] HTML 的常用结构和常用元素

内容一:HTML 常用结构元素

1.1 HTML 常用结构要素

1) <!DOCTYPE html>

文档是 HTML5 的声明


2) <html>......</html>

HTML 的根


3) <head>......</head>

包含 meta 和 title


4) <title>......</title>

声明文档的标题


5) <body>......</body>

声明文档的可见内容


6) <br/>

声明换行


7) <div>......</div>

声明一个空间


8) <h1>......</h1>

声明第一种标题


9) <h2>......</h2>

声明第二种标题


10) <h3>......</h3>

声明第三种标题

1.2 HTML 常用结构案例

<!DOCTYPE html>
<!- 作者:Mingyu Zhu -> 
<!- 名称:Mingyu Zhu website ->

<html>

 <head>
  <meta charste="utf-8">
  <title>朱明宇 - Zhu Mingyu</title>
 </head>

 <body>
  <div style="position:absolute; width:100%; height:100%; z-index:-1; left:0; top:0;"> 
   <img src="dimfigure.JPG" height="100%" width="100%" style="position:absolute;left:0; top:0;"> 
  </div>

  <div style="width:300px;height:50px;float:left"> 
   <form action="http://www.google.com/search" method="get"> 
    <input type="text" name="q" size="20" maxlength="255" value="" /> 
    <input type="submit" name="btnG" value="Google" /> 
   </form> 
  </div> 

  <div style="width:300px;height:50px;float:left"> 
   <form action="http://www.baidu.com/s"> 
    <input type="text" name="wd" id="kw"/> 
    <input type="submit" value="Baidu" /> 
   </form> 
  </div> 

  <div style="left: 600px; position: absolute; top: 300px;font-size:15px;">“When I don't need to do anything, please don't let me do anything. Let me immerse myself in my own thoughts. It's like merging with the profound peace in the vast mountains.”</div>

  <a href="http://eternalcenter.com" style="left: 8px; position: absolute; top: 185px;font-size:20px;color:black">Eternal Center(eternalcenter.com)</a>
 </body>

<html/> 

内容二:HTML 常用内容元素

2.1 HTML 文本元素

2.1.1 HTML 文本元素的格式
<p>......</p>

声明一个段落

2.1.2 HTML 文本元素的替换格式
1) <b>......</b>

声明文字加粗


2) <i>......</i>

声明文字倾斜


3) <u>......</u>

声明文字有下划线


4) <s>......</s>

声明文字有删除线


5) <sup>......</sup>

声明文字有上标


6) <sub>......</sub>

声明文字有下标


7) <big>......</big>

声明文字放大


8) <small>......</small>

声明文字缩小

2.2 HTML 链接元素

2.2.1 HTML 链接元素的格式
<a href="<website>"><link description></a>
2.2.2 HTML 链接元素的案例
<a href="eternalcenter.com">Eternal Center</a,target="_blank">

(补充:这里以网址是 eternalcenter.com,介绍是 Eternal Center,新打开一个页面为例)

2.3 HTML 列表元素

2.3.1 HTML 有序列表元素
2.3.1.1 HTML 有序列表元素的格式
1) <ol>......</ol>

声明有序列表


2) <li>......</li>

声明有序列表里的行


3) <ol>......</ol>

里只能有

<li>......</li>
2.3.1.2 有序列表排列方式的属性声明
2.3.1.2.1 有序列表排列方式的属性值名
type
2.3.1.2.2 有序列表排列方式的可选属性值

1) 1 声明按数字排序 (1 也是有序列表的默认值)
2) A 声明按大写英文字母排序
3) a 声明按小谢英文字母排序
4) I 声明按大写罗马字母排序
5) i 声明按小写罗马字母排序

2.3.1.3 有序列表排列方式的使用案例
2.3.1.3.1 数字有序列表排列方式的使用案例
<h4>number list case</h4>
<ol>
 <li>eternalcenter.com</li>
 <li>eternalcentre.com</li>
 <li>ec-x.com</li>
 <li>yhzx-x.com</li>
</ol>   
2.3.1.3.2 字母有序列表排列方式的使用案例
<h4>alphabet case</h4>
<ol type="A">
 <li>eternalcenter.com</li>
 <li>eternalcentre.com</li>
 <li>ec-x.com</li>
 <li>yhzx-x.com</li>
</ol>  
2.3.2 HTML 无序列表元素
2.3.2.1 HTML 无序列表元素的格式
1) <ol>......</ol>

声明无序列表


2) <li>......</li>

声明无序列表里的行


3) <ol>......</ol>

里只能有

<li>......</li>
2.3.2.2 无序列表排列方式的属性声明
2.3.2.2.1 无序列表排列方式的属性值名
type
2.3.2.2.2 无序列表排列方式的可选属性值
1) disc

声明实心原点(disc 也是无序列表的默认值)


2) circle

声明空心原点


3) square

声明实心方块


4) none

声明无标识

2.3.2.3 有序列表排列方式的使用案例
2.3.2.3.1 有序空心原点列表排列方式的使用案例
<h4>circle list case</h4>
<ul style="list-style-type:circle">
 <li>eternalcenter.com</li>
 <li>eternalcentre.com</li>
 <li>ec-x.com</li>
 <li>yhzx-x.com</li>
</ul>
2.3.2.3.2 有序实心方块列表排列方式的使用案例
<h4>square list case</h4>
<ul style="list-style-type:square">
 <li>eternalcenter.com</li>
 <li>eternalcentre.com</li>
 <li>ec-x.com</li>
 <li>yhzx-x.com</li>
</ul>

2.4 HTML 在列表中再添加列表

2.4.1 HTML 在列表中再添加列表的格式
<li>......</li>

元素里再添加

<li>......</li>
2.4.2 HTML 在列表中再添加列表的案例
<ul>
 <li>eternalcenter.com</li>
  <li>abbreviation
    <ul>
     <li>ec-x.com</li>
     <li>yhzx-x.com</li>
    </ul>
   </li>
  <li>eternalcentre.com</li>
</ul>

2.5 HTML 表格元素

2.5.1 HTML 表格常用元素列表
1) <table>......</table>
2) <tr>......</tr>
3) <td>......</td>
2.5.2 HTML 表格常用元素
2.5.2.1 <table>……<table> 元素
2.5.2.1.1 <table>……<table> 元素的作用

用于声明表格

2.5.2.1.2 <table>……<table> 元素的格式
<table>......</table>
2.5.2.1.3 <table>……<table> 元素的常用属性
1) width

声明表格的宽度


2) height

声明表格的高度


3) align

声明表格的对齐方式,有三个参数:

left center right

4) border

声明表格边框的宽度


5) cellpadding

声明表格内容和边框之间的距离


6) bgcolor

声明表格的背景颜色

2.5.2.2 <tr>……<tr> 元素
2.5.2.2.1 <tr>……<tr> 元素的作用

用于声明行,每有一行就有一组

2.5.2.2.2 <tr>……<tr> 元素的格式
<tr>......</tr>
2.5.2.2.3 <tr>……<tr> 元素的常用属性
1) align

声明表格水平向的对齐方式,有三个参数

left center right

2) valign

声明垂直向的对其方式,有三个参数

top middle bottom
2.5.2.3 <td>……<td> 元素
2.5.2.3.1 <td>……<td> 元素的作用

用于声明列,每有一列就有一组

2.5.2.3.2 <td>……<td> 元素的格式
 <td>......</td>
2.5.2.3.3 <td>……<td> 元素的常用属性
1) align

声明表格水平向的对齐方式,有三个参数:

left center right

2) valign

声明垂直向的对齐方式,有三个参数:

top middle bottom

3) width

声明表格的宽度


4) height

声明表格的高度


5) colspan

声明单元格的横向快列


6) rowspan

声明单元格的众向跨行

2.5.3 HTML 表格元素的案例
2.5.3.1 HTML 表格元素案例一:标准表格
<table border="1">
 <tr>
  <td>first row, first column</td>
  <td>first row, second column</td>
 </tr>
 <tr>
  <td>second row, first column</td>
  <td>second row, second column</td>
 </tr>
</table>
2.5.3.2 HTML 表格元素案例二:横向合并的表格
<body>
 <h4>cell spanning two columns case</h4>
 <table border="1">
  <tr>
   <td>Website</td>
   <td colspan="2">url</td>
  </tr>
  <tr>
   <td>Eternal Center</td>
   <td>eternalcenter.com</td>
   <td>eternalcentre.com</td>
  </tr>
 </table>
2.5.3.3 HTML 表格元素案例三:纵向合并的表格
 <h4>cell crowding across two lines case</h4>
 <table border="1">
  <tr>
   <td>Website</td>
   <td>Eternal Center</td>
  </tr>
  <tr>
   <td rowspan="2">url</td>
   <td>eternalcenter.com</td>
  </tr>
  <tr>
   <td>eternalcentre.com</td>
  </tr>
 </table>
</body>

2.6 HTML 图片元素

2.6.1 HTML 有边框图片的链接案例
<a href="http://www.eternalcenter.com">
<img  border="10" src="eternalcenter.gif" alt="HTML Eternal Center" width="32" height="32">
</a>

(补充:这里以网址是 www.eternalcenter.com,介绍是 HTML Eternal Center,图片是 eternalcenter.gif,宽度是 32,高度是 32 的链接为例)

2.6.2 HTML 无边框图片链接的案例
<a href="http://www.baidu.com">
<img border="0" src="eternalcenter.gif" alt="HTML Eternal Center" width="32" height="32">
</a>

(补充:这里以网址是 www.eternalcenter.com,介绍是 HTML Eternal Center,图片是 eternalcenter.gif,宽度是 32,高度是 32 的链接为例)

2.6.3 HTML 背景图片的案例
<img src="space.JPG" height="100%" width="100%" style="position:absolute;left:0; top:0;"> 

(补充:这里以设置 space.JPG 作为背景图片)

2.7 HTML 表单元素

2.7.1 HTML 表单元素的作用

1) 接收用户的数据
2) 提交给服务器

2.7.2 HTML 表单元素的结构
2.7.2.1 HTML 表单元素结构的分类
1) <form>......<form>

2) 表单控件

2.7.2.2 HTML 表单元素结构的分类说明
2.7.2.2.1 <form>……<form> 元素的常用属性
1) action

提交给服务器的处理程序的地址


2) method

数据的提交方式,有 get 和 post 两个参数


3) enctype

指定加密方式


4) name

表单的名称

2.7.2.2.2 表单控件的种类

1) 文本域
2) 密码域
3) 选择框(分为单选框和复选框)
4) 按钮
5) 隐藏域和文件选择框

2.7.3 HTML 表单元素的表单控件
2.7.3.1 HTML 表单元素的文本域
2.7.3.1.1 HTML 表单元素的文本域的作用

用于键入字母和数字

2.7.3.1.2 HTML 表单元素的文本域的格式
<input type="text">
2.7.3.1.3 HTML 表单元素的文本域的常用属性
1) name

名称


2) value


3) maxlength

最大输入长度


4) readonly

只读


5) placeholder

提示占位符

2.7.3.1.4 HTML 表单元素的文本域的案例
<form>
 First name: <input type="text" name="firstname"><br>
 Last name: <input type="text" name="lastname">
</form>
2.7.3.2 HTML 表单元素的密码域
2.7.3.2.1 HTML 表单元素的密码域的作用

用于输入密码

2.7.3.2.2 HTML 表单元素的密码域的格式
<input type="password">
2.7.3.2.3 HTML 表单元素的密码域的常用属性
1) name

名称


2) value


3) maxlength

最大输入长度


4) readonly

只读


5) placeholder

提示占位符

2.7.3.3 HTML 表单元素的选择框
2.7.3.3.1 HTML 表单元素的选择框的作用

用于选择

2.7.3.3.2 HTML 表单元素的选择框的常用属性
1) name

名称


2) value


3) checked

预选中的选项,无值


4) type

选择框的模式,有两个参数单选框和多选框两个参数:

radio checkbox
2.7.3.4 HTML 表单元素的选择框的案例
2.7.3.4.1 HTML 表单元素的选择框的案例一:单选框案例
<form>
 <input type="radio" name="vehicle" value="eternalcenter">I click eternalcenter<br>
 <input type="radio" name="vehicle" value="eternalcentre">I click eternalcentre
</form>
2.7.3.4.2 HTML 表单元素的选择框的案例二:多选框案例
<form>
 <input type="checkbox" name="vehicle" value="eternalcenter">I click eternalcenter<br>
 <input type="checkbox" name="vehicle" value="eternalcentre">I click eternalcentre
</form>
2.7.3.5 HTML 表单元素的按钮
2.7.3.5.1 HTML 表单元素的按钮的案例一:普通的按钮
<form action="">
 <input type="button" value="Hello World!">
</form>

(补充:这里以设置一个值为 Hello World 的按钮为例)

2.7.3.5.2 HTML 表单元素的按钮的案例二:提交的按钮
<form name="input" action="html_form_action.php" method="get">
 Username: <input type="text" name="user">
 <input type="submit" value="Submit">
</form>

(补充:这里以设置一个输入用户名的框和提交按钮的页面为例)

2.7.3.5.3 HTML 表单元素的按钮的案例三:重置的按钮
<form name="input" action="html_form_action.php" method="get">
 Username: <input type="text" name="user">
 <input type="submit" value="Submit">
 <input type="reset" value="reset">
</form>

(补充:这里以设置一个输入用户名的框、提交按钮、重置按钮页面为例)

2.7.3.6 HTML 表单元素的隐藏域和文件选择框
2.7.3.6.1 HTML 表单元素的隐藏域
2.7.3.6.1.1 HTML 表单元素的隐藏域的作用

提交给服务器的数据无法被用户看到

2.7.3.6.1.2 HTML 表单元素的隐藏域的格式
<input type=”hidden”>
2.7.3.6.1.3 HTML 表单元素的隐藏域的常用属性

1) name

名称


2) value

2.7.3.6.2 HTML 表单元素的文件选择框
2.7.3.6.2.1 HTML 表单元素的文件选择框的作用

点击的同时提交文件

2.7.3.6.2.2 HTML 表单元素的文件选择框的格式
<input type=”file”>
2.7.3.6.2.3 HTML 表单元素的文件选择框的常用属性
name

名称

我们的未来

蔚蓝的天空
沐浴着圣洁的阳光
它依旧在作着无忧无虑的梦

如今的大地
已在寂静之中
开始了隐秘却剧烈的翻滚

那些温柔又神圣的祈祷
还未传播到需要的地方
便开始消失匿迹

那些理性又严谨的理想
还未开始深刻的探讨
便被尘封于盲从的大潮

生命的意义
应该如何用本来就矛盾的思想去诠释?
灵魂的价值
又该如何用独一无二的人生去描述?

在纯白的、洁白的、净白的憧憬之后
会创造和邂逅出怎样的未来
在迷惑的、困惑的、迷茫的挣扎之后
是否能在虚空之中真正开始独立思考

那些让人类感到混沌不堪却又欲罢不能的说法
该如何回归到它该有的澄清?
那些充满自我牺牲与博爱却又容易被误解的传奇
又该如何依靠历史的密码去佐证?

在鲜红的、血红的、艳红的青春热情之后
会创造和邂逅出怎样的未来
在努力的、拼命的、穷尽一切的尝试之后
是否能在虚空之中找到真正的路

能够让每一个人都听到公平、包容、理解的歌谣
能够让每一个人都能够公平实现自我价值和自我幸福
能够创造和邂逅出一个属于这个星球上每一个人的未来

[内容] Ansible Playbook 的排错技巧

注意:

在使用 Ansible Playbook 之前,要先安装 Ansible、添加被 Ansible 管理的主机,并且需要 root 权限

正文:

内容一:Ansible Playbook 语法检查的方法

# ansible-playbook --syntax-check <yaml>

或者:

# ansible-playbook --syntax <yaml>

内容二:Ansible Playbook 测试运行的方法

# ansible-playbook -C <yaml>

内容三:Ansible Playbook 显示执行内容的方法

# ansible-playbook <yaml> --list-tasks

[内容] Ansible 执行脚本 Playbook 的结构

注意:

在使用 Ansible Playbook 之前,要先安装 Ansible、添加被 Ansible 管理的主机,并且需要 root 权限

正文:

内容一:Ansible Playbook 的结构介绍

1) Playbook 是 yaml 结构
2) Playbook 默认的执行顺序是从上往下 1 个层级接着 1 个层级地执行,若某个命令报错则不会再执行下面的命令

内容二:Ansible Playbook 的常用目录层级种类

1) vars

变量层


2) tasks

任务层


3) handlers

触发条件层


4) files

文件层


5) template

模板层


6) default

优先级最低层

[步骤] Ansible 所管理的服务器的添加和分组

注意:

在添加被 Ansible 管理的服务器前要先安装 Ansible

正文:

步骤一:规划拓扑

1.1 服务器列表

管理服务器 IP 地址:192.168.100.100
被管理的服务器 1 IP 地址:192.168.100.101
被管理的服务器 2 IP 地址:192.168.100.102
被管理的服务器 3 IP 地址:192.168.100.103
被管理的服务器 4 IP 地址:192.168.100.104
被管理的服务器 3 IP 地址:192.168.100.105
被管理的服务器 4 IP 地址:192.168.100.106
被管理的服务器 4 IP 地址:192.168.100.107

1.2 服务器列表简介

1) 管理人员只用 ssh 到管理服务器就可以通过 Ansible 管理其他所有的被管理服务器
2) 将 192.168.100.101 至 192.168.100.110 视作 web1 至 web10 ,它们属于 web 组
3) 将 192.168.100.111 至 192.168.100.115 视作 db1 至 db5 ,它们属于 db 组
4) 将 192.168.100.107 视作新添加的要被管理的服务器 ,它不属于任何组

步骤二:实现管理服务器登录被管理的服务器

2.1 在管理服务器上添加被管理服务器 IP 地址和服务器名的对应关系

# vim /etc/hosts

添加以下内容:

......
192.168.100.100 ansible
192.168.100.101 web1
192.168.100.102 web2
192.168.100.103 web3
192.168.100.104 db1
192.168.100.105 db2
192.168.100.106 db3

2.2 实现管理服务器登录被管理的服务器

2.2.1 让管理服务器无密钥登录要被管理的服务器
2.2.1.1 在管理服务器上生成 SSH 公钥和私钥
# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:GGqyQU4+u+eNTaWN4SILhm3QN08ZR3jPWC+quRlsP6c root@test1
The key's randomart image is:
+---[RSA 2048]----+
|       ..        |
|      ... .      |
|  o   o..= .     |
| *   . *. + .    |
|. B = = S. .     |
|.o O * *.        |
|o.* . Xo.        |
|.o +.Bo+. .      |
|  ooo =.E+       |
+----[SHA256]-----+
2.2.1.2 将管理服务器生成的 SSH 公钥复制到要被管理的服务器里
# for i in {100..107} ; do ssh-copy-id 192.168.100.$i ; done

2.3 让管理服务器通过密钥登录要被管理的服务器

2.3.1 指定管理服务器的 Ansible 远程用户
# vim /etc/ansible/ansible.cfg

将以下内容:

......
# remote_user = root
......

修改为:

......
remote_user = root
......
2.3.2 在管理服务器上 Ansible 的服务器列表里给指定的服务器添加登录密码
# vim /etc/ansible/hosts

创建以下内容:

[all:vars]
ansible_password=redhat

步骤三:在管理服务器的 Ansible 上添加服务器列表,并将其分组(从列表优先级的角度来思考)

3.1 Ansible 服务器列表分组的不同优先级(从列表优先级的角度来思考)

1) 最高优先级,设置 Ansible 服务器配置文件的全局变量,并在此变量指定的位置的 Ansible 配置文件和服务器列表文件
3) 第二高优先级,在执行 ansible 命令时,当前目录下的 Ansible 配置文件和服务器列表文件
4) 第三高优先级,在使用 ansible 命令用户家目录下的 Ansible 配置文件和服务器列表文件
5) 第四高优先级,在 /etc/ansible 下的 Ansible 配置文件和服务器列表文件

(注意:Ansible 会严格按照优先级,当有更高优先级的服务器列表时,绝对不会执行低等级的服务器列表)

3.2 通过设置 Ansible 服务器配置文件的全局变量的方法来添加服务器列表

3.2.1 在管理服务器上修改系统环境变量文件
# vim /etc/profile

添加以下内容:

......
export ANSIBLE_CONFIG=/opt/ansible.cfg

(补充:这里以 /opt 目录为例)

3.2.2 在管理服务器上让系统环境变量生效
# source /etc/profile
3.2.3 在管理服务器上在环境变量指定的位置创建 Ansible 的配置文件
# cp /etc/ansible/ansible.cfg /opt/
3.2.4 在管理服务器上指定 Ansible 的服务器列表文件
# vim /opt/ansible.cfg

将以下内容:

......
#inventory      = /etc/ansible/hosts
......

修改为:

......
inventory      = hosts
......

3.3 在管理服务器上添加 Ansible 的服务器列表,并将其分组

# vim /opt/hosts

创建以下内容:

192.168.100.107

[web]
web[1:3]

[db]
db1
db2
db3

(补充:这里以文本列表为例)

3.4 通过在当前目录下创建 Ansible 配置文件和服务器列表文件的方法来添加服务器列表

3.4.1 在管理服务器上进入到 1 个任意此用户有权限的目录
# cd /opt

(补充:这里以 /opt 目录为例)

3.4.2 在管理服务器上的当前位置创建 Ansible 的配置文件
# cp /etc/ansible/ansible.cfg /opt/
3.4.3 在管理服务器上指定 Ansible 的服务器列表文件
# vim /opt/ansible.cfg

将以下内容:

......
#inventory      = /etc/ansible/hosts
......

修改为:

......
inventory      = hosts
......
3.4.4 在管理服务器上添加 Ansible 的服务器列表,并将其分组
# vim /opt/hosts

创建以下内容:

192.168.100.107

[web]
web[1:3]

[db]
db1
db2
db3

(补充:这里以文本列表为例)

3.5 通过在家目录下创建 Ansible 配置文件和服务器列表文件的方法来添加服务器列表

3.5.1 在管理服务器上进入到家目录
# cd
3.5.2 在管理服务器上的家目录位置创建 Ansible 的配置文件
# cp /etc/ansible/ansible.cfg ~/
3.5.3 在管理服务器上指定 Ansible 的服务器列表文件
# vim ~/ansible.cfg

将以下内容:

......
#inventory      = /etc/ansible/hosts
......

修改为:

......
[defaults]
inventory      = hosts
......
3.5.4 在管理服务器上添加 Ansible 的服务器列表,并将其分组
# vim ~/hosts

创建以下内容:

192.168.100.107

[web]
web[1:3]

[db]
db1
db2
db3

(补充:这里以文本列表为例)

3.6 通过修改 Ansible 默认配置文件和默认服务器列表文件的方法来添加服务器列表

3.6.1 在管理服务器上指定 Ansible 服务器列表文件
# vim /etc/ansible/ansible.cfg

将以下内容:

......
#inventory      = /etc/ansible/hosts
......

修改为:

......
inventory      = /etc/ansible/hosts
......
3.6.2 在管理服务器上添加 Ansible 的服务器列表,并将其分组
# vim /etc/ansible/hosts

创建以下内容:

192.168.100.107

[web]
web[1:3]

[db]
db1
db2
db3

(补充:这里以文本列表为例)

步骤四:在管理服务器的 Ansible 上添加服务器列表,并将其分组(从列表种类的角度来思考)

4.1 让管理服务器的 Ansible 使用文本格式的服务器列表文件

4.1.1 分组的方式
4.1.1.1 单个服务器
# vim /etc/ansible/hosts

创建以下内容:

192.168.100.107
4.1.1.2 服务器组
# vim /etc/ansible/hosts

创建以下内容:

192.168.100.107

[web]
web1
web2
web3
4.1.1.3 服务器复合组
# vim /etc/ansible/hosts

创建以下内容:

192.168.100.107

[web]
web1
web2
web3

[db]
db1
db2
db3

[webdb:children]
web
db

(补充:在这里的 webdb 组会同时包含 web 和 db 里的服务器)

4.1.2 列表的描述方式介绍
4.1.2.1 连续的数字
192.168.[0:10].[0:255]

(补充:这里以从 192.168.0.0 到 192.168.10.255 为例)

4.1.2.2 连续的字母
web[a:c]

(补充:这里以从 weba 到 webc 为例)

4.2 让管理服务器的 Ansible 使用 json 格式的服务器列表文件

4.2.1 在管理服务器上进入任意一个此用户有权限的目录
# cd ~

(补充:这里以进入家目录为例)

4.2.2 在管理服务器上的家目录位置创建 Ansible 的配置文件
# cp /etc/ansible/ansible.cfg ~/
4.2.3 在管理服务器上指定 Ansible 的服务器列表文件
# vim ansible.cfg

将以下内容:

......
#inventory      = /etc/ansible/hosts
......

修改为:

......
inventory      = ./hosts.py
......
4.2.4 在管理服务器上使用 Python3 编程语言生成 json 格式的服务器列表
4.2.4.1 在管理服务器上编写生成 json 格式的 Python 程序
# vim hosts.py

创建以下内容:

#!/usr/libexec/platform-python
import json
hostlist = {}
hostlist["web"] = ["192.168.100.101", "192.168.100.103"]

hostlist["db"] = {
        "hosts" :["192.168.100.104", "192.168.100.106"],
        "vars" :{"ansible_ssh_user":"root", "ansible_ssh_pass":"1"}
        }

hostlist["192.168.100.7"] = {
        "ansible_ssh_user":"root", "ansible_ssh_pass":"pwd"
        }

print(json.dumps(hostlist))
4.2.4.2 给刚刚编写的 Python 程序相应的全权
# chmod 755 hosts.py


补充:
使用 Python3 出现报错的处理方法:
1) 显示 yum 的配置文件位置

# whereis yum
yum: /usr/bin/yum /etc/yum /etc/yum.conf /usr/share/man/man8/yum.8.gz

2) 确认 yum 所使用的 Python

# head -1 /usr/bin/yum 
#!/usr/libexec/platform-python

3) 将 hosts.py 第一行的 Python 位置修改成和 yum 所使用的一样

# vim hosts.py

将第一行修改为:

#!/usr/libexec/platform-python
......

步骤五:在管理服务器的 Ansible 上添加服务器列表,并将其分组(多个同优先级相同的列表,从管理的角度来思考)

5.1 在管理服务器上进入任意 1 个此用户有权限的目录

# cd ~

(补充:这里以进入家目录为例)

5.2 在管理服务器上的家目录位置创建 Ansible 的配置文件

# cp /etc/ansible/ansible.cfg ~/

5.3 在管理服务器上指定 Ansible 的服务器列表文件目录

将以下内容:

......
#inventory      = /etc/ansible/hosts
......

修改为:

......
inventory      = ~/hosts/
......
5.2.4 创建 Ansible 的服务器列表文件目录
5.2.4.1 创建第 1 个 Ansible 的服务器列表文件目录
# vim ~/hosts/hostsa

创建以下内容:

[web]
web1
web2
web3
5.2.4.2 创建第 1 个 Ansible 的服务器列表文件目录
# vim ~/hosts/hostsb

创建以下内容:

[db]
db1
db2
db3
5.2.4.3 创建第 3 个 Ansible 的服务器列表文件目录
# vim ~/hosts/others

创建以下内容:

192.168.100.7

步骤六:测试管理服务器 Ansible 的服务器列表

6.1 显示默认服务器列表里的服务器列表

# ansible all -i /etc/ansible/hosts --list-host
  hosts (20):
    web1
    web2
    web3
    db1
    db2
    db3
    192.168.100.107

6.2 显示 web 组的服务器

# ansible web --list-host
  hosts (10):
    web1
    web2
    web3

6.3 显示 db 组的服务器

# ansible db --list-host
  hosts (5):
    db1
    db2
    db3

6.4 显示不属于任何组的服务器

# ansible ungrouped --list-host
  hosts (1):
  192.168.100.7

6.5 显示所有服务器

# ansible all --list-host
  hosts (20):
    web1
    web2
    web3
    db1
    db2
    db3
    192.168.100.107

或者:

# ansible-inventory --graph