zoukankan      html  css  js  c++  java
  • ansible 模块 roles

    setup

    作用,用来查看用看内部的详细信息

    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*' # 用来搜索

    条件判断

    作用:不同的系统

    • 不同的版本

    • 不同的环境

    • 不同的用户

    标准:

    - hosts: db
      remote_user: root
      tasks:
      - name: createfile
        copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt
        when: a=="3"
      - name: cratefile
        copy: content="小弦切切如私语" dest=/tmp/a.txt
        when: a=="4"

    在执行时,需要传参进行判断

    ansible-playbook -e 'a=="3""' p1.yml

    Ubuntu 安装包的方式是apt-get

    tags

    标准:

    - hosts: web
      tasks:
      - name: installnginx
        yum: name=nginx
      - name: copyfile
        copy: src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf
        tags: copyfile
      - name: start
        service: name=nginx state=started

    #使用tags作用是在多个任务中只选择一个执行,在执行的下面输入 tags=name

    执行

    ansible-playbook -t copyfile p7.yml 
    #使用 - t name 进行执行

    循环 with_item

    一次性创建多个

    - hosts: web
      tasks:
      - name: crateuser
        user: name={{item}}
        with_items:
        - alex20
        - alex21
        - alex22

    - hosts: web
      tasks:
      - name: crateuser
        user: name={{item}}
        with_items:
        - alex30
        - alex31
        - alex32
      - name: crategroup
        group: name={{item}}
        with_items:
        - wulaoshi20
        - wulaoshi21
        - wulaoshi22
    #都可以用{{item}}为参数传递

    嵌套循环

    - hosts: web
      tasks:
      - name: crategroup
        group: name={{item}}
        with_items:
        - wulaoshi30
        - wulaoshi31
        - wulaoshi32
      - name: createuser
        user: name={{item.name}} group={{item.group}}
        with_items:
        - {'name':alex40,'group':wulaoshi30}
        - {'name':alex41,'group':wulaoshi31}
        - {'name':alex42,'group':wulaoshi32}
    
    #通过进行字典的创建来完成嵌套

    template:

    copy和tamplate的区别

    • copy模块不替代参数

    • template模块替代参数

    绝对路径

    - hosts: web
      tasks:
      - name: installredis
        yum: name=redis
      - name: copyfile
        template: src=/etc/redis.conf dest=/etc/redis.conf
    #使用绝对路径写
    - name: start service: name=redis state=started 配置文件: bind {{ ansible_default_ipv4.address }}

    相对路径

    - hosts: web
      tasks:
      - name: installredis
        yum: name=redis
      - name: copyfile
        template: src=redis.conf dest=/etc/redis.conf
      - name: start
        service: name=redis state=started
    - hosts: web
    tasks:
     - name: installredis
      yum: name=redis
     - name: copyfile
      template: src=redis.conf dest=/etc/redis.conf
     - name: start
       service: name=redis state=started

    ps:写相对路径: 在当前目录下新建一个templates目录,然后把文件放在templates目录里面 将文件cp到templates

     

    handlers

    作用:修改配置文件,在触发时生效

    - hosts: web
      tasks:
      - name: installredis
        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
    回顾 playbook
    
    传参
    
    条件判断 when
    
    循环 with_items  item
    
    嵌套循环  字典  通过点来取值
    
    标签  tags  -t 来传递标签
    
    模板  template 
    
    handlers   不会执行, notify

    roles

    • 目录清晰

    • 可以互相调用

    使用:
    在/root 下新建文件夹  

    mkdir roles

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

    mkdir web
    mkdir acahe
    mkdir db

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

    -pv mkdir {tasks(必须的),templates,files,handlers,vars}
    递归创建文件夹

    在每一个目录下,都要创建main.yml文件,通过import_tasks来调用,tasks下的main.yml

    - import_tasks: copyfile.yml
    - import_tasks: install.yml
    - import_tasks: start.yml
    - import_tasks: roles/db/tasks/createuser.yml

    tasks目录下的任务

    copyfile.yml

    - name: copyfile
      template: src=redis.conf.j2 dest=/etc/redis.conf
      tags: copyfile
      notify: restart

    install.yml

    - name: install
      yum: name=redis
    ~                  

    start.yml

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

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

    在 templates  文件夹下为相对路径template 录入文件

    cp /etc/redis/redis.conf  /redis.conf.j2

    将文件名改为jinjia2 格式

    在这些步骤完成后,就差启动了 ,创建 roles 文件夹下同级目录 ,web.yml

    - hosts: web
      remote_user: root
      roles:
      - web
    ansible-playbook --syntax-check web.yml
    ansible-playbook -t copyfile web.yml

     如何调用roles ?

    进入roles 文件夹

    假设roles 下的db 使用web 的文件夹

    进入 db 文件夹下,

     创建文件 createuser.yml

    - name: createuser
      user: name=alex888
                        

    由于是借助web 文件下的roles,所以到

     在main.yml写入

    - import_tasks: copyfile.yml
    - import_tasks: install.yml
    - import_tasks: start.yml
    - import_tasks: roles/db/tasks/createuser.yml  #这个借助要使用绝对路径

     最后启动web.yml就好了

  • 相关阅读:
    数据库为什么要分区分表
    搜索时 搜索条件在被搜索范围内
    Spring RestTemplet https请求
    微信三方平台接入
    在安装RedisDesktopManager的时候遇到 .dll文件缺失解决办法
    Spring中常见的设计模式——装饰者模式
    Spring中常见的设计模式——适配器模式
    Spring中常见的设计模式——模板模式
    Spring中常见的设计模式——策略模式
    Spring中常见的设计模式——代理模式
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/10415621.html
Copyright © 2011-2022 走看看