自动化运维管理工具Ansible

Ansible

0.1、安装

yum install epel-release -y ##插件支持

yum install ansible –y ##主进程

0.2、ansible 程序结构

安装目录如下(yum安装):

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

  执行文件目录:/usr/bin/

  Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible/

  Help文档目录:/usr/share/doc/ansible-X.X.X/

  Man文档目录:/usr/share/man/man1/

 

0.3、ansible 配置文件重要参数
inventory = /etc/ansible/hosts  #这个参数表示资源清单inventory文件的位置
library = /usr/share/ansible    #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
forks = 5                #并发连接数,默认为5
sudo_user = root                #设置默认执行命令的用户
remote_port = 22          #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
host_key_checking = False       #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
timeout = 60              #设置SSH连接的超时时间,单位为秒
log_path = /var/log/ansible.log     #指定一个存储ansible日志的文件(默认不记录日志)

 

1、ansible命令执行过程
  1. 加载配文件/etc/ansible/ansible.cfg;

  2. 加载对应模块;

  3. 通过ansible将模块或命令生成对应的临时python文件,并且将文件传输至对应主机和用户的$HOME/.ansible/tmp/文件夹下;

  4. 给文件+x执行;

  5. 执行并返回结果;

  6. 删除临时python文件,退出;


 

2、Ansible配置文件重要参数
ansible配置文件
/etc/ansible/ansible.cfg
​
•   forks   ##调整并发
​
•   model_name  ##调整默认模块

 

小记:

模块化:调用特定的模块,完成特定的任务;

默认通过ssh协议;

Paramiko(python对ssh的实现),pyYaml jinja2(模块语言)三个关键模块

 

 

#ansible可以管理的设备:Linux、Windows 、路由器等; 通过ssh协议;

 

##c/s结构

指的是 client /server;ansible非传统cs架构,属于c端,称为主控端或中控等;

##使用说明

ansible <组名/all> <-m 模块名> [-a 参数]


3、Ansible常用模块
3.1、command
##可用性差,多数特殊符号并不支持;但 是ansible的默认模块,可通过ansible.cfg进行调整修改

sed -i 's/\#module_name = command/module_name = shell/g'

 

3.2、shell
##相较于command支持较多指令和特殊符号的使用; command和shell的参数命令几乎一致;

ansible [db|ip组] -m shell -a 'chdir=/tmp [cp/touch/cat...] ["aaa" >>] file [to file]'
##使用shell模块,进入目标主机/tmp目录,并开始执行shell指令,shell指令正常写就可以;
##shell模块的相关常用指令
chdir:#在运行命令之前,请切换到此目录。
cmd:#要运行的命令,后跟可选参数。
creates:#文件名,当它已经存在时,此步骤将*不*运行。
executable:#更改用于执行命令的shell。这需要指向可执行文件的绝对路径。
free_from:#shell模块以字符串形式运行一个free form命令。没有名为“自由形式”的实际参数。请参阅有关如何使用本模块的示例。
removes:#文件名,当它存在时,此步骤将*运行*。
stdin:#将命令的stdin直接设置为指定值。
stdin_add_newline:#是否向stdin数据追加新行。
warn:#是否启用任务警告。

 

3.3、script
##远程执行shell脚本

ansible [db|IP组] -m script -a '主控端shell绝对路径' 

 

3.4、copy
##将主控端的文件copy至目标主机

ansible [db|IP组] -m copy -a 'src=/tmp/test.sh dest=/tmp/test1.sh owner=xiebai mode=777 backup=yes'
##将主控端的test.sh copy至目标主机指定目录并指定文件名test1.sh,且属主为xiebai,权限为777,如果文件原始存在就执行备份操作
ansible [db|ip组] -m copy -a 'content="test line1\ntest line2" dest=/root/tmptest/a.txt owner=xiebai mode=744'
##通过content参数将指定内容直接写入目标主机并生成a.txt,并赋予相对应权限
3.5、fetch
##将远端文件copy至主控端

ansible [db|ip组] -m fetch -a 'src=/var/log/messsges dest=/root/tmp/tmplog/'
##将远端的message文件copy过来
3.6、file
##调整目标主机的文件

ansible [db|ip组] -m file -a 'path=/root/tmp/tmp.txt group=root mode=600 owner=xiebai'
##调整远程主机的tmp.txt权限为600,属主属组xiebai/root;
ansible [db|ip组] -m file -a 'path=/root/tmp/tmp1 state=directory owner=xiebai group=xiebai'
##创建目录,权限属主
ansible [db|ip组] -m file -a 'src=/root/tmptest/xyc dest=/root/xcy state=link'
##创建软连接
3.7、archive
##文件归档,压缩

ansible [db|ip组] -m archive -a 'path=/var/log/ dest=/root/tmptest/log.tar.gz format=gz owner=root group=root'
##path 后面的“/”,带上只压缩log下的文件,不带就从log开始压缩
3.8、unarchive
##文件解压缩

ansible [db|ip组] -m unarchive -a 'src=/xx/xx压缩包 dest=/xx/xx/xx [copy=yes/no ##文件在主控端为yes,可忽略不写;在被控端为no,必写]'
3.9、cron模块
##定时任务

​支持时间:minute hour day month weekday

ansible [db|ip组] -m cron -a 'minute=00 hour=01 weekday=1-5 name=启动cpu消耗程序 job=/root/shell/test.sh'
##对对应主机增加crontab
#增加state=absent,即可删除对应的任务
4、playbook

使用ansible-playbook xx.yml执行即可,剧本中的参数可以通过命令行传参进行调用

ansible-playbook xxx.yml -e 'aa=11 bb="22" '

---
##install nginx
- hosts: client            ##IP组
  remote_user: root        ##远程执行用户
  gather_facts: no        ##收集信息

  tasks:
    - name: create nginx group        ##定义字典名
      group: name=nginx system=yes gid=888    ##引用model[模块]
      tags: add group            ##打标签,playbook -t引用

    - name: create nginx user
      user: name=nginx system=yes uid=888 group=nginx shell=/sbin/nologin create_home=no home=/home/nginx
      tags: add user

    - name: xml file update
      copy: src=/root/tmp/index.html dest=/usr/share/nginx/html backup=yes
      notify: reload        ##判断,当文件改变,通知'reload'
      tags: copy

    - name: install nginx
      yum: name=nginx
      tags: install

    - name: start nginx
      service: name=nginx state=started enabled=yes
      tags: start

  handlers:        ##定义操纵者字典
    - name: reload    ##定义名称[被notify引用]
      service: name=nginx state=reloaded

 

posted @ 2022-03-23 18:11  谢白  阅读(174)  评论(0编辑  收藏  举报