Ansible入门及基本操作

Ansible的介绍

  ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台,它是基于python语言,由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的.

Ansible的基本价架构

 

Ansible的下载:

  可以通过源码下载安装,也可以用yum安装,这里我用比较方便的yum安装。

yum -y install ansible

  下载完成后,我们需要和被控主机相和呼应,这就用到了ssh无密码登陆,我的博客里有。做完这些后我们就需要在主机清单里添加被控主机的ip地址。

vim /etc/ansible/hosts
10.6.12.71#在最后一行添加主机IP地址

  做完这些我们就可以通过ansible来控制其他主机了!

ansible 10.6.12.71 -m ping#查看其他主机网络状态

Ansible中比较重要的文件

  /ect/ansible/ansible.cfg----主配置文件

  /ect/ansible/hosts--------主机清单

  /etc/ansible/roles/--------存放角色的目录。角色就是好多playbook的集合

  /usr/bin/ansible------主程序,临时执行命令工具

  /usr/bin/ansible-doc------查看配置模块,模块功能查看工具

  /usr/bin/ansible- galaxy-------下载/上传优秀代码或Roles模块的官网平台

  /usr/bin/ansible-playbook-----制定自动化任务,编排剧本

  /usr/bin/absible-pull------远程执行命令工具

  /usr/bin/ansible-vault----文件加密工具

  /usr/bin/nsible-console-----基于console界面与用户交互的执行工具

Ansible调用基本模块

  可以通过Ansible --help来查看怎么用这个命令。

ansible 10.6.12.71 -m ping -k#-m是指定调用什么模块,-k是交互输入口令,建议做ssh无密码登陆。

Anaible的文件之/etc/hosts,注意***在当ssh端口改变的是时候要指定ssh端口***

  1.可以添加单个主机的IP地址

  2.可以添加主机组,在主机组里再添加主机ip可以批量控制主机

 

 

 

 

 

   3.进行命令测试

 

 

 Ansible的主配置文件/etc/ansible/ansilnble.cng(一般保持默认)

[defaults]

# some basic default values...

#inventory      = /etc/ansible/hosts#主机列表配置文件
#library        = /usr/share/my_modules/#库文件存放目录
#module_utils   = /usr/share/my_module_utils/#模块路径
#remote_tmp     = ~/.ansible/tmp#临时py命令文件存放在远程主机目录
#local_tmp      = ~/.ansible/tmp#本机的临时命令执行目录
#forks          = 5#默认并发数
#poll_interval  = 15
#sudo_user      = root#默认sudo用户
#ask_sudo_pass = True#每次执行ansible敏玲是否询问ssh密码
#ask_pass      = True
#transport      = smart
#remote_port    = 22
#module_lang    = C
#module_set_locale = False
#host_key_cheking=False#建议取消注释,检查对应服务器的host_key
#log_path=/var/log/ansible.log#日志文件建议启用

Ansible系列命令

 

ansible ansible-doc ansible- playbook ansible-vault  
ansible-console ansible-galaxy ansible-pull
  ansible-doc:显示模块帮助
    ansible-doc [options] [modul..]
    -a 显示所有模块的文档
    -I, --list 列出可用模块
    -s, --snippet显示指定模块的playbook片段
  示例:
  ansible-doc -|列出所有模块
  ansible-doc ping查看指定模块帮助用法
  ansible-doc -s ping 查看指定模块帮助用法

Ansible命令用法

 

 

  例子:以下面这条命令为例,需要做ssh无密码登陆,然后需要给zr用户sudo的权限,这样才可以访问被控制端的目录文件等等

  授权可以在visudo修改,将zr用户加入到%whell组中,免密登陆的时候就修改visudo,然后增加这个%wheel  ALL=(ALL)       NOPASSWD: ALL

ansible 10.612.56 -a 'la /root'  -u zr -k -b  -K

    当有多个主机组需要执行操作时:

 

 

 

 

 Ansible命令执行过程

  1.加载自己的配置文件 默认/etc/ansible/ansible.cfg

  2.加载自己对应的模块文件,如command

  3.通过ansible将模块或命令生成对应的临时py文件,并将该文件传送至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/xxx.py文件

  4.给文件+x执行

  5.执行并返回结果

  6.删除临时py文件,sleep 0退出

Ansible的相关模块:-m 指定模块默认是command

  以command为例子:

- chdir#到一个目录下执行命令时需要这个ansible all -a 'chdir=/etc/fs cat /etc/fstab'
Change into this directory before running the command.
[Default: (null)]
version_added: 0.6

