-
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