zoukankan      html  css  js  c++  java
  • ansible写一个简单的playbook

    前言

    实现的功能很简单,就是通过ansible批量完成某个账户sudo权限的开通或关闭

    目录结构

    ├── group_vars #放置各种变量的目录,我这里没用
    ├── hosts #主机和组配置,默认为/etc/ansible/hosts
    ├── roles #角色目录,里边可以有多个角色,这里只配置了一个common
    │   └── common
    │       ├── files #用于目录分发的目录
    │       ├── handlers #放置处理程序,如重启某个服务
    │       │   └── main.yml
    │       ├── tasks #任务列表
    │       │   └── main.yml
    │       └── templates #放置模板目录,这里未用
    └── site.yml #主入口配置,ansible-playbook 执行的第一个参数,也可以叫别的名称
    

    文件内容

    hosts

    [ctx-lf-web] 
    10.199.72.34 
     
    [ctx-bj-web] 
    10.0.32.34 
     
    [ctx-lf-db]  
    10.199.134.21 
     
    [ctx-bj-db]  
    10.0.32.39 
     
    [ctx-web:children] #通过这种方式,将lf和bj这2个组的主机都归类为ctx-web中,这样后续site.yml的host绑定ctx-web就可以操作以下两个分组
    ctx-lf-web 
    ctx-bj-web 
     
    [ctx-db:children] 
    ctx-lf-db 
    ctx-bj-db 
     
    [ctx-bj:children] 
    ctx-bj-web 
    ctx-bj-db 
     
    [ctx-lf:children] 
    ctx-lf-web 
    ctx-lf-db 
    

    site.yml

    --- 
    - hosts: [ctx-bj, ctx-db] #可以选择多个分组,这个要和hosts中能找到
      remote_user: sre #因为需要通过远端普通用户使用sudo的方式,所以还需要配置sudo
      sudo: yes 
      roles: 
      - common #将hosts和common这个角色绑定,这个common需要在roles目录中存在
    

    roles/common
    其中包括很多目录,因为需求很简单,只配置了tasks/main.yml

    --- 
    # 安装libselinux-python,如果目标机打开了selinux,需要安装这个包才可以执行写的操作
    - name: ensure libselinux-python 
      yum: name=libselinux-python state=latest 
      tags: #tags打上一个标签,这样当ansible-playbook执行脚本的时候,如果不加--tags 参数,将会执行所有tasks,如加上--tags 某个tags名,则只会执行打上对应tags的tasks
        - comment_appuser_sudo 
        - add_appuser_sudo  
     
    # 注释appuser sudo 
    - name: Commented-Out appuser sudo  
      lineinfile: dest=/etc/sudoers state=absent regexp="^(appuser.*)$"  validate="visudo -cf %s" #sudoers中删除以appuser开头的用户,其实更科学应该设置一个vars,把appuser作为一个变量这样更灵活
      tags: 
        - comment_appuser_sudo 
     
    # 添加appuser sudo 
    - name: Add appuser sudo   
      lineinfile: dest=/etc/sudoers insertafter="^sre" line="appuser  ALL=(ALL)       NOPASSWD:ALL" validate="visudo -cf %s" #在sre开头那行后边加入line的信息
      tags:  
        - add_appuser_sudo 
    

    执行

        ansible-playbook -i hosts site.yml --tags comment_appuser_sudo -f 4 #-f并行处理的个数,默认5个,-i指定hosts文件,后接入口yml文件,注意tags,这里选择了comment...将会执行ensure libselinux-python 和Commented-Out appuser sudo这2个tasks,如不接tags参数,则所有tasks都执行
    

    当然,以上都是多此一举

    ansible ctx-bj-web -i hosts -m lineinfile -a "dest=/etc/sudoers state=absent regexp='^(appuser.*)$'  validate='visudo -cf %s'" -u sre -s
    其实一条命令就搞定了
    
  • 相关阅读:
    NSHashtable and NSMaptable
    架构的本质:构造定律与结合规则
    软件复用的基础和形式
    架构模式:循环模式、管道模式
    待整理
    functions and closures are reference types-函数和闭包是引用类型
    @autoclosure-可以让表达式自动封装成一个闭包:输入的是一个表达式
    Python 运算符优先级
    Linux下chkconfig命令详解
    Linux下Redis开机自启(Centos)
  • 原文地址:https://www.cnblogs.com/caseast/p/5181910.html
Copyright © 2011-2022 走看看