ansible常用模块使用详解

  • ping (查看远程机器是否畅通)

命令行版本:

[root@ansible-leader /etc/ansible/play]$ansible web -m  ping
[WARNING]: Found both group and host with same name: leader
web2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
web1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

playbook版本:

#编辑playbook文件
[root@ansible-leader /etc/ansible/play]$vim ping_web_servers.yml
---
- name: Test connectivity to web servers
  hosts: web
  tasks:
    - name: Ping the web server to check connectivity
      ansible.builtin.ping:

#执行playbook文件
[root@ansible-leader /etc/ansible/play]$ansible-playbook ping_web_servers.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Test connectivity to web servers] ************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [web2]
ok: [web1]

TASK [Ping the web server to check connectivity] ***************************************************************************************************************************
ok: [web1]
ok: [web2]

PLAY RECAP *****************************************************************************************************************************************************************
web1                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web2                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
  • yum (远程下载远程机器上的服务)

命令行版本:

#安装vsftpd服务
[root@ansible-leader /etc/ansible/play]$ansible web -m yum -a "name=vsftpd state=present"
[WARNING]: Found both group and host with same name: leader
web2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "msg": "",
    "rc": 0,
    "results": [
        "vsftpd-3.0.2-29.el7_9.x86_64 providing vsftpd is already installed"
    ]
}
web1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "msg": "",
    "rc": 0,
    "results": [
        "vsftpd-3.0.2-29.el7_9.x86_64 providing vsftpd is already installed"
    ]
}

#卸载vsftpd服务
[root@ansible-leader /etc/ansible/play]$ansible web -m yum -a "name=vsftpd state=removed"
[WARNING]: Found both group and host with same name: leader
web1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "changes": {
        "removed": [
            "vsftpd"
        ]
    },
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package vsftpd.x86_64 0:3.0.2-29.el7_9 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package        Arch           Version             Repository        Size\n================================================================================\nRemoving:\n vsftpd         x86_64         3.0.2-29.el7_9            @updates         353 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 353 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : vsftpd-3.0.2-29.el7_9.x86_64                                 1/1 \n  Verifying  : vsftpd-3.0.2-29.el7_9.x86_64                                 1/1 \n\nRemoved:\n  vsftpd.x86_64 0:3.0.2-29.el7_9                                                \n\nComplete!\n"
    ]
}
web2 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "changes": {
        "removed": [
            "vsftpd"
        ]
    },
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package vsftpd.x86_64 0:3.0.2-29.el7_9 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package        Arch           Version             Repository        Size\n================================================================================\nRemoving:\n vsftpd         x86_64         3.0.2-29.el7_9            @updates         353 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 353 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : vsftpd-3.0.2-29.el7_9.x86_64                                 1/1 \n  Verifying  : vsftpd-3.0.2-29.el7_9.x86_64                                 1/1 \n\nRemoved:\n  vsftpd.x86_64 0:3.0.2-29.el7_9                                                \n\nComplete!\n"
    ]
}

playbook版本:

#安装vsftpd服务playbook文件:


[root@ansible-leader /etc/ansible/play]$cat install_vsftpd.yml
---
- name: Install the latest version of Vsftpd on webservers
  hosts: web
  tasks:
    - name: Ensure Vsftpd is at the latest version
      yum:
        name: vsftpd
        state: present

#安装vsftpd服务 



[root@ansible-leader /etc/ansible/play]$ansible-playbook install_vsftpd.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Install the latest version of Vsftpd on webservers] ******************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [web1]
ok: [web2]

TASK [Ensure Vsftpd is at the latest version] ******************************************************************************************************************************
changed: [web1]
changed: [web2]

PLAY RECAP *****************************************************************************************************************************************************************
web1                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web2                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

#卸载vsftpd服务

#卸载vsftpd服务playbook文件 


[root@ansible-leader /etc/ansible/play]$cat removed_vsftpd.yml
---
- name: Removed the Vsftpd on webservers
  hosts: web
  tasks:
    - name: Ensure Vsftpd is at the latest version
      yum:
        name: vsftpd
        state: removed

#卸载vsftpd服务playbook执行: 


[root@ansible-leader /etc/ansible/play]$ansible-playbook removed_vsftpd.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Install the latest version of Vsftpd on webservers] ******************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [web2]
ok: [web1]

TASK [Ensure Vsftpd is at the latest version] ******************************************************************************************************************************
changed: [web1]
changed: [web2]

PLAY RECAP *****************************************************************************************************************************************************************
web1                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web2                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

 

  • template

