打开git bash 连接ansible服务器,然后进入deploy用户

#ssh root@192.168.96.188

进入python3.6虚拟环境

#su - deploy

#source .py3-a2.5-env/bin/activate

加载ansible 2.5版本

#source .py3-a2.5-env/ansible/hacking/env-setup -q

验证ansible加载效果

#ansible-playbook --version

1、File模块

登录到目标主机进行预配置工作

#ssh root@test.example.com

创建两个系统用户

# useradd foo
# useradd deploy

登出,回到ansible的主机,进入到test_playbooks目录。编辑主任务文件,添加测试任务。保存退出

# vi roles/testbox/tasks/main.yml

- name: create a file            # 创建文件file
file: 'path=/root/foo.txt state=touch mode=0755 owner=foo group=foo' #path为文件路径 #state为所用命令 #mode 为文件权限 #owner 为设置的系统用户名称 #group 为宿主

执行测试任务

# ansible-playbook -i inventory/testenv ./deploy.yml

查看文件是否创建成功

# ssh root@test.example.com ls -l /root/foo.txt

创建安装nginx需要的文件,复制下面的脚本,进行保存

# vi roles/testbox/files/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true [nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

2、Copy模块

先创建一个files目录,在目录下创建一个脚本文件,添加一下内容,保存退出

# mkdir roles/testbox/files

# vi roles/testbox/files/foo.sh

echo "This is a test script"

编辑主任务配置文件,保存退出。

# vi roles/testbox/tasks/main.yml

- name: copy a file
copy: 'remote_src=no src=roles/testbox/files/foo.sh dest=/root/foo.sh mode=0644 force=yes' #remote_src 定义当前拷贝任务是将ansible本地server文件传送到目标主机中 #src 本地文件 传送 #dest 目标主机文件 #mode 设置文件权限 #force 定义拷贝任务强制执行

编辑好文件之后,执行任务

# ansible-playbook -i inventory/testenv ./deploy.yml

3、Stat模块、Debug模块

编辑主任务配置文件,添加以下内容

#  vi roles/testbox/tasks/main.yml

# 获取远程foo.sh的文件状态信息
- name: check if foo.sh exists
stat: 'path=/root/foo.sh'
register: script_stat
# 将stat文件信息,放到when的判断语句中,如果判断成功,dubug输出foo.sh exists
- debug: msg="foo.sh exists"
when: script_stat.stat.exists

编辑好文件之后,执行任务

# ansible-playbook -i inventory/testenv ./deploy.yml

4、Command/Shell模块

编辑主任务配置文件,添加以下内容

#  vi roles/testbox/tasks/main.yml

# 远程执行foo.sh脚本
- name: run the script
command: 'sh /root/foo.sh'

编辑好文件之后,执行任务

# ansible-playbook -i inventory/testenv ./deploy.yml

5、Template模块、Packaging模块、Service模块

添加一些参数到testenv的文件当中,添加如下参数

# vi vi inventory/testenv

server_name=test.example.com
port=80
user=deploy
worker_processes=4
max_open_file=65505
root=/www

创建templates目录,然后创建一个nginx.conf.j2的模块文件,添加配置信息

# mkdir roles/testbox/templates

# vi roles/testbox/templates/nginx.conf.j2

# For more information on configuration, see:
user {{ user }}; # user变量
worker_processes {{ worker_processes }}; # 变量 error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events {
worker_connections {{ max_open_file }}; #变量
} 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 0;
keepalive_timeout 65; #gzip on; # Load config files from the /etc/nginx/conf.d directory
# The default server is in conf.d/default.conf
#include /etc/nginx/conf.d/*.conf;
server {
listen {{ port }} default_server; # 端口变量
server_name {{ server_name }}; #服务器名称变量 #charset koi8-r; #access_log logs/host.access.log main; location / {
root {{ root }}; # root变量
index index.html index.htm;
} error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
} # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
} } }

