临时命令

临时命令称为ad-hoc 命令,是一个相对于ansile playbook的概念。
临时命令(/usr/bin/ansible)用来完成简单的操作, Ansible playbook(/usr/bin/ansible-playbook)用来完成复杂的操作。两者的关系就类似于在命令行敲入shell命令和 写shell scripts两者之间的关系。

临时命令语法:
ansible hosts -m module_name(模块名) -a job(对主机进行什么样得操作)

注意:因为临时命令这里需要用到模块,所以Ansible的模块就在这里介绍了,在后面写ansible playbook的时候,这些内容也可以用到。

查看某个模块的用法:ansible-doc -s 模块名

ping模块

  1. ansible all -m ping

command模块

command模块作用:在远程主机上执行指定的命令。

注意:使用command模块在远程主机中执行命令时,不会经过shell的处理,不能”<”, “>”, “I”, “;“和”&”这些符号,即不能进行重定向、管道符等操作。

  1. ansible all -m command -a 'ls /root/'
  2. ansible all -m command -a 'cat /root/deployments/nginx-deployment.yaml'
  3. ansible all -m command -a 'cp /root/deployments/nginx-deployment.yaml /root/'
  4. ansible all -m command -a 'sh test.sh'

command模块的常用参数:

  • creates:当指定的文件存在时,就不执行对应命令,如:

ansible all -m command -a 'creates=/root/deployments ls /root/'
image.png

  • removes:当指定的文件不存在时,就不执行对应命令,如:

ansible all -m command -a 'removes=/root/test ls /root/'
image.png

  • chdir:指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。

    shell模块

作用:在远程主机上执行复杂的命令,可以使用管道符等。

  1. ansible all -m shell -a 'ls /root/ | grep dep'

shell模块可以使用的参数和command模块基本是一样的,可参考command模块。

user模块

作用:管理用户

参数:

  • name:用户名
  • group:用户组,当不使用 group 设置主组时,默认主组与用户名相同。
  • state:可选值有 present、absent,默认值为 present,表示用户需要存在,当设置为 absent 时表示删除用户。
  • remove:当 state 的值设置为 absent 时,表示要删除远程主机中的用户,但不会删除用户的家目录等信息,这是因为 remove 参数的默认值为 no,如果设置为yes,在删除用户的同时,会删除用户的家目录。
  • password:用户密码。
    • 注意:这个密码不能是明文的密码,而是一个对明文密码”加密后”的字符串,相当于 /etc/shadow 文件中的密码字段,可以使用python命令生成明文密码对应的加密字符串:import crypt; crypt.crypt('666666','123')。’666666’是密码,’123’是盐值,即加密干扰值,可以随便填写。
  1. #新增用户:
  2. ansible all -m user -a 'name=user01'
  3. #新增用户并指定密码:
  4. ansible all -m user -a 'name=user01 password=12EvAbXpnJqLU'
  5. #新增用户并设定用户的组:
  6. ansible all -m user -a 'name=user01 group=jinguang append=yes'
  7. #删除用户和家目录:
  8. ansible all -m user -a 'name=user01 state=absent remove=yes'

group模块

作用:管理组

  1. #1.创建组并指定gid
  2. ansible all -m group -a 'name=group01 gid=1100'
  3. #2.删除组
  4. ansible all -m group -a 'name=group01 state=absent'

copy模块

作用:拷贝文件

参数:

  • src:要拷贝的文件或目录
  • dest:目标目录
  • content :当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
  • force: 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
  • backup : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
  • owner : 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
  • group : 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
  • mode : 指定文件拷贝到远程主机后的权限,如果你想将权限设置为”rw-r—r—“,则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
  1. #拷贝文件
  2. ansible all -m copy -a 'src=/root/123.txt dest=/tmp/'
  3. #将特定内容覆盖到远程主机文件中
  4. ansible all -m copy -a "content='456' dest=/tmp/123.txt"
  5. #拷贝文件并设置好属主,属组,权限
  6. ansible all -m copy -a 'src=/root/123.txt dest=/tmp/ owner=root group=root mode=777'

fetch模块

作用:将被控制端的指定文件,拉取到Ansible服务器

  1. ansible all -m fetch -a 'src=/root/123.txt dest=/tmp/'

unarchive模块

作用:解压

参数:

  • src
  • dest
  • mode:解压后的权限
  1. ansible all -m unarchive -a 'src=/root/123.txt.tar dest=/tmp/'

archive模块

作用:打包

参数:

  • path:要打包的文件,可通过逗号分隔填写多个
  • dest
  1. ansible all -m archive -a 'path=/root/123.txt dest=/root/123.txt.tar'
  2. ansible all -m archive -a 'path=/root/123.txt,/root/456.txt dest=/root/txt.tar'
  3. ansible all -m archive -a 'path=/root/*.txt dest=/root/txt.tar'