原版nginx配置文件

[root@ansible-leader /etc/ansible/play]$cat /etc/nginx/nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

配置一个jinja2的配置文件模板

[root@ansible-leader /path/to]$vim nginx.conf.j2
user {{ nginx_user }};
worker_processes {{ ansible_processor_cores }};
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}



#这里在文件中指定了两个变量,
nginx_user :    这个变量会砸ansible的playbook中进行定义.
qnsible_processor_cores :     这个变量是ansible可以自动使用setpu查询出来的系统环境变量

 书写playbook文件

[root@ansible-leader /etc/ansible/play]$vim deploy_nginx_conf.yml
---
- name: Deploy Nginx configuration using template
  hosts: web
  vars:
    nginx_user: www
  tasks:
    - name: Copy Nginx config from template
      template:
        src: /path/to/nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        owner: root
        group: root
        mode: '0644'
      notify:
        - restart nginx

  handlers:
    - name: restart nginx
      service:
        name: nginx
        state: restarted


#vars    字段定义的就是nginx配置文件中预先定义好的变量名称,会在template的过程中自动进行原文替换.
#src      是原文件
#dest     是目标文件
#owner    指定属主
#grout    指定属组
#mode     指定权限
#notify   上述操作完成后执行handlers做操作,这里指定的handler名称是restart nginx,
#handler  指定操作过程使用service模块
#name     对nginx服务操作,
#state     重启

执行操作 


[root@ansible-leader /etc/ansible/play]$ansible-playbook deploy_nginx_conf.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Deploy Nginx configuration using template] ***************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [leader]

TASK [Copy Nginx config from template] *************************************************************************************************************************************
ok: [leader]

PLAY RECAP *****************************************************************************************************************************************************************
leader                     : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

查看执行结果

[root@ansible-leader /etc/ansible/play]$cat /etc/nginx/nginx.conf
user www;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
  • copy

命令行版本

[root@ansible-leader /path/to]$ansible leader -m copy -a "src=/path/to/nginx.conf.j2 dest=/tmp/nginx.conf.j2 owner=www group=www mode='0644'"
[WARNING]: Found both group and host with same name: leader
leader | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "efbcf07e7e75f8f162cc01489b08b88b1e10f03a",
    "dest": "/tmp/nginx.conf.j2",
    "gid": 1001,
    "group": "www",
    "mode": "0644",
    "owner": "www",
    "path": "/tmp/nginx.conf.j2",
    "secontext": "unconfined_u:object_r:admin_home_t:s0",
    "size": 659,
    "state": "file",
    "uid": 1001
}

#这里如果执行的远程服务器或者本地执行服务器没有对应用户的话那么执行会报错.

 playbook

[root@ansible-leader /etc/ansible/play]$vim copy_file.yaml
---
- name: Copy a file to remote hosts
  hosts: leader
  tasks:
    - name: Copy example configuration file
      copy:
        src: /path/to/nginx.conf.j2
        dest: /tmp/nginx.conf.bak
        owner: root
        group: root
        mode: '0644'
playbook执行结果
[root@ansible-leader /etc/ansible/play]$ansible-playbook copy_file.yaml
[WARNING]: Found both group and host with same name: leader

PLAY [Copy a file to remote hosts] *****************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [leader]

TASK [Copy example configuration file] *************************************************************************************************************************************
changed: [leader]

PLAY RECAP *****************************************************************************************************************************************************************
leader                     : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@ansible-leader /etc/ansible/play]$ll /tmp/
total 16
-rw-r--r--. 1 root root 659 Apr  1 13:48 nginx.conf.bak
-rw-r--r--. 1 www  www  659 Apr  1 13:42 nginx.conf.j2

 

  • user (远程创建远程机器的用户)

命令行版本
[root@ansible-leader /etc/ansible/play]$ansible leader -m user -a "name=newuser shell=/bin/bash uid=1003 group=users"
[WARNING]: Found both group and host with same name: leader
leader | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "comment": "",
    "create_home": true,
    "group": 100,
    "home": "/home/newuser",
    "name": "newuser",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 1003
}

playbook版本:

playbook文件:

 

#增加一个用户
[root@ansible-leader /etc/ansible/play]$vim useradd.yml
---
- name: Create a new user on remote hosts
  hosts: leader
  tasks:
    - name: Ensure user newuser is present
      user:
        name: newuser2
        comment: "New User"
        uid: 1004
        group: users
        shell: /bin/bash
        state: present

