注意:任务、play和playbook设计为具有幂等性,所以在运行playbook时,如果目标主机处于正确状态,则不会进行任何更改。
清单:定义了ansible将要管理的一批主机
(1)静态清单: 每行一个,填写主机名或ip;也可以定义主机组。注意:一台主机可以存在于多个主机组
www.westos.org #主机名
172.25.254.250 #IP
###################主机组###################
[webservers]
server1.westos.org
server2.westos.org
172.25.0.1
[dbservers]
node1.westos.org
node1.westos.org
(2)定义嵌套组:ansible主机清单可以包含多个主机组构成的组
[webservers]
server1.westos.org
server2.westos.org
172.25.0.1
[dbservers]
node1.westos.org
node1.westos.org
[servers:children] #“servers”可以是自定义名称,“children”是规定写法,表示父子级关系
webservers
dbservers
(3)通过范围简化主机规格:可以 指定主机名称或ip范围或者数字和字母范围
语法:[START:END]
写法 | 含义 |
---|---|
172.25.[0:4].[0:254] | 匹配172.25.0.0/24,172.25.1.0/24 …172.25.4.0/24 |
server[01:10].example.com | 匹配server01.example.com到server10.example.com所有主机,此方式不匹配server1,之匹配server01 |
[a:c].example.com | 匹配a.example.com到c.example.com |
(4)验证清单 : 查看受管主机 ansible workstation --list-hosts
(5)默认清单位置:/etc/ansible/hosts
(6)动态清单:可以从开源社区的脚本中获取
(1)三种配置文件:
配置文件 | 说明 |
---|---|
/etc/ansible/ansible.cfg | 基本配置文件,如果找不到其他配置文件,使用这个 |
~/.ansible.cfg | 如果存在此配置并且当前工作目录中也没有ansible.cfg,此文件替代/etc/ansible/ansible.cfg |
./ansible.cfg | 执行ansible命令的目录中如果有ansible.cfg,就用它,不使用上面两个(推荐使用,上面两个不常用) |
(2)显示使用的配置文件:ansible dbservers -i inventory --list-hosts -v
(3)管理配置文件中的设置:vim ./ansible.cfg
参数 | 含义 |
---|---|
[defaults] | 部分设置ansible操作的默认值 |
[privilege_escalation] | 配置ansible如何在受管主机上执行特权升级 |
[defaults]
inventory = ./inventory
remote_user = student #指定登录受管主机的用户,如不指定则使用当前用户名称
ask_pass = false #是否提示输入ssh密码,做了免密就可以设置为false,否则需为true
[privilege_escalation]
become = true #连接到受管主机上是否进行身份切换
become_method = sudo #切换方式,默认为sudo
become_user = root #切换到的用户
become_ask_pass = false #是否需要为become_method提示输入密码,默认为false
注意:为了后续运行命令方便执行,要在ansible管理主机上使用【ssh-keygen】对指定的受管主机进行免密设定。
(4)使用sudo进行权限下放: 以超级用户身份编辑文件(建议写在/etc/sudoers.d目录下)
以上,ansible部署就算完成了:设定清单、编辑配置文件、进行权力下放。此时,就可以使用ansible模块运行命令。
列出所有模块:ansible-doc -l
查看ping模块帮助文档:ansible-doc ping
模块类型 | 模块名称 | 模块作用 |
---|---|---|
文件模块 | copy | 将本地文件复制到受管主机 |
file | 设置文件的权限和其他属性 | |
lineinfile | 确保特定行是否在文件中 | |
synchronize | 使用rsync同步内容 | |
系统模块 | firewalld | 使用firewalld管理任意端口和服务 |
reboot | 重启 | |
service | 管理服务 | |
user | 添加、删除和管理用户账户 | |
Net Tools模块 | get_url | 通过http、https、或者ftp下载文件 |
nmcli | 管理网络 | |
uri | 与web服务交互 |
为什么要使用临时命令:使用临时命令可以快速测试和更改,无需编写playbook
ansible host -m module [-a 'module arguments'] [-i inventory] #host表示受管主机名称,module表示模块,-a表示模块参数,-i指定清单
(1)在/etc/hosts文件中,添加受管主机的解析:
(2)简单测试,在默认清单文件,添加受管主机:
(3)使用命令进行测试:ansible all -m ping
用途:使用user模块确保student用户存在于servera.lab.example.com且uid为1000
命令:ansible -m user -a ‘name=student uid=1000 state=present’ servera.lab.example.com
注意: 此时默认清单里面还是servera.lab.example.com
(1)在受管主机上运行(hostname)命令: ansible webservers -m command -a /usr/bin/hostname -o
注意:此时的默认清单里面添加了主机组
(2)查看本机当前用户的id: ansible localhost -m command -a ‘id’
(3)通过-u选项使用student进行连接并执行id命令: ansible localhost -m command -a ‘id’ -u student
注意:在执行上面两条命令时,需要在新建的目录中执行,否则结果不会变
本机的两种用户【root、student】也都要进行免密操作
(4)使用shell和command的区别:
注意:command模块允许执行远程命令,但这些命令不是shell处理,所以无法访问shell环境变量,所以不能执行重定向、传送等操作。
使用copy模块将本地文件复制到受管主机
更改servera.lab.example.com主机的Apache默认发布页面,注意,在servera主机中要求已经安装了Apache服务,并且设定好了火墙和selinux。具体步骤不再赘述。
使用命令:ansible servera.lab.example.com -m copy -a ‘content=“hello apache!\n” dest=/var/www/html/index.html’