编辑主任务配置文件,添加以下下内容

#  vi roles/testbox/tasks/main.yml

# 将模板写入目标主机配置文件
- name: write the nginx config file
template: src=roles/testbox/templates/nginx.conf.j2 dest=/etc/nginx/conf.d/default.conf # yum安装nginx
- name: ensure nginx is at the latest version
yum: pkg=nginx state=latest # 启动nginx服务
- name: start nginx service
service: name=nginx state=started

编辑好文件之后,执行任务

# ansible-playbook -i inventory/testenv ./deploy.yml

检查nginx.conf.j2文件的参数变量,是否写入nginx主配置文件

# ssh root@test.example.com cat /etc/nginx/conf.d/default.conf

检查远程主机nginx是否启动

# ssh root@test.example.com ps -ef  | grep nginx

main.yml文件

- name: Print server name and user to remote testbox
shell: "echo 'Currently {{ user }} is logining {{ server_name }}' > {{ output }}"
- name: create a file
file: 'path=/root/foo.txt state=touch mode=0755 owner=foo group=foo'
- name: copy a file
copy: 'remote_src=no src=roles/testbox/files/foo.sh dest=/root/foo.sh mode=0644 force=yes'
- name: check if foo.sh exists
stat: 'path=/root/foo.sh'
register: script_stat
- debug: msg="foo.sh exists"
when: script_stat.stat.exists
- name: run the script
command: 'sh /root/foo.sh'
- name: Create a directory if it does not exist
file: 'path=/etc/nginx state=directory mode=0755'
- name: write the nginx config file
template: src=roles/testbox/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf
- name: copy a file
copy: 'remote_src=no src=roles/testbox/files/nginx.repo dest=/etc/yum.repos.d/nginx.repo mode=0644 force=yes'
- name: ensure nginx is at the latest version
yum: pkg=nginx state=latest
- name: start nginx service
service: name=nginx state=started

- name: Print server name and user to remote testbox
shell: "echo 'Currently {{ user }} is logining {{ server_name }}' > {{ output }}" # 远程创建文件
- name: create a files
file: 'path=/root/foo.txt state=touch mode=0755 owner=foo group=foo' # 将本地的文件拷贝到远程主机
- name: copy a files
copy: 'remote_src=no src=roles/testbox/files/foo.sh dest=/root/foo.sh mode=0644 force=yes' # 获取文件状态
- name: check if foo.sh exists
stat: 'path=/root/foo.sh'
register: script_stat # 判断文件是否存在
- debug: msg="foo.sh exists"
when: script_stat.stat.exists # 远程执行脚本文件
- name: run the script
command: 'sh /root/foo.sh' # 创建一个nginx的目录
- name: Create a directory if it does not exist
file: 'path=/etc/nginx state=directory mode=0755' # 从本地模板中写入nginx.conf文件
- name: write the nginx config file
template: src=roles/testbox/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf # 拷贝本地nginx安装需要的脚本
- name: copy a file
copy: 'remote_src=no src=roles/testbox/files/nginx.repo dest=/etc/yum.repos.d/nginx.repo mode=0644 force=yes' # yum安装nginx
- name: ensure nginx is at the latest version
yum: pkg=nginx state=latest # 启动nginx
- name: start nginx service
service: name=nginx state=started

