鄂破机看 发表于 2018-7-30 11:01:18

ansible基本介绍

  问:试想一下,要在N台主机上做相同的配置,一遍又一遍,是不是特别想让这种重复性工作一下搞定?
  本文介绍的ansible就是能减轻这种压力的自动化工具。
  一、Ansible简介
  Ansible是自动化运维工具的一种,使用Python编写的,通过远程控制其他主机,来达到修改配置、软件部署、修改用户等工作。
  控制方式:通过ssh协议控制其他主机实现
  特性:
  ①幂等性:不管重复执行多少次,得到的结果都是一样的
  ②期望状态:只要给出想要达到的结果,无需制定具体怎么做
  二、Ansible组成部分
  ·Host inventory:主机列表,用来定义被控制的远程主机。
  ·Modules:模块,ansible用来向各主机上定义执行操作的。
  ·Ad Hoc Commands:命令,ansible用来配合modules,完成具体指令的,类似于"参数"的概念。
  ·Playbooks:剧本,通过YAML语言进行编写的,可批量完成多次任务的组合。
  tasks:任务,调用 modules 和 commands 来完成指定目的
  handles:触发器,通常在任务最后添加nodify,用来触发该操作的执行,可以理解为需要被触发才能执行的task。
  roles:角色,用来将需要多次调用的执行任务,放在roles下的子目录中,调用时直接添加角色名即可,将各项操作分开,方便管理修改。
  variables:变量,用来保存经常变化的数据参数。
  三、Ansible的命令行操作
  使用方式:我是直接用YUM安装的,方便快捷
  ansible <hosts> -m<Module> -a "Command"
  用户列表:
  hosts通常是调用/etc/ansbile/hosts这个文件,有指定方式,可单独添加,也可使用组定义,还可使用通配符定义,以下就是通过组定义的示例。当然,你也可以手动直接在写入单个IP也可以。
  ansible_ssh_user=    登录远端主机的用户
  ansible_ssh_pass=    登录远端主机的密码,由于是明文不***全,可以直接和远程主机做ssh密钥认证。
  例   # vim/etc/ansilbe/hosts
           #用来被调用的组名称
  192.168.214.134ansible_ssh_user=xxxansible_ssh_pass=xxx
  192.168.214.135   #用来指定需要远程的用户
  Module+ Command:指定整个执行目的。
  查询操作:
  ansible-doc -l   #查看各个module
  ansible-doc 模块名#查看模块可使用的命令参数。
  这里主要介绍常用的模块:
  copy:将本地文件复制到各个主机上,一般用于配置文件的同步修改。
  src=          #指定本地的源文件或目录
  dest=         #指目标存放路径
  例:ansible hostdb -m copy -a"src=/var/a.txt dest=/tmp/"
  file:对远程的文件或目录进行修改
  dest=         #指定修改的路径,也可使用name,path
  state={ file | directory | link | absent | hard }#指定执行操作
  file:创建文件
  directory:创建目录,这里是递归创建
  link:创建软链接
  hard:创建硬链接
  absent:删除文件或目录,递归删除
  例:ansible hostdb -m file -a"dest=/tmp/xxy/ owner=root group=root mode=620 state=directory"
  yum:控制远程主机进行yum安装
  name=      #指定yum安装的包名
  state={ present | absent }      #指定执行哪种操作{安装|卸载}
  例:ansible hostdb -m yum -a"name=mysql-server state=present"
  service:对服务进行管理操作
  name=      #指定操作的服务名称

  state={ started | stoped | restarted |>  例:ansible hostdb -m service -a"name=mysql state=restart"
  cron:指定任务计划
  name=      #ansible需要添加的一个crontab名称
  minute=       #设置任务计划的时间,还有hour、day、month、weekday。
  job=         #设置任务计划的具体执行命令
  state={ present | absent }   #指定{添加|删除}
  例:ansible hostdb -m cron -a"name=test minute=*/5 job='ntpdate 192.168.214.131 > /dev/null'state=present"
  command、shell:这两个命令都是在主机上直接执行命令的。但有些命令通过command执行会出错,通过shell可以执行成功。使用command可以省略"-m"
  例:ansible hostdb -a "ls /etc/passwd"
  ansible hostdb -m shell -a "yum -y install ntp"
  以上就是ansible的命令行操作的常见模块的示例,其实挺简单的,一台主机控制多台主机,不管是配置还是管理都能减去大部分时间,赶快把这个技能点亮吧。
页: [1]
查看完整版本: ansible基本介绍