一、setup模块

ansible的 setup模块主要用来收集信息, 查看参数:

[root@localhost ~]# ansible-doc -s setup        # 查看参数,部分参数如下:
filter # 过滤,筛选

  示例一:查看所有信息

ansible  cache  -m  setup     #  查看cache组的被管控机的信息,  可查到部分信息如下
ansible_all_ipv4_addresses # ipv4的所有地址
ansible_all_ipv6_addresses # ipv6的所有地址
ansible_date_time # 获取到控制节点时间
ansible_default_ipv4 # 默认的ipv4地址
ansible_distribution # 系统
ansible_distribution_major_version # 系统的大版本
ansible_distribution_version # 系统的版本号
ansible_domain # 系统所在的域
ansible_env # 系统的环境变量
ansible_hostname # 系统的主机名
ansible_fqdn # 系统的全名(主机名+域名)
ansible_machine # 系统的架构
ansible_memory_mb # 系统的内存信息
ansible_os_family # 系统的家族
ansible_pkg_mgr # 系统的包管理工具
ansible_processor_cores # 系统的cpu的核数(每颗)
ansible_processor_count # 系统cpu的颗数
ansible_processor_vcpus # 系统cpu的总个数=cpu的颗数*CPU的核数
ansible_python # 系统上的python

示例二:搜索某个信息

ansible  cache -m setup  -a  'filter=*processor*'    #用来搜索,  *代表匹配任意个任意字符,可自行回顾正则表达式相关知识,可得如下信息
192.168.133.132 | SUCCESS => {
"ansible_facts": {
"ansible_processor": [
"",
"GenuineIntel",
"Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz"
],
"ansible_processor_cores": 1,
"ansible_processor_count": 1,
"ansible_processor_threads_per_core": 1,
"ansible_processor_vcpus": 1
},
"changed": false
}

二、ansible剧本

1、条件判断

  ansible的playbook 支持条件判断, 当针对不同系统, 不同版本, 不同环境, 不同用户有不同操作时,可以使用 when  做条件判断, 示例如下:

[root@localhost yaml]# vi p5.yml               # 写一个yml文件,内容如下:
- hosts: db
remote_user: root
tasks:
- name: createfile3
copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt
when: a==""
- name: createfile4
copy: content="小弦切切如私语" dest=/tmp/a.txt
when: a==""
[root@localhost yaml]# ansible-playbook --syntax-check p5.yml # 验证语法合法性 playbook: p5.yml
[root@localhost yaml]# ansible-playbook -e 'a="3"' p5.yml # 只执行name为 createfile3 的任务,结果自行验证

3、循环with_items

通常你想在一个任务中干很多事,比如创建一群用户、安装很多包、或者重复一个轮询步骤直到收到某个特定结果,这时就可以使用循环。

循环里面只能是  item

示例一:单个循环

[root@localhost yaml]# vi p7.yml
- hosts: web
tasks:
- name: createuser
user: name={{ item }}
with_items:
- zhangsan
- lisi
- wangwu
[root@localhost yaml]# ansible-playbook --syntax-check p7.yml playbook: p7.yml
[root@localhost yaml]# ansible-playbook p7.yml

示例二:多个循环

[root@localhost yaml]# vi p8.yml               # 写入如下内容
- hosts: web
tasks:
- name: createuser
user: name={{ item }}
with_items:
- zs
- lss
- ww
- name: creategroup
group: name={{ item }}
with_items:
- yunwei
- kaifa
- ceshi
[root@localhost yaml]# vi p8.yml
[root@localhost yaml]# ansible-playbook --syntax-check p8.yml playbook: p8.yml
[root@localhost yaml]# ansible-playbook p8.yml # 执行命令,结果自行验证

  示例三:循环嵌套

[root@localhost yaml]# vi p9.yml          # 写入如下内容
- hosts: web
tasks:
- name: creategroup
group: name={{ item }}
with_items:
- yunwei
- kaifa
- ceshi
- name: createuser
user: name={{ item.name }} group={{ item.group }}
with_items:
- {'name':zs,'group':yunwei}
- {'name':lss,'group':kaifa}
- {'name':ww,'group':ceshi}
[root@localhost yaml]# ansible-playbook p9.yml # 结果自行验证 playbook: p9.yml
[root@localhost yaml]# ansible-playbook p9.yml

4、template模块

  先来回忆一下redis的安装,为了安全起见,我们通常在redis安装完成后要更改redis的配置文件redis.conf,其中有一项是更改bind参数,让redis可以远程访问,实际开发中bind 参数为本机对外ip地址,而不能使用0.0.0.0开启,这时,问题来了,使用ansible批量传输配置文件时,如何将bind参数设置为被管控机的ip地址?

