Ansible命令执行过程

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常用模块

  Command:在远程主机执行命令,默认模块,可忽略-m选项

    ansible srvs -m command -a ‘service vsftpd start’

    ansible srvs -m command -a ‘echo magedu |passwd --stdin wang’ 不成功

    此命令不支持 $VARNAME < > | ; & 等,用shell模块

ansible dbsever -m command -a 'chdir /etc creates/data/file1.txt cat /centos-release '
#查看 dbserver下的主机的 系统版本,前进入/etc目录,如果file1.txt,文件不存在 将会执行

 

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

    ansible srv -m shell -a ‘echo magedu |passwd –stdin wang’

    调用bash执行命令 类似 cat /tmp/stanley.md | awk -F‘|’ ‘{print $1,$2}’ &> /tmp/example.txt 这些复杂命                  令,即使使用shell也可能会失败,解决办 法:写到脚本时,copy到远程,执行,再把需要的结果拉回执                   行命令的机器

备注:可以进配置文件[/etc/ansible/ansible.cfg]文件中修改module_name=shell 来修改默认模块

  Script:运行脚本

    -a "/PATH/TO/SCRIPT_FILE“

    ansible dbserver -m script -a f1.sh

  Copy:从服务器复制文件到客户端,

    ansible srv -m copy -a “src=/root/f1.sh dest=/tmp/f2.sh owner=wang mode=600 backup=yes” 如目标存                   在,默认覆盖,此处指定先备份

    ansible srv -m copy -a “content=‘test content\n’ dest=/tmp/f1.txt” 利用内容,直接生成目标文件 

  Fetch:从客户端取文件至服务器端,copy相反,目录可先tar

    ansible srv -m fetch -a ‘src=/root/a.sh dest=/data/scripts’

  File:设置文件属性

    ansible srv -m file -a "path=/root/a.sh owner=wang mode=755“

    ansible web -m file -a ‘src=/app/testfile dest=/app/testfile-link state=link’

  unarchive:解压缩包

    1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes

    2、将远程主机上的某个压缩包解压至指定路径下,设置copy=no

    常见参数:

      copy:默认为Yes,拷贝的文件是从ansible主机复制到远程服务器,如果设置为no,会砸死远程服务器上寻找src源文件

      remote_src:和copy功能一样互斥,yes表示在远程主机,不在ansible主机,no表示在ansible主机

      src:源路径,可以是ansilble主机上的路径,也可以是远程主机上的路径如果是远程主机上的路径copy=no

ansible src -m unarchive -a 'src=/data/test.tar.gz dest=/var/test/'
ansible src -m unarchive -a 'src=/data/test.tar.gz dest=/var/test/' copy=no mode=0777'

  Archive:打包压缩

      

ansible dbserver -m archive -a 'path=/var/log/ dest=/data/log.tag.bz2 format=bz2'

 

  Hostname::管理主机名

    ansible node1 -m hostname -a “name=websrv”

  Cron:计划任务

    支持时间:minute,hour,day,month,weekday /分时日月周

    ansible srv -m cron -a “minute=*/5 job=‘/usr/sbin/ntpdate 172.16.0.1 &>/dev/null’ name=Synctime” 创建                  任务 

    ansible srv -m cron -a ‘state=absent name=Synctime’ 删除任务

创建任务
ansible dbserver -m cron -a 'hour=2 minute=30 weekday=1-5 name="bakup mysql" job=/root/mysql_backup.sh'
#每周的星期1至星期五的2点30份在dbserver主机组,执行mysql_bachk.sh脚本
ansible dbserver  -m cron -a "minute=*/5" job='/usr/sbin/ntpdate 17.20.0.1 &>/dev/null name=Synctime"

禁用任务
ansible dbserver  -m cron -a "minute=*/5" job='/usr/sbin/ntpdate 17.20.0.1 &>/dev/null name=Synctime disabled=yes"
启用任务
ansible dbserver  -m cron -a "minute=*/5" job='/usr/sbin/ntpdate 17.20.0.1 &>/dev/null name=Synctime disabled=no"

####################
crontab -l 查看计划任务

 

  Yum:管理包

    ansible srv -m yum -a ‘name=httpd state=latest’ 安装

    ansible srv -m yum -a ‘name=httpd state=absent’ 删除

  Service:管理服务

    ansible srv -m service -a 'name=httpd state=stopped ' 

    ansible srv -m service -a 'name=httpd state=started enabled=yes' #启动服务,并设置开机启动

    ansible srv –m service –a ‘name=httpd state=reloaded’ 

    ansible srv -m service -a 'name=httpd state=restarted

  User:管理用户

    ansible srv -m user -a 'name=user1 comment=“test user” uid=2048 home=/app/user1 group=root‘

    ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1

    ansible srv -m user -a ‘name=user1 state=absent remove=yes‘ 删除用户 及家目录等数据

  Group:管理组

    ansible srv -m group -a "name=testgroup system=yes“

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

  Lineinfile:相当于sed,可以修改文件内容

    ansible在使用sed进行替换时,经常会遇到转义的问题,而且ansible在遇到特殊符号进行替换时经常出现问题,所以ansible提供了2个模块,lineinfle和replace模块,方便替换。

    

ansible all -m lineinfile -a "path=/etc/selinux/config" regexp=' ^SELINUX=' line='SELINUX=enforcing' "
#找出以SELINUX=开头的行,替换成'SELINUX=enforcing
ansible all -m lineinfile -a 'dest=/etc/fstab.txt state=absent regexp="^#"'
删除带#的行

  Replace:主要是基于正则进行匹配和替换

    

ansible dbserver -m replace -a 'path=/etc/foo.txt regexp="^(UUID.*)" replace="#\1"'
 

#以UUID开头的行加 了注释

  Setup:收集远程主机的信息,例如:IP地址,硬件信息,等

  

ansible dbserver -m setup

 

ansible系列命令   

   ansible-galaxy :连接 https://galaxy.ansible.com 下载相应的roles

   列出所有安装的galaxy:ansible-galaxy list

   安装galaxy:ansible-galaxy install geerlingguy.redis

   删除galaxy:nasible-galaxy remove geerlingguy.redis

示例:向被控端发送 Hello world

Ansible 检查 Java 进程 ansible执行流程_hive

Ansible 检查 Java 进程 ansible执行流程_mysql_02

#hello world yml file
- hosts: dbserver
  remote_user: root
  tasks:
    - name: hello world
      command: /usr/bin/wall hello world


#缩进很重要

ansible-playbook hello.yml

Ansible-vault:管理加密解密yml文件,解密后才可执行

ansible-vault encrypt hello.yml 加密
ansible-vault decrypt hello.yml 解密
ansible-vault view hello.yml 查看
ansible-vault edit hello.yml 编辑加密文件
ansible-vault rekey hello.yml 修改口令
ansible-vault create new.yml 创建新文件