zoukankan      html  css  js  c++  java
  • 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
    thanks
    " dest=/data/fs'#直接在被控主机生成内容为
    hello
    thanks
    的文件/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命令

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

  • 相关阅读:
    Windows10下Linux系统的安装和使用//TODO
    RSS
    详解Javascript中的原型与原型链
    《你不知道的Javascript》学习笔记 //TODO
    南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 F
    南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 E
    南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 D
    南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 B
    南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 C
    南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 A
  • 原文地址:https://www.cnblogs.com/zrxuexi/p/11686056.html
Copyright © 2011-2022 走看看