首先,我们使用setup模块查询一下被管控机的ip地址,如下:

在管控机上安装redis后,编辑配置文件redis.conf,更改bind参数如下:

vi  /etc/redis.conf    # 编辑redis配置文件,更改bind参数为如下内容

示例:

[root@localhost yaml]# vi p10.yml
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
template: src=/etc/redis.conf dest=/etc/redis.conf
- name: start
service: name=redis state=started
[root@localhost yaml]# ansible-playbook --syntax-check p10.yml playbook: p10.yml
[root@localhost yaml]# ansible-playbook p10.yml

验证:查看web组的被管控机的redis配置文件中bind参数

copy 模块与template 模块的区别:  copy 模块不替换参数, 而template模块替换参数.使用相对路径:  在上面p10.yml 中, template模块的src参数使用的是绝对路径, 除此之外,我们还可以使用相对路径,如下 :

[root@localhost yaml]# vi p10.yml
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
template: src=redis.conf dest=/etc/redis.conf
- name: start
service: name=redis state=started
[root@localhost yaml]# ansible-playbook --syntax-check p10.yml playbook: p10.yml
[root@localhost yaml]# ansible-playbook p10.yml

注意:  使用相对路径的前提是在当前目录  (p10.yml 文件所在目录)  下 新建一个templates  (必须叫这个)  目录, 然后把文件redis.conf放在templates目录里面

 

5、handlers

上面我们曾提到过, modul 具有 "幂等" 性,  所以当远端系统被人修改时, 可以重放 playbooks 达到恢复的目的, playbooks 本身可以识别这种改动, 并且有一个基本的event sysem(事件系统), 可以响应这种改动, (当发生改动时)  'notify'  actions 会在playbook的每一个task结束时触发, 而且即使有多个不同的task 通知改动的发生 , notify   actions 只会被触发一次.

  举例来说,比如多个 resources 指出因为一个配置文件被改动,所以 apache 需要重新启动,但是重新启动的操作只会被执行一次。

  'notify' 下列出的即是 handlers。Handlers 也是一些 task 的列表,通过名字来引用,它们和一般的 task 并没有什么区别。Handlers 是由通知者进行 notify,如果没有被 notify,handlers 不会执行,不管有多少个通知者进行了 notify,等到 play 中的所有 task 执行完成之后,handlers 也只会被执行一次。

示例:

[root@localhost yaml]# vi p11.yml
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
template: src=redis.conf dest=/etc/redis.conf
tags: copyfile
notify: restart
- name: start
service: name=redis state=started
handlers:
- name: restart
service: name=redis state=restarted
[root@localhost yaml]#
[root@localhost yaml]# ansible-playbook --syntax-check p11.yml playbook: p11.yml
[root@localhost yaml]#
[root@localhost yaml]# ansible-playbook p11.yml
[root@localhost yaml]# ansible-playbook -t copyfile p11.yml # 执行copyfile任务 和 restart任务,即修改完配置文件后重启redis服务

三、roles

现在我们已经学过 tasks 和 handlers,那怎样组织 playbook 才是最好的方式呢?简单的回答就是:使用 roles ! roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。基于 roles 对内容进行分组,使得我们可以容易地与其他用户分享 roles 。

  roles的优点:

  - 目录清晰

  - 可以互相调用

  roles目录结构:

  - 文件夹里面是要创建的每一个角色,每一个角色一个文件夹;

  - 每一个角色里面都有tasks(必须的),templates,files,handlers,vars目录;

  - 每个目录都要有main.yml文件,通过import_tasks来调用;

  - 其中templates文件夹中的文件可以通过相对路径来调用;

  其中files文件夹中的文件是否可以通过相对路径来调用?

  示例:

root
├── roles
│ ├── cache
│ ├── db
│ └── web
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ ├── copy_redis_conf.yml
│ │ ├── install_redis.yml
│ │ ├── main.yml
│ │ └── start_redis.yml
│ ├── templates
│ │ └── redis.conf.j2
│ └── vars
└── web.yml
- name: install_redis
yum: name=redis

root/roles/web/tasks/install_redis.yml

- name: copy_redis_conf
template: src=redis.conf.j2 dest=/etc/redis.conf
tags: copy_redis_conf
notify: restart_redis

root/roles/web/tasks/copy_redis_conf.yml

- name:  start_redis
service: name=redis state=started

root/roles/web/tasks/start_redis.yml

- import_tasks: install_redis.yml
- import_tasks: copy_redis_conf.yml
- import_tasks: start_redis.yml

root/roles/web/tasks/main.yml

- name:  restate_redis
service: name=redis state=restarted

root/roles/web/handlers/main.yml

- hosts: web
remote_user: root
roles:
- web

root/web.yml

ansible-playbook  web.yml
ansible-playbook -t copy_redis_conf web.yml # 修改配置文件后加参数-t,触发handler中任务

四、nginx基于uwsgi部署django

参考博客:https://blog.51cto.com/wangfeng7399/2341281

思考:如何用roles 来安装nginx+uwsgi+mariadb + redis?

ansible初识三的更多相关文章

  1. ansible入门三(Ansible的基础元素和YAML介绍)

    Ansible的基础元素和YAML介绍   本节内容: YAML Ansible常用的数据类型 Ansible基础元素 一.YAML 1. YAML介绍 YAML是一个可读性高的用来表达资料序列的格式 ...

  2. ansible初识二

    一.ansible模块(yum.pip.service.conr.user.group) 上篇中我们已经学了ansible 的几个模块, 接下来再来学习几个, 那么你是否知道ansible 一共有多少 ...

  3. Ansible系列(三):YAML语法和playbook写法

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  4. ansible初识

    ansible: 运维自动化的工具, 基本功能, 基于ssh远程连接, 连接验证(ssh-keygen ssh-copy-id  ip) 下载: 1. 安装epel源 wget -O /etc/yum ...

  5. python初识(三)

    目录: 字符编码 文件操作 循环结构拾遗 函数 整体介绍 函数的参数 函数的返回值 函数的调用 自定义函数 一.字符编码 1.了解字符编码的知识储备 a. 文件编辑存取文件的原理(nodepad++, ...

  6. 1、Ansible初识简要介绍及安装

    1.Ansible简介 1.1 Ansible介绍 Ansible 是一个简单的自动化运维管理工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...

  7. ansible(三)

    setup ansible_all_ipv4_addresses # ipv4的所有地址 ansible_all_ipv6_addresses # ipv6的所有地址 ansible_date_tim ...

  8. Photon Server初识(三) ---ORM映射改进

    一:新建一些管理类, 二.实现每个管理类 (1)NHibernateHelper.cs 类,管理数据库连接 using NHibernate; using NHibernate.Cfg; namesp ...

  9. JQuery初识(三 )

    一丶JQuery的文档操作 1.插入操作: 父元素.append(子元素) 解释:追加某元素,在父元素中添加新的子元素.子元素可以为:stirng|element(js对象)|JQuery元素 var ...

随机推荐

  1. vue做路由页面内容跳转

    安装----npm npm install vue-router 如果在一个模块化工程中使用它,必须要通过 Vue.use() 明确地安装路由功能: import Vue from 'vue' imp ...

  2. ubuntu下erlang man的安装

    下载 http://www.erlang.org/download/otp_doc_man_17.1.tar.gz 找到erlang 安装目录 解压 otp_doc_man_17.1.tar.gz s ...

  3. Javascrpt 速成篇】 三:js事件处理

    ie和chrome,firefox的事件处理,除了函数名字不同,基本大同小异.这样就已chrome为主了,对ie有兴趣的自己去百度.jquery已经处理不同浏览器兼容性问题,推荐使用. 事件处理有两种 ...

  4. wampserver2.5的php.ini位置在wamp\bin\apache\apache2.4.9\bin

    wampserver2.5的php.ini位置在wamp\bin\apache\apache2.4.9\bin php.ini有多个地方,C:\wamp\bin\php\php5.5.12下面有php ...

  5. erl_0017 《硝烟中的erlang》 读书笔记004 “锁和阻塞”

    如果某个进程需要持续地接收新任务,那么其在执行耗时过长的锁或者阻塞操作时,就会出现问题. 最为常见的例子之一就是:某个进程使用了TCP socket,阻塞在了接收新的连接或者等待消息上面.在执行此类阻 ...

  6. Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码

    Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够分析我们的项目文件. 作为 Roslyn 入门篇文章,你将可以通过本文学习如何开始编写一个 R ...

  7. normalizr api 转换类库使用

    1. 项目初始化 yarn init yarn add normalizr 项目结构 app.js package.json user.json 2. 使用 a. app.js const userj ...

  8. bzoj 1670 [Usaco2006 Oct]Building the Moat护城河的挖掘——凸包

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1670 用叉积判断.注意两端的平行于 y 轴的. #include<cstdio> ...

  9. kotlin与fastjson的异常

    出现这个原因是因为kotlin的非空特性. 如果一个类中声明了一个字段(kotlin的特性,该字段默认是非空的), 使用fastjson进行转化的时候,如果json数据中没有该字段的数据,则会出现转换 ...

  10. Java通过aws java sdk在AWS S3上进行操作客户端

    有两种方式可以安装aws java sdk:方式一:可以在这个网站上下载适用于 Java 的 AWS 开发工具包https://aws.amazon.com/cn/sdk-for-java/点击网页右 ...