执行playbook文件
[root@ansible-leader /etc/ansible/play]$ansible-playbook useradd.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Create a new user on remote hosts] ***********************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [leader]

TASK [Ensure user newuser is present] **************************************************************************************************************************************
changed: [leader]

PLAY RECAP *****************************************************************************************************************************************************************
leader                     : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
查看用户添加状况
[root@ansible-leader /etc/ansible/play]$cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
.
.
.

newuser2:x:1004:100:New User:/home/newuser2:/bin/bash
删除一个用户的playbook:
[root@ansible-leader /etc/ansible/play]$vim userremoved.yml
---
- name: Delete a old user on remote hosts
  hosts: leader
  tasks:
    - name: Ensure user newuser is absent
      user:
        name: newuser2
        uid: 1004
        group: users
        shell: /bin/bash
        state: absent
 执行playbook
[root@ansible-leader /etc/ansible/play]$ansible-playbook userremoved.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Create a new user on remote hosts] ***********************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [leader]

TASK [Ensure user newuser is present] **************************************************************************************************************************************
changed: [leader]

PLAY RECAP *****************************************************************************************************************************************************************
leader                     : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
 查看结果:
[root@ansible-leader /etc/ansible/play]$cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
.
.
.
.
newuser:x:1003:100::/home/newuser:/bin/bash

#newuser2已经被删除
  • group (远程创建远程机器的用户组)

命令行版本:

添加用户组:
[root@ansible-leader /etc/ansible/play]$ansible leader -m group -a "name=newgroup state=present"
[WARNING]: Found both group and host with same name: leader
leader | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "gid": 1002,
    "name": "newgroup",
    "state": "present",
    "system": false
}

#查看结果
[root@ansible-leader /etc/ansible/play]$getent group|grep newgroup
newgroup:x:1002:

删除用户组:
[root@ansible-leader /etc/ansible/play]$ansible leader -m group -a "name=newgroup state=absent"
[WARNING]: Found both group and host with same name: leader
leader | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "name": "newgroup",
    "state": "absent"
}
#查看结果
[root@ansible-leader /etc/ansible/play]$getent group|grep newgroup

 playbook版本添加用户组:

#playbook
[root@ansible-leader /etc/ansible/play]$vim group_add.yml
---
- name: Add a new group on remote hosts
  hosts: all
  tasks:
    - name: Ensure group newgroup is present
      group:
        name: newgroup
        state: present
#执行结果
[root@ansible-leader /etc/ansible/play]$ansible-playbook group_add.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Add a new group on remote hosts] *************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [web1]
ok: [web2]
ok: [leader]

TASK [Ensure group newgroup is present] ************************************************************************************************************************************
changed: [web1]
changed: [leader]
changed: [web2]

PLAY RECAP *****************************************************************************************************************************************************************
leader                     : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web1                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web2                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

#查看结果
[root@ansible-leader /etc/ansible/play]$getent group|grep new
newgroup:x:1002:
 删除group用户组playbook文件:
[root@ansible-leader /etc/ansible/play]$vim group_remove.yml
---
- name: Remove a group from remote hosts
  hosts: all
  tasks:
    - name: Ensure group oldgroup is absent
      group:
        name: newgroup
        state: absent
执行结果:
[root@ansible-leader /etc/ansible/play]$ansible-playbook group_remove.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Remove a group from remote hosts] ************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [leader]
ok: [web2]
ok: [web1]

TASK [Ensure group oldgroup is absent] *************************************************************************************************************************************
changed: [web2]
changed: [web1]
changed: [leader]

PLAY RECAP *****************************************************************************************************************************************************************
leader                     : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web1                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web2                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@ansible-leader /etc/ansible/play]$getent group|grep new

 

  • service (远程执行远程机器上的服务启停操作)

命令行版本

启动nginx服务
[root@ansible-leader /etc/ansible/play]$ansible leader -m service -a "name=nginx state=started enabled=yes"
[WARNING]: Found both group and host with same name: leader
leader | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "enabled": true,
    "name": "nginx",
    "state": "started",
    "status": {
.
.
.
.
        "WatchdogTimestamp": "Tue 2025-04-01 12:11:10 CST",
        "WatchdogTimestampMonotonic": "86620163804",
        "WatchdogUSec": "0"
    }
}