Ansible playbooks常用模块案例操作的更多相关文章

  1. Ansible Playbooks 常用模块

    官网链接:https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html ansible python module ...

  2. Ansible Playbooks常用模块

    File模块 在目标主机创建文件或目录,并赋予其系统权限 - name: create a file file:'path=/oot/foo.txt state=touch mode=0755 own ...

  3. ansible api常用模块与参数

    ###ansibleAPI 常用模块 用于读取yaml,json格式的文件 from ansible.parsing.dataloader import DataLoader #用于管理变量的类,包括 ...

  4. ansible中常用模块详解

    ansible中常用的模块详解: file模块 ansible内置的可以查看模块用法的命令如下: [root@docker5 ~]# ansible-doc -s file - name: Sets ...

  5. Ansible之常用模块(一)

    ansible之所以功能强大,不是ansible本身,是因为它有众多的模块,前文我们介绍了ansible的基础介绍,系列命令的用法以及选项的说明,通过前文的学习我们知道了ansible是基于pytho ...

  6. ansible API 常用模块

    常用模块 用于读取yaml,json格式的文件 from ansible.parsing.dataloader import DataLoader #用于管理变量的类,包括主机,组,扩展等变量 fro ...

  7. ansible 四常用模块

    常用模块 Ansible默认提供了很多模块来供我们使用.在Linux中,我们可以通过 ansible-doc -l 命令查看到当前Ansible支持哪些模块,通过 ansible-doc -s [模块 ...

  8. ansible 003 常用模块

    常用模块 file 模块 管理被控端文件 回显为绿色则,未变更,符合要求 黄色则改变 红色则报错 因为默认值为file,那么文件不存在,报错 改为touch则创建 将state改为directory变 ...

  9. ansible小结常用模块

    根据官方的分类,将模块按功能分类为:云模块.命令模块.数据库模块.文件模块.资产模块.消息模块.监控模块.网络模块.通知模块.包管理模块.源码控制模块.系统模块.单元模块.web设施模块.window ...

随机推荐

  1. UVA 247"Calling Circles"(floyd求传递闭包+SCC)

    传送门 题意: 如果两个人相互打电话(直接或间接),则说他们在同一个电话圈里. (a,b) 表示 a 打给 b: 例如,(a,b),(b,c),(c,d),(d,a),则这四个人在同一个电话圈里: 输 ...

  2. js中的函数重载

    函数重载与js 什么是函数重载 重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数.类型或者顺序)必须不同,也就是说用 ...

  3. linux 注册一个 PCI 驱动

    为了被正确注册到内核, 所有的 PCI 驱动必须创建的主结构是 struct pci_driver 结构. 这个结构包含许多函数回调和变量, 来描述 PCI 驱动给 PCI 核心. 这里是这个结构的一 ...

  4. 使用SuperWebSocket实现Web消息推送

    在大部分Web系统中,我们可能遇到需要向客户端推送消息的需求.SuperWebSocket第三方库能让我们轻松的完成任务.SuperWebSocket第三方库可以从网上下载,不过通过Visual St ...

  5. UE4 中的 C++ 与 蓝图交互

    1.Unreal 引擎提供了两种创建新 Gameplay 元素的方法:C++ 和 蓝图视觉脚本. 通过 C++,程序员构建基础游戏系统:设计师可以基于此系统为场景 / 游戏创建自定义的游戏玩法. 这种 ...

  6. struts2生成随机验证码图片

    之前想做一个随机验证码的功能,自己也搜索了一下别人写的代码,然后自己重新用struts2实现了一下,现在将我自己实现代码贴出来!大家有什么意见都可以指出来! 首先是生成随机验证码图片的action: ...

  7. The Struts dispatcher cannot be found异常的解决方法

    系统错误:HTTP Status 500 异常信息:The Struts dispatcher cannot be found.  This is usually caused by using St ...

  8. 看各类框架源码淘来的一些JavaScript技巧

    1. 创建定长的JavaScript数组,并赋空值: 出自VUE文档Render函数讲解 // 创建定长20的JavaScript数组,并把每个项的值设为null Array.apply(null, ...

  9. DOCKER学习_009:Docker的镜像管理

    1 查看镜像 [root@docker-server3 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis days ago ...

  10. Python综合应用:教你用字符打印一张怀旧风格的照片

    1. 前言第一次在学校机房里见到计算机,还是上古时期.计算机型号大概是LASER-310吧,有点记不清了.那会儿,显示器还是单色的,只能显示文本,每行最多显示80个字符.想看图片,印象中只能用针式打印 ...