Ansible playbooks常用模块介绍
File模块
#在目标主机创建文件或目标,并赋予其系统权限
- name: create a file
file: 'path=/root/foo.txt state=touch mode=0755 owner=foo group=foo'
-name:创建一个文件
file:声明调用的是一个file模块
path:定义需要在目标主机上创建一个root/ foo.txt
state=touch:定义我们创建一个文件
mode:给予创建的文件赋予权限
owner:文件的属组为foo用户
group:文件的属组为foo属组
Copy模块
#实现Ansible服务端到目标主机的文件传送
-name:create a file
copy: 'remote_src=no src=roles/testbox/file/foo.sh
dest=/root/foo.sh mode=0644 force=yes'
-name:使用一个文件
copy:
remote_src=no:声明将原Ansible主机端的文件传送到目标主机当中
src:声明源文件为该路径的文件夹
dest:将原地址的foo.sh传送到目标foo.sh
mode:给予创建的文件赋予权限
force:定义copy任务,强制执行
Stat模块
#获取远程文件状态信息
- name: chenk if foo.sh exists
stat: 'path=/root/foo.sh'
register: script_stat
name:定义任务名称foo.sh是否存在
stat:声明任务模块调用的是stat
path:定义当前需要去获取的文件路径
register:将获取到文件信息传送到script_stat
Debug模块
#打印语句到Ansible执行输出
- debug: msg="foo.sh exists"
when: script_stat.stat.exists
debug:定义debug模块输出的语句内容为foo.sh exists
when:
如果foo.sh存在就是Ansible打印输出信息,不存在就不打印
Command/Shell模块
#用来执行linux目标主机命令行
-name:run the script
command: "sh /rootfoo.sh"
-name:run the script (推荐)
shell: "echo 'test' > /root/test.txt "
Command/Shell编写可参考:http://zhangyongbo.iteye.com/blog/2428777
Template模块
#用来实现Ansible服务端到目标主机的jinja2模块传送
- name:write the nginx config file
template:src=roles/testbox/templates/nginx.conf.j2
dest=/ect/nginx/nginx.conf
name:定义一个任务名称编写nginx配置文件
template:声明语句调用的是template模块
src:定义原模板文件在/roles../ nginx.conf.j2
dest:目标目录,将src文件传送到/ect/.../ nginx.conf重命名为nginx.conf
Packaging模块
#调用目标主机系统包管理工具(yum,apt)进行安装
- name:ensure nginx is at the latest version
yum:pkg=nginx state=latest ---------->CenOS&RedHat系统
- name:ensure nginx is at the latest version
apt:pkg=nginx state=latest ---------->Debian&Ubuntu系统
Service模块
#管理目标主机系统服务
- name:start nginx service
service:name=nginx state=started
编写完成的Ansible Playbooks模块
Ansible playbooks常用模块案例操作
1.使用Git Bash
代码语言:javascript复制$ ssh root@47.98.198.241
# su - deploy
#启动py3.6的环境
# source .py3-a2.5-env/bin/activate
#加载Ansible2.5版本
# source .py3-a2.5-env/ansible/hacking/env-setup
#检查是否加载py3.6环境以及在该py3.6环境下加载了ansible-playbook 2.5
# ansible-playbook --version
代码语言:javascript复制
代码语言:javascript复制2.ssh登录到目标主机
3.切换Ansible用户下
#编辑testbox主任务文件
# vi roles/testbox/tasks/main.yml
#测试编写的file模块任务,执行deploy.yml是否成功
# ansible-playbook -i inventory/testenv ./deploy.yml
运到错误:
还有这个错误:
解决办法:该目标主机没有foo用户,选择赋予其他用户权限和组
#测试成功Ansible playbooks常用的模块介绍
#已经创建ok的文件
3.切换Ansible用户下
代码语言:javascript复制#使用deploy用户创建
# mkdir roles/testbox/files
#编辑foo.sh并写入测试脚本
# vi roles/testbox/files/foo.sh
echo 'this is test script'
代码语言:javascript复制#测试ok的返回结果
4.添加Stat模块任务
代码语言:javascript复制#添加stat模块和debug模块
# vi roles/testbox/tasks/main.yml
- name: chenk if foo.sh exists
stat: 'path=/root/foo.sh'
register: script_stat
- debug: msg="foo.sh exists"
when: script_stat.stat.exists
#测试是否成功
# ansible-playbook -i inventory/testenv ./deploy.yml
代码语言:javascript复制
5.添加Stat模块任
代码语言:javascript复制#添加command模块远程执行主机
# vi roles/testbox/tasks/main.yml
- name: run the script
command: "sh /root/foo.sh"
#测试是否成功
# ansible-playbook -i inventory/testenv ./deploy.yml
代码语言:javascript复制
6.添加一个Template模块任
代码语言:javascript复制#编辑inventory/testenv文件添加参数值
server_name=test.example.com
port=80
user=deploy
worker_processes=4
max_open_file=65505
root=/www
代码语言:javascript复制
7.创建templates目录文件
代码语言:javascript复制# mkdir roles/testbox/templates
# vi roles/testbox/templates/nginx.conf.j2
# vi roles/testbox/tasks/main.yml
# ansible-playbook -i hosts site.yml
代码语言:javascript复制