当前位置: 首页 > 科技观察

Ansible-ConfigurationFilesandInventoryFiles_0

时间:2023-03-12 12:04:29 科技观察

在Ansible入门中介绍了Ansible的工作机制。本文重点介绍Ansible配置文件和Inventory文件。使用Ansible的一个好习惯是将特定的任务组织在一个单独的目录中,这样就不会和其他配置任务发生冲突,在排错的时候也很容易定位。例如安装redis任务,新建一个目录:/ansible/redis,并在该目录下创建文件ansible.cfg和hosts。配置文件ansible.cfg是ansible的配置文件,用来控制ansible的行为。配置文件可以出现在很多地方,其优先级顺序如下:ANSIBLE_CONFIG(一个环境变量)。ansible.cfg(位于当前目录)。.ansible.cfg(位于用户的主目录中)。/etc/ansible/ansible.cfg。推荐使用第二种方式,将配置文件存放在当前路径下,不同的配置任务使用不同的配置文件。一个最简单的ansible.cfg文件:[defaults]host_key_checking=False#SSH连接不验证目标主机的指纹inventory=hosts#指定inventory文件的第三行非常关键,指定目标主机的inventory文件。ansible连接远程主机时,默认使用当前登录系统用户。如果以aneyrin用户登录安装ansible命令的主机,当需要连接远程主机执行任务时,ansible也以aneyrin用户登录远程主机。实际工作中,配置一个专用用户,该用户存在于所有被管理的服务器中,配置使用公钥登录每台服务器,执行需要root权限的命令,不需要密文,这样可以省去很多麻烦。但是前提是ansiblehost需要绝对安全,否则不要这么做。Inventory文件这个文件定义了Ansible要操作的目标主机,[redis]192.168.52.130192.168.52.131:2222[ntpd]192.168.52.132192.168.52.133[linux:children]redisntpd[linux:vars]ansible_ssh_user=aneirin实际环境中肯定不止一台服务器需要同时配置,比如安装Redis。这时候可以定义一个Redis主机组,然后填写目标主机的IP地址。如果SSH连接配置了22以外的端口,可以直接在IP地址后面写To,用冒号隔开。将多个主机组归为一个更大的主机组,使用[大主机组:children]的写法。上面的inventory文件将redis和ntpd主机组放到了linux主机组中,方便ansible进行一些常用的配置。最后两行是主机组定义的变量。这些变量有的可以定义在ansible配置文件中,有的是在Playbook中使用的(Playbook后面会讲解)。该命令使用/ansible/redis目录包含ansible.cfg和hosts文件,可以执行ansible的adhoc命令。[aneirin@hostredis]$ansiblelinux-mshell-a'uptime'192.168.52.131|改变|rc=0>>18:23:48up4:48,2个用户,平均负载:0.51、0.40、0.35192。168.52.132|改变|rc=0>>18:23:48up4:48,2个用户,平均负载:0.25、0.22、0.21192.168.52.128|改变|rc=0>>18:23:51up1day,4:05,2users,loadaverage:0.38,0.12,0.08adhoc命令执行起来相对简单。例如,如果要为大量主机安装服务或查询服务器的主机名,使用adhoc命令更方便,adhoc命令的缺点是不能重复使用,只能完成简单的任务。安装Redis:[aneirin@hostredis]$ansibleredis-myum-a'name=redisstate=present'192.168.52.131|CHANGED=>{“ansible_facts”:{“discovered_interpreter_python”:“/usr/bin/python”},“changed”:true,“changes”:{“installed”:[“redis”]},“msg”:“","rc":0,...}要得到上面的结果,上面的Ansible配置文件需要添加几行。[权限升级]become=Truebecome_method=sudobecome_ask_pass=False