Bootstrap

Ansible入门学习之基础元素介绍

一、Ansible目录结构介绍

        1.通过rpm   -ql   ansible获取ansible所有文件存放的目录

                有配置文件目录    /etc/ansible/

                     执行文件目录   /usr/bin/

       

                其中  /etc/ansible/ 该文件目录的主要功能是  inventory主机信息配置,ansible工具功能配置。

                ansible自身的配置文件是ansible.cfg,其中所有的配置内容均可以在命令行通过参数的形式传递或定义在playbooks中。

二、Ansible命令用法详解

        1.Ansible命令行执行的方式有Ad-Hoc(临时命令执行)、Ansible-playbook(Ad-Hoc的集合)两种方式,web化执行方式有Tower(10台以内免费)。

        2.Ansible默认使用公私钥认证。

            ssh-keygen -N " " -b 4096 -t rsa -C "[email protected]" -f /root/.ssh/stanley.rsa

            随机生成公私钥对

             ssh-copy-id -i  /root/.ssh/stanley.rsa  root@localhost

             为本机添加密钥认证

        3.Ansible 的命令格式:ansible <host-pattern> [options](可选项)

             其中<host-pattern> 是Inventory中定义的主机或者主机组,一般可以是ip,hostname等

             例如:ansible  all  -m  ping -u test        表示以test用户的身份执行ping命令

                       ansible  all  -m ping  -u test  --sudo        表示以test的身份sudo到root身份执行ping存活检测

                       ansible  all -m ping  -u test  -b        表示以test身份至root身份执行ping进行存活检测,上面的同效果命令的操作在新版本中已经被-b所替换

三、Ansible命令使用场景介绍

        1.ansible一般用在非固化或者临时一次性的操作的命令中(非固化/临时一次性操作:没有规律或者是临时要做的任务)

            例如:ansible web1  -m ping  检查服务器web1的存活情况

        2.ansible-galaxy 为github的pip功能

              命令格式如下:

                

        3.ansible-pull(默认使用push模式)

         适用的场景是:数量巨大的机器需要配置;在刚启动没有网络的主机上运行ansible

        4.ansible-doc 模块名        用来查看文档的用法说明

        5.ansible-playbook             通过读取预先编写的playbook文件实现批量管理,是ansible的任务集

        例如:ansible-playbook        playbook.yml                表示执行playbook.yml中所有的任务集合

        6.ansible-vault                用于配置文件加密

        例如:ansible-vault     encrypt  a.yml        加密a.yml

        7.ansible-console                用来虚拟一个终端

四、Ansible Inventory配置及详解

        1.定义主机和组

        [组名],支持将同一个主机归并到多个不同的组中且以行作为单位分割配置

        2.定义主机变量

        

        上述示例是修改web服务的端口为808

        3.自定义组变量

        

4.其他inventory参数列表

五、Ad-Hoc命令集

        1.使用场景:

                空闲时期关闭所有不必要的服务器并对其进行健康检测

                临时更新Apache和Nginx的配置文件并将其分发到所有需要更新该配置的web服务器

                需要使用Ansible-playbook的场景

                对新的服务器进行安装完系统之后的一些列固化的初始工作

                定期对生产环境发布更新程序代码

        2.Ad-Hoc命令集用法介绍

                

        例如:ansible web --list                表示列出web组所有的主机列表

                    ansible  10.20.40.61  -B 5  -P 2 -T 2 -m command  -a 'sleep  20'  -u  root

                   上述命令表示以root执行sleep 20,设置最大连接超时时长为2且为后台运行的模式,执行过程中每2秒输出依次进度如果5s还没有还未执行完就终止该任务。

                     为所有的服务器安装ntp服务并设置为开机启动

                     ansible  apps  -s -m yum  -a  ''name=ntp state=present''

                     ansible apps  -m  service  -a  "name=ntpd  state=started  enabled=yes"

                     上述这两条命令分别表示给所有主机安装ntp服务然后启动ntp服务并设置为开机启动

六、Ad-Hoc组管理和特定主机变更

        1.一般我们需要会将负责相同场景应用的主机划分为一个组便于统一管理,这是就需要组管理并且可以对组中特定的主机进行变更。

        2.组配置需要编辑/etc/ansible/hosts,下图是简化后的web服务架构:

        

        3.配置Proxy和web servers实践

            ansible  proxy  -m yum -a "name=nginx  state=present"        利用ansible安装nginx

            ansible  app  -m  yum -a "name=nginx  state=present"           

            ansible   app  -m  yum  -a  "name=php  state=present"        安装nginx和php

             ……                    同上述命令安装  mysql-python  python-setuptools依赖包

            ansible   app  -m  pip   -a  "name=django  state=present"         安装Django

            同上述安装nginx命令安装后端的数据库redis

             以下命令为安装mariadb的命令:

        以上配置命令即可配置完所有主机的应用需求

        4.Ad-Hoc特定主机变更

        通过limit参数限定主机做变更

        ansible  app  -m  command  -a  "service  ntpd  status"  --limit  "192.168.37.158"

            上述命令的作用是在app组中查看192.168.37.158的状态

        ansible  "192.168.37.158:192.168.37.159"  -m  command  -a  "service  ntpd  status"

            上述命令的作用是查看上述两个ip地址对应的主机的ntp服务的状态

七、Ad-Hoc用户与组管理

        1.ansible系统用户模块

            linux系统用户管理:user

            windows系统用户管理:win_user

        2.与用户相关的应用场景

        新增用户:增加test用户并为其创建家目录

            ansibledb -m user -a "name=test  shell=/bin/bash  groups=admins,testgroup append=yes  home=/home/test/  state=present" 

        修改用户属组

             ansibledb  -m user  -a  "name=test  groups=testgroup  append=no"

        修该用户的属性

             ansibledb  -m user -a "name=test  expires=19999999"

        删除用户

              ansibledb  -m user  -a "name=test  state=absent  remove=yes"

        变更用户密码

              ansible -m user -a "name=test  shell=/bin/bash  password=igrjiFDF  update_password=lovexiao"             

              password后面的密码是加密后的密文

八、应用层用户管理

        1.新增mysql用户test

             ansible  db -m  mysql_user  -a 'login_host=localhost  login_password=xiao  login_user=root  name=test  password=testxiao priv=zabbix.*:ALL state=present'

        

;