ansible模块+playbook

scripts模块

script模块用于在远程机器上执行本地脚本。

[root@bb ~]# vim test000.sh 
[root@bb ~]# cat test000.sh 
#!/bin/bash
mkdir /tmp/three
touch /tmp/three/test
echo 'i am echo,at mttt' > /tmp/three/test
echo 'well done'
[root@bb ~]# sh test000.sh 
mkdir: 无法创建目录"/tmp/three": 文件已存在
well done

# ansible group02 -m script -a './test000.sh'

# ls /tmp/
111                                                                      three
a.txt                                                                    xxx
a.txt.4331.2024-08-16@17:23:26~                                          xxx2
systemd-private-18e460b4dc5b47458e28ad6b292e1a98-chronyd.service-ZPvmft

--用ansible搭建nfs服务

[root@m0 ~]# ansible group02 -m file -a 'path=/static state=directory'
[root@m0 ~]# ansible group02 -m file -a 'path=/static/test state=touch'
​
[root@m0 ~]# ansible group02 -m command -a 'yum -y install nfs-utils'
​
[root@s0 ~]# rpm -qa | grep nfs
libnfsidmap-0.25-19.el7.x86_64
nfs-utils-1.3.0-0.68.el7.2.x86_64
​
[root@m0 ~]# ansible group02 -m yum -a 'name=rpcbind state=latest'
​
[root@s0 ~]# rpm -qa | grep rpcbind
rpcbind-0.2.0-49.el7.x86_64
​
[root@m0 ~]# vim /etc/exports
​
/static *(ro,rsync)
​
[root@m0 ~]# ansible group02 -m copy -a 'src=/etc/exports dest=/etc/exports'
​
[root@m0 ~]# ansible group02 -m service -a 'name=rpcbind state=started enabled=yes'
[root@m0 ~]# ansible group02 -m service -a 'name=nfs state=started enabled=yes'
[root@m0 ~]# yum -y install nfs-utils
[root@m0 ~]# mkdir /nfs
​
[root@m0 ~]# mount -t nfs 192.168.2.112:/static /nfs/
[root@m0 ~]# mount -t nfs 192.168.2.111:/static /nfs/
[root@m0 ~]# mount -t nfs 192.168.2.110:/static /nfs/
mount.nfs: Operation not permitted
[root@m0 ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   17G  4.3G   13G   26% /
devtmpfs                 476M     0  476M    0% /dev
tmpfs                    488M     0  488M    0% /dev/shm
tmpfs                    488M  7.7M  480M    2% /run
tmpfs                    488M     0  488M    0% /sys/fs/cgroup
/dev/sr0                 8.8G  8.8G     0  100% /mnt
/dev/sda1               1014M  130M  885M   13% /boot
tmpfs                     98M     0   98M    0% /run/user/0
192.168.2.110:/static     17G  2.1G   15G   13% /nfs
192.168.2.112:/static     17G  2.1G   15G   13% /nfs
192.168.2.111:/static     17G  2.1G   15G   13% /nfs
​
[root@s0 ~]# ls /static/
test
​
[root@s1 ~]# ls /static/
test
​
[root@s2 ~]# ls /static/
test

playbook

playbook剧本是保存在控制机的yml文件

Playbook常⻅语法

hosts: ⽤于指定要执⾏任务的主机,其可以是⼀个或多个由冒号分隔主机组。

remote_user: ⽤于指定远程主机上的执⾏任务的⽤户 。

  • hosts: group1

remote_user: root

tasks: 任务列表, 按顺序执⾏任务.

如果⼀个host执⾏task失败, 整个tasks都会回滚, 修正playbook中的错误, 然后重新执⾏即可

tasks:

  • name: ensure apache is at the latest version

yum: name=httpd,httpd-devel state=latest

  • name: write the apache config file

copy: src=/etc/httpd/conf/httpd.conf

dest=/etc/httpd/conf/httpd.conf

handlers: 类似task,但需要使⽤notify通知调⽤。

不管有多少个通知者进⾏了notify,等到play中的所有task执⾏完 成之后,handlers也只会被执⾏⼀次。

handlers最佳的应⽤场景是⽤来重启服务,或者触发系统重启操作,除此以外很少⽤到了。

notify:

  • restart apache

  • name: ensure apache is running (and enable it at boot)

service: name=httpd state=started enabled=yes

handlers:

  • name: restart apache

service: name=httpd state=restarted

--用剧本安装vsftpd

# vim test001.yml
​
---
-       hosts: group02
        remote_user:  root
        tasks:
        -       name: 安装vsftpd
                yum: name=vsftpd state=latest

# ansible-playbook ./test001.yml
​
PLAY [group02] *********************************************************************
​
TASK [Gathering Facts] *************************************************************
ok: [192.168.2.111]
ok: [192.168.2.110]
ok: [other]
​
TASK [安装vsftpd] ********************************************************************
ok: [other]
ok: [192.168.2.111]
ok: [192.168.2.110]
​
PLAY RECAP *************************************************************************
192.168.2.110              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.2.111              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
other                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
​

--用剧本卸载和安装vsftpd,且启动服务

# vim test001.yml
---
-       hosts: group02
        remote_user:  root
        tasks:
        -       name: 卸载vsftpd
                yum: name=vsftpd        state=absent
​
        -       name: 安装vsftpd
                yum: name=vsftpd state=latest
​
        -       name: 启动服务
                service:        name=vsftpd state=started enabled=yes

# ansible-playbook ./test001.yml
​
PLAY [group02] *********************************************************************
​
TASK [Gathering Facts] *************************************************************
ok: [192.168.2.111]
ok: [other]
ok: [192.168.2.110]
​
TASK [卸载vsftpd] ********************************************************************
changed: [other]
changed: [192.168.2.111]
changed: [192.168.2.110]
​
TASK [安装vsftpd] ********************************************************************
changed: [other]
changed: [192.168.2.111]
changed: [192.168.2.110]
​
TASK [启动服务] ************************************************************************
changed: [192.168.2.111]
changed: [192.168.2.110]
changed: [other]
​
PLAY RECAP *************************************************************************
192.168.2.110              : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.2.111              : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
other                      : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
​

--剧本的格式

---
-  hosts:   组名/别名/ip/域名
   remote_user:   root
   tasks:
   - name: 任务说明
   模块: key0=value0
   service: name=vfstpd state=started  enabled=yes
   - name:  修改配置文件
   command: sed ....
   notify:
   -  abcdefg
   
   
   handler:
   - name: abcdefg
   service: name=vfstpd state=restarted

--将httpd的端口号80改为8080

# vim test002.yml
---
-       hosts:       group01
        remote_user: root
        tasks:
        -       name: 将控制主机的repo文件复制到被控制主机
                copy:  src=/etc/yum.repos.d  dest=/etc/
​
        -       name: 安装httpd
                yum:  name=httpd  state=present
​
        -       name: 修改配置文件
                command:  sed -i '/^Listen/s/80/8080/g' /etc/httpd/conf/httpd.conf
​
        -       name: 修改默认的资源文件
                command: echo 'xxxxxxx' > /var/www/html/index.html
​
        -       name: 启动httpd服务
                service: name=httpd state=started

--使用剧本在不同主机上同时创建不同的文件

# vim /etc/ansible/hosts
s1 ansible_ssh_host=192.168.1.17
ansible_ssh_port=22 ansible_ssh_user=root
ansible_ssh_pass=7

s2 ansible_ssh_host=192.168.1.18
ansible_ssh_port=22 ansible_ssh_user=root
ansible_ssh_pass=7

---
-       hosts: s1
        remote_user: root
        tasks:
        -       name: 创建一个文件
                file: path=/tmp/xxxxxx.txt state=touch
​
-       hosts: s2
        remote_user: root
        tasks:
        -       name: 也创建一个文件
                file: path=/tmp/yyyyy.txt state=touch

--使用剧本搭建nfs服务

# vim test003.yml 

---
-       hosts:    s1
        remote_user:    root
        tasks:
        -       name:   安装nfs-utils
                yum:    name=nfs-utils  state=present

        -       name:   安装rpcbind
                yum:    name=rpcbind    state=present

        -       name:   创建共享目录
                file:   path=/static  state=directory

        -       name:   配置文件
                shell:  echo '/static  *(ro,rsync)' > /etc/exports

        -       name:   启动服务
                service:        name=nfs        state=started   enabled=yes

        -       name:   启动服务rpcbind
                service:        name=rpcbind    state=started enabled=yes

-       hosts:  s2
        remote_user:    root
        tasks:
        -       name:   安装nfs-utils
                yum:    name=nfs-utils  state=latest

        -       name:   创建挂载目录
                file:   path=/nfs       state=directory

        -       name:   挂载nfs文件
                command:        mount -t nfs 192.168.1.17:/static /nfs
相关推荐
sun0077003 小时前
ubuntu dpkg 删除安装包
运维·服务器·ubuntu
oi774 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
学Linux的语莫5 小时前
Ansible使用简介和基础使用
linux·运维·服务器·nginx·云计算·ansible
Onlooker1295 小时前
云服务器部署WebSocket项目
服务器
学Linux的语莫6 小时前
搭建服务器VPN,Linux客户端连接WireGuard,Windows客户端连接WireGuard
linux·运维·服务器
legend_jz6 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
黑牛先生6 小时前
【Linux】进程-PCB
linux·运维·服务器
Karoku0666 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
安迁岚7 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql