打开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. HDU 6709“Fishing Master”(贪心+优先级队列)

    传送门 •参考资料 [1]:2019CCPC网络选拔赛 H.Fishing Master(思维+贪心) •题意 池塘里有 n 条鱼,捕捉一条鱼需要花费固定的 k 时间: 你有一个锅,每次只能煮一条鱼, ...

  2. 解决:javac: 无效的目标发行版: 1.8

    原 解决:javac: 无效的目标发行版: 1.8 2017年06月14日 16:21:12 代码也文艺 阅读数 44795 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  3. 关于Character的digit,forDigit,getNumericValue方法的一点理解

    Character类是一个包装类. char这种数据类型是基于原始的Unicode编码的,储存一个char用16个bit,因此定义characters也是16位定长的实体集合. Unicode编码标准 ...

  4. H3C 路由表查找规则(2)

  5. HDU 3746 Cyclic Nacklace(kmp next数组运用)

    Cyclic Nacklace Problem Description CC always becomes very depressed at the end of this month, he ha ...

  6. 【74.00%】【codeforces 747A】Display Size

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  7. hdu 6852Path6(最短路+最小割)

    传送门 •题意 有n个城市,标号1-n 现花费最小的代价堵路 使得从1号城市到n号城市的路径边长 (注意只是变长不是最长) 堵一条路的代价是这条路的权值 •思路 在堵路以前,从1到n的最小路径当然是最 ...

  8. CodeForces 1204 (#581 div 2)

    传送门 A.BowWow and the Timetable •题意 给你一个二进制数,让你求小于这个数的所有4的幂的个数 •思路 第一反应是二进制与四进制转换 (其实不用真正的转换 QwQ) 由于二 ...

  9. CString::CompareNoCase与CString::Compare的区别

    转载:https://blog.csdn.net/lingdxuyan/article/details/4362116 函数原型:int CompareNoCase( LPCTSTR lpsz ) c ...

  10. Spring||Interview

    1.依赖注入(DI)(IOC) 对象本身不负责对象的创建和维护,将控制权转交给外部的容器实现,降低程序的耦合度,只提供java方法让容器决定依赖关系,依赖关系的对象通过JavaBean属性或者构造函数 ...