例子:
[root@localhost .ssh]# ansible all -m command -a "date +‘%F%T‘" 192.168.88.3 | SUCCESS | rc=0 >> 2018-10-0616:34:40
192.168.88.4 | SUCCESS | rc=0 >>
2018-10-0616:34:39 |
ansible 的重要功能都是要使用模块的:
[root@localhost .ssh]# ansible-doc -l --- 查看所有可以执行的模块 ansible-doc –s module_name ----- 查看模块的使用方法: 例子: [root@localhost .ssh]# ansible-doc -s copy --- 查看 copy 模块的使用方法 [root@localhost .ssh]# ansible-doc -s file ---- 查看 file 模块的使用方法 |
copy 模块使用示例:
将~/test.sh 文件放到目标主机上的 / tmp 目录里, 源文件可以是相对路径, 但目标路径必须是绝对路径.
[root@localhost ~]# ansible all -m copy -a ‘src=~/test.sh dest=/tmp‘ --- 拷贝文件 [root@localhost ~]# ansible all -m file -a ‘path=/tmp/test.sh mode=0755‘ -- 给文件授权 [root@localhost ~]# ansible all -a ‘chmod +x /tmp/test.sh‘ ---(不依赖模块功能)给文件可执行权限 [root@localhost ~]# ansible all -a ‘ls /tmp/test.sh‘ ---- 查看文件。 |
corn 模块使用示例:
查看是否有定时任务:
[root@localhost ~]# ansible all -a ‘crontab -l ‘ |
创建定时任务, 名字是 lbg, 每 3 分钟执行一次:
[root@localhost ~]# ansible all -m cron -a "name=‘lbg‘ minute=*/3 job=‘/bin/echo 123 >> /tmp/test.sh ‘" |
成功后可在目标主机上查看:
[root@localhost .ssh]# cat /var/spool/cron/root #Ansible: lbg */3 * * * * /bin/echo 123 >> /tmp/test.sh |
删除定时任务:
[root@localhost ~]# ansible all -m cron -a "name=‘lbg‘ state=absent" |
只在 IP 组 test1 里创建定时任务:
[root@localhost ~]# ansible test1 -m cron -a "name=‘lbgtest‘ minute=*/2 job=‘echo how do you do >> /tmp/test.sh‘" |
hostname 模块使用:
[root@localhost ~]# ansible all -a ‘hostname‘ ---- 查看所有主机的主机名 [root@localhost ~]# ansible all -m hostname -a ‘name=lbg‘ --- 给所有主机命名(会在对应配置文件里也修改) [root@localhost ~]# ansible all -a ‘cat /etc/sysconfig/network‘ --- 查看配置文件里主机名是否修改。 |
user 模块的使用:
[root@localhost ~]# ansible all -m user -a ‘name=ansible uid=8888 group=0 ‘ -- 添加用户 ansible. [root@localhost ~]# ansible all -a ‘id ansible‘ -- 查看用户 ansible. [root@localhost ~]# ansible all -m user -a ‘name=ansible group=2 ‘ -- 修改用户 gid. [root@localhost ~]# ansible all -m user -a ‘name=ansible state=absent remove=yes ‘ -- 删除用户 root@localhost ~]# ansible test1 -a ‘ls -l /home‘ -- 查看 test1 组的主机的 ansible 用户的家目录是否删除 |
group 模块的使用:
[root@localhost ~]# ansible test1 -m group -a "name=dba gid=666" -- 添加组 [root@localhost ~]# ansible test1 -m group -a "name=dba state=absent" -- 删除组 |
service 模块的使用:
Service的 state 的状态有 :started/stopped/restarted/reloaded [root@localhost ~]# ansible all -m service -a ‘name=httpd state=started ‘ --- 开启 httpd 服务 |
yum 模块的使用:
先在己机上写好配置 yum 源的文件, 再使用 copy 模块命令传给目标主机.
[root@localhost ~]# ansible all -m copy -a "src=test.repo dest=/etc/yum.repos.d" -- 拷贝 yum 源文件 [root@localhost ~]# ansible all -a "mount /dev/sr0 /mnt/rhel" --- 挂载 [root@localhost ~]# ansible all -a "yum repolist" --- 检查 yum 源 [root@localhost ~]# ansible all -m yum -a "name=httpd state=present" --yum 安装 httpd 软件。 [root@localhost ~]# ansible all -m yum -a "name=httpd state=absent" --yum 卸载 httpd 软件 |
想让 ansible 在一台主机上同时执行多条命令的时候就会用到 playbook. 使用 YAML 语法编写 playbook.
创建 playbook:
[root@localhost ~]# VIM create-group.YAML ---- 内容如下:
--- - hosts: test1 remote_user: root tasks: - name: add group dba group: name=dba gid=10000 system=no - name: add user oracle user: name=oracle group=dba uid=10000 system=no - name: touch-file command: /bin/touch /tmp/hello |
playbook 说明:
YAML 的结构 (structure) 通过空格来展示 , 序列 (sequence) 里的项用 "-" 来代替 ,Map( 散列 ) 里面的键值对用 ":" 分隔 " 。 文件的第一行应该以 & nbsp;”—”(三个连字符,无空格)开始,表明 YMAL 文件的开始。 在同一行中,# 之后的内容表示注释。 大小写敏感。 使用缩进表示层级关系。 缩进时不允许使用 Tab 键,只允许使用空格。 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。 YMAL 中的列表元素以”-”开头然后紧跟着一个空格,后面为元素内容。 对象的表示方法都是键值中间以”:”分隔,”:”后面还要增加一个空格。 hosts 用于指定要执行指定任务的主机, 其可以是一个或者多个以冒号分隔的主机组。 remote_user 则用于指定远程主机上的执行任务的用户。 play 的主体部分是 tasks ,tasks 的核心为 ansible 的模块,tasks 包含 name 和要执行的模块,name 是可选的,只是为了便于用户阅读,模块是必须的,同时也要给予模块相应的参数。 tasks 中的各任务按次序逐个在 hosts 中指定的所有主机上执行, 即在所有主机上完成第一个任务后再开始第二个。tasks 的目的使用指定的参数执行模块, 而在模块参数中可以使用变量. 模块执行是幂等的, 这意味着多次执行也是安全的, 因为其执行结果一致。在运行 playbook 时, 若中途发生错误, 所有已执行的任务都将回滚, 因此在更正 playbook 后重新执行即可。 在众多模块中, command 和 & nbsp;shell 模块可仅需给定一个列表而无需使用 "key=value" 格式。 |
运行 playbook:
[root@localhost ~]# ansible-playbook create-group.YAML ---- 输出结果如下:
PLAY [test1] ****************************************************************************** TASK [Gathering Facts] ******************************************************************* ok: [192.168.88.3] TASK [add group dba] ******************************************************************** ok: [192.168.88.3] TASK [add user oracle] ******************************************************************** ok: [192.168.88.3] TASK [touch-file] ************************************************************************** changed: [192.168.88.3] PLAY RECAP ******************************************************************************* 192.168.88.3 : ok=4 changed=1 unreachable=0 failed=0 |
来源: http://www.bubuko.com/infodetail-2881475.html