标签:02 配置文件 部署 主机 ansible Ansible hosts root
1. 构建Ansible清单
1.1 定义清单
清单定义Ansible将要管理的一批主机。这些主机也可以分配到组中,以进行集中管理。组可以包含子组,主机也可以是多个组的成员。清单还可以设置应用到它所定义的主机和组的变量。
可以通过两种方式定义主机清单。静态主机清单可以通过文本文件定义。动态主机清单可以根据需要使用外部信息提供程序通过脚本或其他程序来生成。
1.2 使用静态清单指定受管主机
静态清单文件是指定Ansible目标受管主机的文本文件。可以使用多种不同的格式编写此文件,包括INI样式或YAML。
在最简单的形式中。INI样式的静态清单文件是受管主机的主机名或IP地址的列表,每行一个:
alpha.example.org beta.example.org 192.168.1.100
但通常而言,可以将受管主机组织为主机组。通过主机组,可以更加有效的对一系列系统运行Ansible。这时,每一部分的开头为以中括号括起来的主机组名称。其后为该组中每一受管主机的主机名或IP地址,每行一个。
[root@zengqing ~]# cd /etc/ansible/ # 清单的位子 [root@zengqing ansible]# ls ansible.cfg hosts roles [root@zengqing ansible]# cat hosts # This is the default ansible 'hosts' file. # 如何定义清单 # # It should live in /etc/ansible/hosts # # - Comments begin with the '#' character # - Blank lines are ignored # - Groups of hosts are delimited by [header] elements # - You can enter hostnames or ip addresses # - A hostname/ip can be a member of multiple groups # Ex 1: Ungrouped hosts, specify before any group headers. ## green.example.com ## blue.example.com ## 192.168.100.1 ## 192.168.100.10 # Ex 2: A collection of hosts belonging to the 'webservers' group ## [webservers] ## alpha.example.org ## beta.example.org ## 192.168.1.100 ## 192.168.1.110 # If you have multiple hosts following a pattern you can specify # them like this: ## www[001:006].example.com # Ex 3: A collection of database servers in the 'dbservers' group ## [dbservers] ## ## db01.intranet.mydomain.net ## db02.intranet.mydomain.net ## 10.25.1.56 ## 10.25.1.57 # Here's another example of host ranges, this time there are no # leading 0s: ## db-[99:101]-node.example.com
1.3 验证清单
若有疑问,可使用 ansible 命令验证计算机是否存在于清单中:
[root@zengqing ansible]# vim hosts node1 # 最后一行添加 [root@zengqing ansible]# ansible node1 --list-hosts # 是否存在清单 hosts (1): node1 [root@zengqing ansible]# ansible node2 --list-hosts # 不存在的就显示不出来 [WARNING]: Could not match supplied host pattern, ignoring: node2 [WARNING]: No hosts matched, nothing to do hosts (0):
运行以下命令来列出指定组中的所有主机:
[root@zengqing ansible]# vim hosts # 添加至最后 [webs] node1 node2 [root@zengqing ansible]# ansible webs --list-hosts # 列出webs组的所有主机 hosts (2): node1 node2
如果清单中含有名称相同的主机和主机组,ansible 命令将显示警告并以主机作为其目标。主机组则被忽略。
应对这种情况的方法有多种,其中最简单的是确保主机组不使用与清单中主机相同的名称。
1.4 覆盖清单的位置
/etc/ansible/hosts文件被视为系统的默认静态清单文件。不过,通常的做法是不使用该文件,而是在Ansible配置文件中为清单文件定义一个不同的位置。
1.5 构建Ansible清单
修改默认清单文件/etc/ansible/hosts添加以下内容:
[root@zengqing ansible]# vim hosts # 添加至最后 11.1.1.1 # 不属于那个组 [webs] node1 node2 node3 # node3主机同时属于两个组 [dbs] node3 node4 使用以下命令列出属于某组的受管主机:
[root@zengqing ansible]# ansible webs --list-hosts # 属于webs组的主机有 hosts (3): node1 node2 node3
[root@zengqing ansible]# ansible dbs --list-hosts #属于dbs组的主机有 hosts (2): node3 node4 使用以下命令列出默认清单文件中的所有受管主机:
[root@zengqing ansible]# ansible all --list-hosts # 所有的主机 hosts (5): 11.1.1.1 node1 node2 node3 # 有两个node3主机会自动去重 node4 使用以下命令列出不属于任何组的受管主机:
[root@zengqing ansible]# ansible ungrouped --list-hosts #没有主机组的主机 hosts (1): 11.1.1.1
1.6 自定义清单文件
在/etc/ansible/目录中,创建一个名为inventory的自定义静态清单文件。
服务器清单规格
主机IP | 用途 | 位置 | 运行环境 |
---|---|---|---|
172.16.103.129 | web服务器 | 北京 | 测试 |
172.16.103.130 | web服务器 | 上海 | 生产 |
172.16.103.131 | 数据库服务器 | 上海 | 生产 |
编辑/etc/ansible/inventory文件,将上表中所列出的主机加入受管主机序列。
[root@zengqing ansible]# pwd /etc/ansible [root@zengqing ansible]# ls ansible.cfg hosts roles [root@zengqing ansible]# vim inventory # 写一个清单文件 [webs] web01.example.com 另外开一台主机设置主机名 [root@localhost ~]# hostnamectl set-hostname web01.example.com [root@localhost ~]# bash [root@zengqing ansible]# vim /etc/hosts # 让他们可以通信修改hosts文件 192.168.149.130 web01.example.com # 最后一行加上ip和主机名 [root@zengqing ansible]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.149.130 web01.example.com [root@zengqing ansible]# ping web01.example.com # 可以ping通 PING web01.example.com (192.168.149.130) 56(84) bytes of data. 64 bytes from web01.example.com (192.168.149.130): icmp_seq=1 ttl=64 time=0.880 ms 64 bytes from web01.example.com (192.168.149.130): icmp_seq=2 ttl=64 time=0.931 ms 64 bytes from web01.example.com (192.168.149.130): icmp_seq=3 ttl=64 time=1.14 ms ^C --- web01.example.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2006ms rtt min/avg/max/mdev = 0.880/0.983/1.139/0.114 ms
执行以下命令列出所有受管主机:
[root@zengqing ansible]# ansible web01.example.com -i /etc/ansible/inventory --list-hosts hosts (1): web01.example.com # -i指定清单文件 [root@zengqing ansible]# ansible webs -i /etc/ansible/inventory --list-hosts hosts (1): web01.example.com
2.1 配置Ansible
可以通过修改 Ansible 配置文件中的设置来自定义 Ansible安装的行为。Ansible从控制节点上多个可能的位置之一选择其配置文件。
使用/etc/ansible/ansible.cfg
ansible软件包提供一个基本的配置文件,它位于/etc/ansible/ansible.cfg。如果找不到其他配置文件,则使用此文件。
使用~/.ansible.cfg
Ansible在用户的家目录中查找.ansible.cfg文件。如果存在此配置文件并且当前工作目录中也没有ansible.cfg文件,则使用此配置取代/etc/ansible/ansible.cfg。
使用./ansible.cfg
如果执行ansible命令的目录中存在ansible.cfg文件,则使用它,而不使用全局文件或用户的个人文件。这样,管理员可以创建一种目录结构,将不同的环境或项目存储在单独的目录中,并且每个目录包含为独特的一组设置而定制的配置文件。
推荐的做法是在需要运行Ansible命令的目录中创建ansible.cfg文件。此目录中也将包含任何供Ansible项目使用的文件,如清单和playbook。这是用于Ansible配置文件的最常用位置。实践中不常使用~/.ansible.cfg或/etc/ansible/ansible.cfg文件
使用ANSIBLE_CONFIG环境变量
我们可以通过将不同的配置文件放在不同的目录中,然后从适当的目录执行Ansible命令,以此利用配置文件。但是,随着配置文件数量的增加,这种方法存在局限性并且难以管理。有一个更加灵活的选项,即通过ANSIBLE_CONFIG环境变量定义配置文件的位置。定义了此变量时,Ansible将使用变量所指定的配置文件,而不用上面提到的任何配置文件。
2.2 配置文件优先级
ANSIBLE_CONFIG环境变量指定的任何文件将覆盖所有其他配置文件。如果没有设置该变量,则接下来检查运行ansible命令的目录中是否有ansible.cfg文件。如果不存在该文件,则检查用户的家目录是否有.ansible.cfg文件。只有在找不到其他配置文件时,才使用全局/etc/ansible/ansible.cfg文件。如果/etc/ansible/ansible.cfg配置文件不存在,Ansible包含它使用的默认值。
由于Ansible配置文件可以放入的位置有多种,因此Ansible当前使用哪一个配置文件可能会令人困惑。我们可以运行以下命令来清楚地确认所安装的Ansible版本以及正在使用的配置文件。
ansible --version
Ansible仅使用具有最高优先级的配置文件中的设置。即使存在优先级较低的其他配置文件,其设置也会被忽略,不会与选定配置文件中的设置结合。因此,如果你选择自行创建配置文件来取代全局/etc/ansible/ansible.cfg配置文件,就需要将该文件中所有需要的设置复制到自己的用户级配置文件中。用户组配置文件中未定义的设置将保持设为内置默认值,即使已在全局配置文件中设为某个其他值也是如此。
2.3 管理配置文件中的设置
Ansible配置文件由几个部分组成,每一部分含有以键值对形式定义的设置。部分的标题以中括号括起来。对于基本操作,请使用以下两部分:
- [defaults]部分设置Ansible操作的默认值
- [privilege_escalation]配置Ansible如何在受管主机上执行特权升级
例如,下面是典型的ansible.cfg文件:
标签:02,配置文件,部署,主机,ansible,Ansible,hosts,root 来源: https://www.cnblogs.com/sunyiming023654/p/16307811.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。