#指定service模块
#name:    nginx服务进行操作
#state:    started启动操作
#enable:    yes加入开机自启动
命令行停止nginx服务:
[root@ansible-leader /etc/ansible/play]$ansible leader -m service -a "name=nginx state=stopped"
[WARNING]: Found both group and host with same name: leader
leader | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "name": "nginx",
    "state": "stopped",
    "status": {
        "ActiveEnterTimestamp": "Tue 2025-04-01 12:11:10 CST",
        "ActiveEnterTimestampMonotonic": "86620163828",
.
.
.
.
        "Wants": "network-online.target",
        "WatchdogTimestamp": "Tue 2025-04-01 12:11:10 CST",
        "WatchdogTimestampMonotonic": "86620163804",
        "WatchdogUSec": "0"
    }
}
playbook版本启动服务:

 

#playbook启动文件
[root@ansible-leader /etc/ansible/play]$vim start_service.yml
---
- name: Start a service on remote hosts
  hosts: leader
  tasks:
    - name: Ensure nginx service is started
      service:
        name: nginx
        state: started
        enabled: yes


#执行playbook
[root@ansible-leader /etc/ansible/play]$ansible-playbook start_service.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Start a service on remote hosts] *************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [leader]

TASK [Ensure nginx service is started] *************************************************************************************************************************************
changed: [leader]

PLAY RECAP *****************************************************************************************************************************************************************
leader                     : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

#检查服务状态
[root@ansible-leader /etc/ansible/play]$systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2025-04-01 15:01:16 CST; 4min 2s ago
     Docs: http://nginx.org/en/docs/
  Process: 18098 ExecStop=/bin/sh -c /bin/kill -s TERM $(/bin/cat /var/run/nginx.pid) (code=exited, status=0/SUCCESS)
  Process: 18317 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 18318 (nginx)
    Tasks: 2
   Memory: 2.3M
   CGroup: /system.slice/nginx.service
           ├─18318 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           └─18319 nginx: worker process

Apr 01 15:01:16 ansible-leader systemd[1]: Starting nginx - high performance web server...
Apr 01 15:01:16 ansible-leader systemd[1]: Started nginx - high performance web server.
[root@ansible-leader /etc/ansible/play]$
playbook版本停止服务:
#playbook文件
[root@ansible-leader /etc/ansible/play]$vim stop_service.yml
---
- name: Stop a service on remote hosts
  hosts: leader
  tasks:
    - name: Ensure nginx service is stopped
      service:
        name: nginx
        state: stopped

#执行playbook操作
[root@ansible-leader /etc/ansible/play]$ansible-playbook stop_service.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Stop a service on remote hosts] **************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [leader]

TASK [Ensure nginx service is stopped] *************************************************************************************************************************************
changed: [leader]

PLAY RECAP *****************************************************************************************************************************************************************
leader                     : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

#检查服务状态
[root@ansible-leader /etc/ansible/play]$systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Tue 2025-04-01 15:06:25 CST; 7s ago
     Docs: http://nginx.org/en/docs/
  Process: 18525 ExecStop=/bin/sh -c /bin/kill -s TERM $(/bin/cat /var/run/nginx.pid) (code=exited, status=0/SUCCESS)
  Process: 18317 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 18318 (code=exited, status=0/SUCCESS)

Apr 01 15:01:16 ansible-leader systemd[1]: Starting nginx - high performance web server...
Apr 01 15:01:16 ansible-leader systemd[1]: Started nginx - high performance web server.
Apr 01 15:06:25 ansible-leader systemd[1]: Stopping nginx - high performance web server...
Apr 01 15:06:25 ansible-leader systemd[1]: Stopped nginx - high performance web server.
 
  • shell (远程执行远程机器上的的命令)

命令行版本
#远程主机执行命令行shell操作
[root@ansible-leader /etc/ansible/play]$ansible leader -m shell -a "ls /var/log >> /tmp/loglist.txt"
[WARNING]: Found both group and host with same name: leader
leader | CHANGED | rc=0 >>

#检查操作结果
[root@ansible-leader /etc/ansible/play]$cat /tmp/loglist.txt
anaconda
spooler
spooler-20250331
tallylog
tuned
wtmp
yum.log

playbook版本:

playbook文件
[root@ansible-leader /etc/ansible/play]$vim run_shellcommand.yml
---
- name: Run a shell command on remote hosts
  hosts: leader
  tasks:
    - name: List contents of /var/log and append to file
      shell: ls /var/log >> /tmp/loglist.txt
      register: shell_output

    - name: Show the result of the shell command
      debug:
        msg: "{{shell_output.stdout}}"
 执行playbook
[root@ansible-leader /etc/ansible/play]$ansible-playbook run_shellcommand.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Run a shell command on remote hosts] *********************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [leader]