- creates#将一个文件存在将不进行下面的操作ansible all -a 'createst=/etc/fs cat /etc/fstab'
A filename or (since 2.0) glob pattern, when it already exists, this step will *not*
be run.
[Default: (null)]

= free_form
The command module takes a free form command to run. There is no parameter actually
named 'free form'. See the examples!


- removes#如果不存在将不执行后续命令ansible all -a 'removes=/etc/fs cat /etc/fstab'
A filename or (since 2.0) glob pattern, when it does not exist, this step will *not*

= free_form
The command module takes a free form command to run. There is no parameter actually
named 'free form'. See the examples!


- removes
A filename or (since 2.0) glob pattern, when it does not exist, this step will *not*
be run.
[Default: (null)]
version_added: 0.8

- stdin
Set the stdin of the command directly to the specified value.
[Default: None]
version_added: 2.4

- warn
If command_warnings are on in ansible.cfg, do not warn about this particular line if
set to `no'.
[Default: yes]
type: bool
version_added: 1.8

   但是commdel这个模块的缺点就是命令里不能有管道、重定向等符号无法处理,所以在需要的时候需要-m指定所需要的模块。

  Shell模块:和command相似,用shell执行命令

  Script:运行脚本

  只需要在控制端写好要运行的脚本,Script就会自动给其他被控主机推送脚本。

ansible all -m script -a  '/root/ansible/host.sh'

   COPY模块:ansible-doc -s copy查看选项参数

  例子:修改selinux的状态

 

[root@localhost ~]# ansible all -m copy -a 'src=/root/ansible/selinux dest=/etc/selinux/config  backup=yes'
src是指定源 dest是指定目的 backup做复制的时候会备份

 

  例子:在被控主机上直接生成文件

 

 

ansible all -m copy -a 'content="hello\nthanks\n" dest=/data/fs'#直接在被控主机生成内容为
hello\nthanks\n的文件/data/fs1

 

  Fetch模块:从客户端取文件至服务器端和cp是相反的

ansible src -m fetch -a “src=/root/a.sh dast=/data/scripts”

  file模块:设置文件属性

  重要的参数state:可以创建文件,目录,和软连接,具体和state的状态有关

ansible srv -m file -a "pas=/root/a.sh owner=wang mode=755"
ansible web -m file -a 'src=/app/testfile dest=/app/testfile-like state=link'#创建软连接
ansible all -m file -a 'name=/data/g3 state=touch'#创建一个文件,对象是/data/g3
ansible all -m file -a 'name=/data/g3 state=absent'#删除一个文件也能删除文件夹,对象是/data/g3
ansible all -m file -a 'name=/data/g3 state=dirrectory'#创建一个文件夹,对象是/data/g3

  unarchive模块:打包模块

  archive模块:解包模块

  hostname模块:修改主机名

ansible 192.168.157.131 -m hostname -a 'name=node'#把主机名改为node

  cron模块:计划任务#和crontab -e 差不多

ansible all -m crom -a 'minute=* week=1,3,5 job="/usr/bin/wall FBIwaring" name=warningcron'#在这里name=的内容会写入定时任务的注释部分
ansible all -m crom -a 'disabled=ture job="/usr/bin/wall FBIwaring" name=warningcron'#关闭定时任务

  删除任务

ansible all -m crom -a 'state=absent name=warningcron'

  yum模块:

ansible all -m yum -a 'name=vsftpd'#list可以查看所有安装的包,如果是安装多个包的话可以用逗号隔开
ansible all -m yum -a 'name=vsftpd state=absent'#删除包

  services模块:开机自启动设置,也可以启动服务

ansible all -m service -a 'name=vsftpd enabled=yes'#启动服务是state=start

  user模块:管理用户

ansible srv -m user -a 'name=user1 comment="test user”uid= 2048 home=/app/user1 group=root'#comment是对用户的描述
ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1’#system系统信息
ansible srv -m user -a 'name=user1 state=absent remove=yes'#删除用户及家目录等数据

  geoup模块:管理组

ansible srv -m group -a"name=testgroup system=yes'
ansible srv -m group -a "name=testgroup state=absent"

  Ansible-galaxy命令

  连接http://aglaxy.ansible.com下载响应的roles(角色)角色就是许多playbook的组合,而playbook是调用许多模块的组合  列出所有安装的galaxy

  ansible-galaxy list

  安装galaxy

  ansible-galaxy install geerlingguy.redis

  删除galaxy

  ansible-galaxy remove geerlingguy.redis

Ansible-pull命令

  推送命令至远程,效率无限提升,对运维要求比较高

posted @ 2019-10-17 18:00  caibutou  阅读(581)  评论(0编辑  收藏  举报