Ansible Module
Ansible Ad-hoc模式常用模块
ansible-doc 常用命令
1 # ansible-doc -h 2 Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin] 3 4 -j 以json格式显示所有模块信息 5 -l 列出所有的模块 6 -s 查看模块常用参数 7 # 直接跟模块名,显示模块所有信息 8 9 [root@ansible ~]# ansible-doc -j 10 [root@ansible ~]# ansible-doc -l 11 [root@ansible ~]# ansible-doc -l |wc -l #统计所有模块个数,ansible2.8共计2834个模块
命令相关的模块:command
ansible
默认的模块,执行命令,注意:shell中的"<"
, ">"
, "|"
, ";"
, "&"
,"$"
等特殊字符不能在command
模块中使用,如果需要使用,则用shell
模块
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s command 3 4 # 在192.168.1.31服务器上面执行ls命令,默认是在当前用户的家目录/root 5 [root@ansible ~]# ansible 192.168.1.31 -a 'ls' 6 7 # chdir 先切换工作目录,再执行后面的命令,一般情况下在编译时候使用 8 [root@ansible ~]# ansible 192.168.1.31 -a 'chdir=/tmp pwd' 9 192.168.1.31 | CHANGED | rc=0 >> 10 /tmp 11 12 # creates 如果creates的文件存在,则执行后面的操作 13 [root@ansible ~]# ansible 192.168.1.31 -a 'creates=/tmp ls /etc/passwd' #tmp目录存在,则不执行后面的ls命令 14 192.168.1.31 | SUCCESS | rc=0 >> 15 skipped, since /tmp exists 16 [root@ansible ~]# ansible 192.168.1.31 -a 'creates=/tmp11 ls /etc/passwd' # tmp11文件不存在,则执行后面的ls命令 17 192.168.1.31 | CHANGED | rc=0 >> 18 /etc/passwd 19 20 # removes 和creates相反,如果removes的文件存在,才执行后面的操作 21 [root@ansible ~]# ansible 192.168.1.31 -a 'removes=/tmp ls /etc/passwd' #tmp文件存在,则执行了后面的ls命令 22 192.168.1.31 | CHANGED | rc=0 >> 23 /etc/passwd 24 [root@ansible ~]# ansible 192.168.1.31 -a 'removes=/tmp11 ls /etc/passwd' #tmp11文件不存在,则没有执行后面的ls命令 25 192.168.1.31 | SUCCESS | rc=0 >> 26 skipped, since /tmp11 does not exist
命令相关的模块:shell
专门用来执行shell
命令的模块,和command
模块一样,参数基本一样,都有chdir,creates,removes
等参数
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s shell 3 4 [root@ansible ~]# ansible 192.168.1.31 -m shell -a 'mkdir /tmp/test' 5 [root@ansible ~]# ansible 192.168.1.31 -m shell -a 'ls /tmp' 6 7 #执行下面这条命令,每次执行都会更新文件的时间戳 8 [root@ansible ~]# ansible 192.168.1.31 -m shell -a 'cd /tmp/test && touch 1.txt && ls' 9 192.168.1.31 | CHANGED | rc=0 >> 10 1.txt 11 12 # 由于有时候不想更新文件的创建时间戳,则如果存在就不执行creates 13 [root@ansible ~]# ansible 192.168.1.31 -m shell -a 'creates=/tmp/test/1.txt cd /tmp/test && touch 1.txt && ls' 14 192.168.1.31 | SUCCESS | rc=0 >> 15 skipped, since /tmp/test/1.txt exists
命令相关的模块:script
用于在被管理机器上面执行shell
脚本的模块,脚本无需在被管理机器上面存在
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s script 3 4 # 编写shell脚本 5 [root@ansible ~]# vim ansible_test.sh 6 #!/bin/bash 7 echo `hostname` 8 9 # 在所有被管理机器上执行该脚本 10 [root@ansible ~]# ansible all -m script -a '/root/ansible_test.sh' 11 192.168.1.32 | CHANGED => { 12 "changed": true, 13 "rc": 0, 14 "stderr": "Shared connection to 192.168.1.32 closed.\r\n", 15 "stderr_lines": [ 16 "Shared connection to 192.168.1.32 closed." 17 ], 18 "stdout": "linux.node02.com\r\n", 19 "stdout_lines": [ 20 "linux.node02.com" 21 ] 22 } 23 ......
文件相关的模块:file
用于对文件的处理,创建,删除,权限控制等
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s file 3 path #要管理的文件路径 4 recurse #递归 5 state: 6 directory #创建目录,如果目标不存在则创建目录及其子目录 7 touch #创建文件,如果文件存在,则修改文件 属性 8 9 absent #删除文件或目录 10 mode #设置文件或目录权限 11 owner #设置文件或目录属主信息 12 group #设置文件或目录属组信息 13 link #创建软连接,需要和src配合使用 14 hard #创建硬连接,需要和src配合使用 15 16 # 创建目录 17 [root@ansible ~]# ansible 192.168.1.31 -m file -a 'path=/tmp/test1 state=directory' 18 19 # 创建文件 20 [root@ansible ~]# ansible 192.168.1.31 -m file -a 'path=/tmp/test2 state=touch' 21 22 # 建立软链接(src表示源文件,path表示目标文件) 23 [root@ansible ~]# ansible 192.168.1.31 -m file -a 'src=/tmp/test1 path=/tmp/test3 state=link' 24 25 # 删除文件 26 [root@ansible ~]# ansible 192.168.1.31 -m file -a 'path=/tmp/test2 state=absent' 27 28 # 创建文件时同时设置权限等信息 29 [root@ansible ~]# ansible 192.168.1.31 -m file -a 'path=/tmp/test4 state=directory mode=775 owner=root group=root'
文件相关的模块:copy
用于管理端复制文件到远程主机,并可以设置权限,属组,属主等
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s copy 3 src #需要copy的文件的源路径 4 dest #需要copy的文件的目标路径 5 backup #对copy的文件进行备份 6 content #直接在远程主机被管理文件中添加内容,会覆盖原文件内容 7 mode #对copy到远端的文件设置权限 8 owner #对copy到远端的文件设置属主 9 group #对copy到远端文件设置属组 10 11 12 # 复制文件到远程主机并改名 13 [root@ansible ~]# ansible 192.168.1.31 -m copy -a 'dest=/tmp/a.sh src=/root/ansible_test.sh' 14 15 # 复制文件到远程主机,并备份远程文件,安装时间信息备份文件(当更新文件内容后,重新copy时用到) 16 [root@ansible ~]# ansible 192.168.1.31 -m copy -a 'dest=/tmp/a.sh src=/root/ansible_test.sh backup=yes' 17 18 # 直接在远程主机a.sh中添加内容 19 [root@ansible ~]# ansible 192.168.1.31 -m copy -a 'dest=/tmp/a.sh content="#!/bin/bash\n echo `uptime`"' 20 21 # 复制文件到远程主机,并设置权限及属主与属组 22 [root@ansible ~]# ansible 192.168.1.31 -m copy -a 'dest=/tmp/passwd src=/etc/passwd mode=700 owner=root group=root'
文件相关的模块:fetch
用于从被管理机器上面拉取文件,拉取下来的内容会保留目录结构,一般情况用在收集被管理机器的日志文件等
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s fetch 3 src #指定需要从远端机器拉取的文件路径 4 dest #指定从远端机器拉取下来的文件存放路径 5 6 # 从被管理机器上拉取cron日志文件,默认会已管理节点地址创建一个目录,并存放在内 7 [root@ansible ~]# ansible 192.168.1.31 -m fetch -a 'dest=/tmp src=/var/log/cron' 8 9 [root@ansible ~]# tree /tmp/192.168.1.31/ 10 /tmp/192.168.1.31/ 11 └── var 12 └── log 13 └── cron 14 directories, 1 file
用户相关的模块:user
用于对系统用户的管理,用户的创建、删除、家目录、属组等设置
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s user 3 name #指定用户的名字 4 home #指定用户的家目录 5 uid #指定用户的uid 6 group #指定用户的用户组 7 groups #指定用户的附加组 8 password #指定用户的密码 9 shell #指定用户的登录shell 10 create_home #是否创建用户家目录,默认是yes 11 remove #删除用户时,指定是否删除家目录 12 state: 13 absent #删除用户 14 15 16 # 创建用户名指定家目录,指定uid及组 17 [root@ansible ~]# ansible 192.168.1.31 -m user -a 'name=mysql home=/opt/mysql uid=1002 group=root' 18 [root@ansible ~]# ansible 192.168.1.31 -m shell -a 'id mysql && ls -l /opt' 19 192.168.1.31 | CHANGED | rc=0 >> 20 uid=1002(mysql) gid=0(root) 组=0(root) 21 总用量 0 22 drwx------ 3 mysql root 78 5月 27 18:13 mysql 23 24 # 创建用户,不创建家目录,并且不能登录 25 [root@ansible ~]# ansible 192.168.1.31 -m user -a 'name=apache shell=/bin/nologin uid=1003 create_home=no' 26 [root@ansible ~]# ansible 192.168.1.31 -m shell -a 'id apache && tail -1 /etc/passwd' 27 192.168.1.31 | CHANGED | rc=0 >> 28 uid=1003(apache) gid=1003(apache) 组=1003(apache) 29 apache:x:1003:1003::/home/apache:/bin/nologin 30 31 # 删除用户 32 [root@ansible ~]# ansible 192.168.1.31 -m user -a 'name=apache state=absent' 33 34 # 删除用户并删除家目录 35 [root@ansible ~]# ansible 192.168.1.31 -m user -a 'name=mysql state=absent remove=yes'
用户相关的模块: group
用于创建组,当创建用户时如果需要指定组,组不存在的话就可以通过group
先创建组
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s group 3 name #指定组的名字 4 gid #指定组的gid 5 state: 6 absent #删除组 7 present #创建组(默认的状态) 8 9 # 创建组 10 [root@ansible ~]# ansible 192.168.1.31 -m group -a 'name=www' 11 12 # 创建组并指定gid 13 [root@ansible ~]# ansible 192.168.1.31 -m group -a 'name=www1 gid=1005' 14 15 # 删除组 16 [root@ansible ~]# ansible 192.168.1.31 -m group -a 'name=www1 state=absent'
软件包相关的模块: yum
用于对软件包的管理,下载、安装、卸载、升级等操作
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s yum 3 name #指定要操作的软件包名字 4 download_dir #指定下载软件包的存放路径,需要配合download_only一起使用 5 download_only #只下载软件包,而不进行安装,和yum --downloadonly一样 6 list: 7 installed #列出所有已安装的软件包 8 updates #列出所有可以更新的软件包 9 repos #列出所有的yum仓库 10 state: 11 installed, present #安装软件包(两者任选其一都可以) 12 removed, absent #卸载软件包 13 latest #安装最新软件包 14 15 # 列出所有已安装的软件包 16 [root@ansible ~]# ansible 192.168.1.31 -m yum -a 'list=installed' 17 18 # 列出所有可更新的软件包 19 [root@ansible ~]# ansible 192.168.1.31 -m yum -a 'list=updates' 20 21 #列出所有的yum仓库 22 [root@ansible ~]# ansible 192.168.1.31 -m yum -a 'list=repos' 23 24 #只下载软件包并到指定目录下 25 [root@ansible ~]# ansible 192.168.1.31 -m yum -a 'name=httpd download_only=yes download_dir=/tmp' 26 27 #安装软件包 28 [root@ansible ~]# ansible 192.168.1.31 -m yum -a 'name=httpd state=installed' 29 30 #卸载软件包 31 [root@ansible ~]# ansible 192.168.1.31 -m yum -a 'name=httpd state=removed' 32 33 #安装包组,类似yum groupinstall 'Development Tools' 34 [root@ansible ~]# ansible 192.168.1.31 -m yum -a 'name="@Development Tools" state=installed'
软件包相关的模块:service
服务模块,用于对服务进行管理,服务的启动、关闭、开机自启等
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s service 3 name #指定需要管理的服务名 4 enabled #指定是否开机自启动 5 state: #指定服务状态 6 started #启动服务 7 stopped #停止服务 8 restarted #重启服务 9 reloaded #重载服务 10 11 # 启动服务,并设置开机自启动 12 [root@ansible ~]# ansible 192.168.1.31 -m service -a 'name=crond state=started enabled=yes'
计划任务相关的模块:cron
用于指定计划任务,和crontab -e
一样
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s cron 3 job #指定需要执行的任务 4 minute #分钟 5 hour #小时 6 day #天 7 month #月 8 weekday #周 9 name #对计划任务进行描述 10 state: 11 absetn #删除计划任务 12 13 14 # 创建一个计划任务,并描述是干嘛用的 15 [root@ansible ~]# ansible 192.168.1.31 -m cron -a "name='这是一个测试的计划任务' minute=* hour=* day=* month=* weekday=* job='/bin/bash /root/test.sh'" 16 [root@ansible ~]# ansible 192.168.1.31 -m shell -a 'crontab -l' 17 192.168.1.31 | CHANGED | rc=0 >> 18 #Ansible: 这是一个测试的计划任务 19 * * * * * /bin/bash /root/test.sh 20 21 # 创建一个没有带描述的计划任务 22 [root@ansible ~]# ansible 192.168.1.31 -m cron -a "job='/bin/sh /root/test.sh'" 23 24 # 删除计划任务 25 [root@ansible ~]# ansible 192.168.1.31 -m cron -a "name='None' job='/bin/sh /root/test.sh' state=absent"
系统信息相关的模块 : setup
用于获取系统信息的一个模块
1 # 查看模块参数 2 [root@ansible ~]# ansible-doc -s setup 3 4 # 查看系统所有信息 5 [root@ansible ~]# ansible 192.168.1.31 -m setup 6 7 # filter 对系统信息进行过滤 8 [root@ansible ~]# ansible 192.168.1.31 -m setup -a 'filter=ansible_all_ipv4_addresses' 9 10 # 常用的过滤选项 11 ansible_all_ipv4_addresses 所有的ipv4地址 12 ansible_all_ipv6_addresses 所有的ipv6地址 13 ansible_architecture 系统的架构 14 ansible_date_time 系统时间 15 ansible_default_ipv4 系统的默认ipv4地址 16 ansible_distribution 系统名称 17 ansible_distribution_file_variety 系统的家族 18 ansible_distribution_major_version 系统的版本 19 ansible_domain 系统所在的域 20 ansible_fqdn 系统的主机名 21 ansible_hostname 系统的主机名,简写 22 ansible_os_family 系统的家族 23 ansible_processor_cores cpu的核数 24 ansible_processor_count cpu的颗数 25 ansible_processor_vcpus cpu的个数