TASK [List contents of /var/log and append to file] ************************************************************************************************************************
changed: [leader]

TASK [Show the result of the shell command] ********************************************************************************************************************************
ok: [leader] => {
    "msg": ""
}

PLAY RECAP *****************************************************************************************************************************************************************
leader                     : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

#检查结果
[root@ansible-leader /etc/ansible/play]$cat /tmp/loglist.txt
anaconda
audit
boot.log
.
.
.
yum.log

  • script (远程执行控制机器的本地脚本)

  • script 模块允许你在远程主机上运行本地脚本。Ansible 会将指定的脚本传输到远程主机,然后在远程主机上执行它。这非常适合需要在多个远程主机上运行相同脚本的情况。

控制机器上创建一个脚本用于后面远程执行使用

[root@ansible-leader /etc/ansible/scripts]$vim check_tmp.sh
#!/bin/bash
ls -l /tmp/
命令行版本
[root@ansible-leader /etc/ansible/scripts]$ansible leader -m script -a "/etc/ansible/scripts/check_tmp.sh"
[WARNING]: Found both group and host with same name: leader
leader | CHANGED => {
    "changed": true,
    "rc": 0,
    "stderr": "Shared connection to leader closed.\r\n",
    "stderr_lines": [
        "Shared connection to leader closed."
    ],
    "stdout": "/root/.bashrc: line 17: bind: warning: line editing not enabled\r\n/root/.bashrc: line 18: bind: warning: line editing not enabled\r\ntotal 20\r\n-rw-r--r--. 1 root root 558 Apr  1 15:13 loglist.txt\r\n-rw-r--r--. 1 root root 659 Apr  1 13:48 nginx.conf.bak\r\n-rw-r--r--. 1 www  www  659 Apr  1 13:42 nginx.conf.j2\r\n-rw-r--r--. 1 root root  15 Mar 31 14:20 test\r\n-rw-------. 1 root root  15 Mar 31 18:24 test1\r\n",
    "stdout_lines": [
        "/root/.bashrc: line 17: bind: warning: line editing not enabled",
        "/root/.bashrc: line 18: bind: warning: line editing not enabled",
        "total 20",
        "-rw-r--r--. 1 root root 558 Apr  1 15:13 loglist.txt",
        "-rw-r--r--. 1 root root 659 Apr  1 13:48 nginx.conf.bak",
        "-rw-r--r--. 1 www  www  659 Apr  1 13:42 nginx.conf.j2",
        "-rw-r--r--. 1 root root  15 Mar 31 14:20 test",
        "-rw-------. 1 root root  15 Mar 31 18:24 test1"
    ]
}

playbook版本:

playbook文件
[root@ansible-leader /etc/ansible/play]$vim run_local_script.yml
---
- name: Run a local script on remote hosts
  hosts: leader
  tasks:
    - name: Execute myscript.sh on the remote host
      script: /etc/ansible/scripts/check_tmp.sh
      args:
        executable: /bin/bash # 如果脚本需要特定解释器,请指定
      register: script_result

    - name: Show the result of the script execution
      debug:
        msg: "{{ script_result.stdout }}"

#script:    脚本所在位置,
#args:      这里知道了一个脚本执行的解释器,这里使用的是bash,
如果是py那就指定py,如果是golang 那就指定go.的解释器路径.
执行playbook
[root@ansible-leader /etc/ansible/play]$ansible-playbook run_local_script.yml
[WARNING]: Found both group and host with same name: leader

PLAY [Run a local script on remote hosts] **********************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [leader]

TASK [Execute myscript.sh on the remote host] ******************************************************************************************************************************
changed: [leader]

TASK [Show the result of the script execution] *****************************************************************************************************************************
ok: [leader] => {
    "msg": "/root/.bashrc: line 17: bind: warning: line editing not enabled\r\n/root/.bashrc: line 18: bind: warning: line editing not enabled\r\ntotal 20\r\n-rw-r--r--. 1root root 558 Apr  1 15:13 loglist.txt\r\n-rw-r--r--. 1 root root 659 Apr  1 13:48 nginx.conf.bak\r\n-rw-r--r--. 1 www  www  659 Apr  1 13:42 nginx.conf.j2\r\n-rw-r--r--. 1 root root  15 Mar 31 14:20 test\r\n-rw-------. 1 root root  15 Mar 31 18:24 test1\r\n"
}

PLAY RECAP *****************************************************************************************************************************************************************
leader                     : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值