service模块

作用:管理服务

参数:

  • name:服务名称
  • state:started开启 / stopped 停止 / reloaded 重新加载 / restarted重启
  • enabled:yes/no 开机自启
  1. ansible all -m service -a 'name=docker state=started'

file模块

作用:创建或者和删除远程主机上的文件或者目录

参数:

  • path: 指定文件,如果远程主机上没有该文件,则进行创建
  • state:touch 创建文件 directory 创建目录 absent 删除文件或者目录
    • 注意:
    • 当state=link时,表示创建软链接,当state=hard时,表示创建硬链接
    • 用法:src=源文件名 path=目标链接文件名
  • mode:修改权限
  • owner:修改属主
  • group:修改属组
  1. #创建文件
  2. ansible all -m file -a 'path=/root/123.txt state=touch'
  3. #创建目录
  4. ansible all -m file -a 'path=/root/123 state=directory'
  5. #删除文件或目录
  6. ansible all -m file -a 'path=/root/123 state=absent'
  7. #创建软链接
  8. ansible all -m file -a 'src=/root/123.txt path=/tmp/123.txt state=link'
  9. #创建硬链接
  10. ansible all -m file -a 'src=/root/123.txt path=/tmp/123.txt state=hard'
  11. #修改属性
  12. ansible all -m file -a 'path=/tmp/123.txt owner=jinguang'
  13. ansible all -m file -a 'path=/tmp/123.txt group=jinguang'
  14. ansible all -m file -a 'path=/tmp/123.txt mode=777'

hostname模块

修改主机名:

  1. ansible all -m hostname -a 'name=master'

apt模块

参数:

  • name
  • state:absent/present
  1. #安装软件
  2. ansible all -m apt -a 'name=lrzsz'
  3. #卸载软件
  4. ansible all -m apt -a 'name=lrzsz state=absent'

cron模块

作用:定时执行任务

  1. #1.每周2,4,6 间隔1分钟告警
  2. ansible db -m cron -a 'minute=* weekday=2,4,6 job="/usr/bin/wall warning" name=warningcron'
  3. #2.将设置好的计划任务禁用(必须带上 job=工作任务,name=计划任务名称)
  4. ansible db -m cron -a 'disabled=true name=warningcron job="/usr/bin/wall warning"'
  5. #3.开启某个计划任务(必须带上 job=工作任务,name=计划任务名称)
  6. ansible db -m cron -a 'disabled=false name=warningcron job="/usr/bin/wall warning"'
  7. #4.删除创建好的任务计划(必须带上 job=工作任务,name=计划任务名称)
  8. ansible db -m cron -a 'name=warningcron job="/usr/bin/wall warning" state=absent'

lineinfile模块

作用:替换文件中的内容,添加内容到指定文件位置

参数:

  • path
  • regexp:正则匹配
  • line:要替换成的内容
  • insertafter
  • insertbefore
  1. cat 123.txt
  2. 123
  3. 456
  4. 789
  5. #替换指定行
  6. #ansible all -m lineinfile -a 'regex=^7 line='apulis789' path=/root/123.txt'
  7. #在指定行后插入行
  8. ansible all -m lineinfile -a 'line=apulis123 insertafter='123' path=/root/123.txt'
  9. #在指定行前插入行
  10. ansible all -m lineinfile -a 'line=apulis456 insertafter='456' path=/root/123.txt'

setup模块

作用:收集远程主机的一些基本信息。

参数:

  • filter:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。
  1. #查看所有信息
  2. ansible all -m setup
  3. #过滤信息
  4. ansible all -m setup -a 'filter=ansible_all_ipv4_addresses'

filter常见过滤:

  1. ansible_all_ipv4_addresses:仅显示ipv4的信息
  2. ansible_devices:仅显示磁盘设备信息
  3. ansible_distribution:显示是什么系统,例:centos,suse
  4. ansible_distribution_major_version:显示是系统主版本
  5. ansible_distribution_version:仅显示系统版本
  6. ansible_machine:显示系统类型,例:32位,还是64
  7. ansible_eth0:仅显示eth0的信息
  8. ansible_hostname:仅显示主机名
  9. ansible_kernel:仅显示内核版本
  10. ansible_lvm:显示lvm相关信息
  11. ansible_memtotal_mb:显示系统总内存
  12. ansible_memfree_mb:显示可用系统内存
  13. ansible_memory_mb:详细显示内存情况
  14. ansible_swaptotal_mb:显示总的swap内存
  15. ansible_swapfree_mb:显示swap内存的可用内存
  16. ansible_mounts:显示系统磁盘挂载情况
  17. ansible_processor:显示cpu个数(具体显示每个cpu的型号)
  18. ansible_processor_vcpus:显示cpu个数(只显示总的个数)
  19. ansible_python_version:显示python版本