zoukankan      html  css  js  c++  java
  • ansible学习笔记二

    Ad-Hoc命令:

    所谓Ad-Hoc,简而言之是"临时命令",英文中作为形容词有"特别的,临时"的含义。Ad-Hoc只是官方对Ansible命令的一种称谓。

    从功能上讲,Ad-Hoc是相对于Ansible-playbook而言的,Ansible提供两种完成任务方式:一种是Ad-Hoc命令集,即ansible,另一种就是Ansible-playbook了,即命令Ansible-playbook。前者更注重于解决一些简单的或者平时工作中临时遇到的任务,相当于Linux系统命令行下的Shell命令,后者更适合与解决复杂或需固化下来的任务,相当于Linux系统的Shell Scripts。
    

    参考博客:

    Ansible 系列之 Ad-Hoc介绍及使用 - 飞走不可(博客园)

    Ansible Ad-Hoc命令集 - CSDN

    一、模块:

    1、yum

    1.内容补充

    1.yum和rpm的区别:

    rpm的全称叫redhat package manager,包管理工具
    yum可以解决安装包的依赖关系
    

    2.yum源配置

    [epel] # [名字]
    name=Extra Packages for Enterprise Linux 7 - $basearch  #描述信息
    baseurl=http://mirrors.aliyun.com/epel/7/$basearch  # yum源地址
    failovermethod=priority
    enabled=1  # 当前yum源是否启用,1代表启用,0代表不启用
    gpgcheck=0  # 用来检测gpgkey文件,1代表检测,0表示不检测
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    

    3.安装包组

    yum gruoplist  #查询包组信息
    yum groupinstall -y "包组名称"  #下载安装包组
    

    2.模块使用

    - disable_gpg_check  # 禁止检查gpgcheck
    - disablerepo  # 禁用repo源
    - enablerepo #启用repo源
    - name  #包的名称
    - state   #remove卸载 install安装
    
    ansible web -m yum -a 'name=python2-pip' # 安装python2-pip
    ansible web -m yum -a 'name=python2-pip,redis' #用来安装多个包
    ansible web -m yum -a 'name="@Development Tools"' # 用来安装包组
    

    2、pip

    1.内容回顾

    pip freeze > requirements.txt #导出安装的软件包
    pip list #列出当前Python环境下的软件包
    pip install -r requirements.txt #安装requirements.txt里面所有的依赖包
    

    2.模块使用

    chdir # 切换目录
    name # 包名
    virtualenv # 虚拟环境
    
    ansible web -m pip -a "name=flask"
    

    3、cron

    命令格式

    * * * * * job 分 时 日 月 周
    1 * * * * job 每小时的第一分钟
    2/* * * * * job 每隔2分钟做某件事
    2 2-18 * * * job 从2点到18点的第二分钟
    1 2 * * 0-7 job 星期取值范围是0-7
    crontab -l #列出所有crontab
    crontab -e #编辑
    crontab -r #删除
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    

    模块信息:

    day
    hour
    minute
    weekday
    month
    job #任务
    user #用户
    name #描述信息,默认是None
    state # absent删除 
    disabled #是否禁用 =yes禁用
    
    ansible web -m cron -a "minute=26 job='touch /tmp/alex.txt' name=touchfile"
    ansible web -m cron -a "minute=26 job='touch /tmp/alex.txt' name=touchfile disabled=yes" # 表示禁用crontab,禁用的时候不可以直接指定名称
    ansible web -m cron -a "name=touchfile state=absent" # 删除crontab,可以直接指定名称进行删除
    

    4、service

    内容回顾

    # centos6
    service redis start|stop|status|restart|reload  #Redis服务开启关闭等
    chkconfig redis on #设置Redis开机自启动
    
    # centos7
    systemctl status|start|stop|restart|reload redis
    systemctl enable redis #开机自启动
     
    ss -tnlp # 查看端口 = netstat -tunlp
    ps -ef # 查看进程
    

    模块使用

    name # 包名
    enabled # 开机自启动
    state # started|stopped|reloaded|restarted
    
    ansible web -m service -a 'name=redis state=started enabled=yes' #启动redis,并设置开机自启动
    ansible web -m service -a 'name=redis state=stopped' #关闭redis
    

    5、user

    内容回顾

    用户分为 管理员 和 普通用户
    - 管理员: uid=0(root) gid=0(root)属组 groups=0(root)附加组
    - 普通用户分为 可登录用户 和 不可登录用户(系统用户)
        - 不可登录用户(系统用户),如mysql,redis,nginx等,shell=/sbin/nologin
            - centos7:1-999
            - centos6:1-499 
        - 可以登录用户 
            - centos7:1000-65535
            - centos6:500-65535
    
    $ useradd -h
     -d, --home-dir #HOME_DIR 指定家目录
     -g, --gid GROUP  #指定gid
     -G, --groups GROUPS #指定用户的附加组
     -r, --system #创建系统用户,创建时uuid是倒序排列
     -s, --shell #SHELL 登录shell
     -u, --uid UID #指定uid
     
    vi /etc/passwd #查看创建的用户名和UUID等信息
    useradd -d /opt/alexsb2 alexsb2 #创建用户时指定家目录
    userdel 用户名 #删除用户但不删除家目录
    userdel -r alexsb # 删除用户并删除用那个的家目录
    

    模块使用

    name #用户名
    group #组名,属组gid
    groups # 附加组groups
    home # 家目录位置
    remove #删除用户的家目录
    shell # 用户登录的shell
    system # 系统用户
    uid # 用户id
     
    ansible db -m user -a "uid=500 system=yes groups=root name=mysql" # 创建mysql用户,指定用户为系统用户,并指定uid为500,指定附加组为root
    ansible db -m user -a "uid=3000 groups=mysql name=shujuku home=/opt/shujuku shell=/sbin/nologin" # 创建普通用户,并制定用户的家目录和登录shell(不可登录)以及uid,附加组
    ansible db -m user -a "name=canglaoshi remove=yes state=absent" # 删除用户
    

    6、group

    内容回顾

    用户组分为 管理员组 和 普通用户组
      管理员组的gid为0
      普通用户组gid从999开始递减  
    
    $ groupadd -h
    -g gid
    -r 系统用户组
    
    # 查看用户组:
    vi /etc/group
    tail -1 /etc/group 
    

    模块使用

    gid #组的id
    name #组的名字
    state #状态
    system #系统组
    
    ansible web -m group -a "name=alex10" # 用来创建用户组
    ansible web -m group -a "name=alex20 system=yes" # 用来创建系统组
    ansible web -m group -a "name=alex10 state=absent" # 删除用户组
    

    7、需求

    • 创建wusir20用户组,并指定为系统组

      ansible -m group -a "name=wusir20 system=yes"
      
    • 创建alex30用户,并制定家目录为/opt/alex30,登录shell为/sbin/nologin,并指定附加组为wusir20

      ansible -m user -a "name=alex30 home=/opt/alex30 shell=/sbin/nologin groups=wusir20"
      
    • 复制/etc/fstab文件到/tmp/f

      ansible -m copy -a "src=/etc/fstab dest=/tmp/f"
      
    • 创建/data目录

      ansible -m file -a "path=/data state=directory"
      
    • 安装nginx并启动它,并设置成开机自启动

      ansible -m yum -a "name=nginx"
      ansible -m service -a "name=nginx state=started enabled=yes"
      

    二、ansible-playbook

    简单来说,playbooks 是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署.

    Playbooks 可用于声明配置,更强大的地方在于,在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤.并且可以同步或异步的发起任务.

    通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列to-do-list

    1、yaml格式

    格式:
        字典:key:value
        列表:用-表示
        后缀名:.yaml 或者 .yml
    
    YAML 认为数据由以下三种结构组成:(每个文档由三种结构混合组成)
        标量 (相当于数据类型)
        序列 (相当于数组和列表)
        键值表(相当于 Map 表)
    

    2、playbook 剧本

    [root@centos7 ~]#: ansible-playbook -h
    Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
    
    Runs Ansible playbooks, executing the defined tasks on the targeted hosts.
    
    Options:
      --ask-vault-pass      ask for vault password
      -C, --check           don't make any changes; instead, try to predict some
                            of the changes that may occur
      -D, --diff            when changing (small) files and templates, show the
                            differences in those files; works great with --check
      -e EXTRA_VARS, --extra-vars=EXTRA_VARS
                            set additional variables as key=value or YAML/JSON, if
                            filename prepend with @
      --flush-cache         clear the fact cache for every host in inventory
      --force-handlers      run handlers even if a task fails
      -f FORKS, --forks=FORKS
                            specify number of parallel processes to use
                            (default=5)
      -h, --help            show this help message and exit
      -i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY
      
    -C, --check # 检查但是不做真正改变
    -f FORKS, --forks=FORKS # 指定并发
    --list-hosts # 列出符合条件的主机
    -e EXTRA_VARS, --extra-vars=EXTRA_VARS # 传值
    

    单个tasks

    - hosts: web
      remote_user: root
      tasks:
      - name: createuser
        user: name=alex30 
    

    多个tasks

    - hosts: web
      remote_user: root
      tasks:
      - name: createuser
        user: name=alex40
      - name: creategroup
        group: name=alex40 
    

    补充:ansible-playbook的特点:幂等性 - 不管执行多少次,得到的结果都是一样的

    3、传参

    playbook文件:

    - hosts: web
      remote_user: root
      tasks:
      - name: create{{ user}}
        user: name={{user}}
    

    传参方式:

    第一种传参方式: -e
    ansible-playbook -e user=wusir20 p3.yml
    
    第二种传参方式: hosts文件的host后面直接指定,可以是不同的值
    [db]
    10.0.0.145 user=alex11
    10.0.0.144 user=alex12
    
    第三种传参方式: hosts文件里面写【组名:vars】
    [db:vars]
    user=alex71
    
    第四种传参方式: playbook文件里面写vars
    - hosts: db
      remote_user: root
      vars:
      - user: alex51
      tasks:
      - name: create{{ user}}
        user: name={{user}}
    
    第五种传参方式: 通过register注册,直接用.stdout来获取值
    - hosts: db
      remote_user: root
      tasks:
      - name: installbc
        yum: name=bc
      - name: sum
        shell: echo 20+21|bc
        register: sum 
      - name: echo 
        shell: echo {{sum}} > /tmp/sum.txt
      - name: createuser
        user: name=alex{{sum.stdout}}
    
    

    优先级

    -e > playbook > hosts文件
    
  • 相关阅读:
    16 继续讲C#中的条件执行。if...else if...else
    15 C#中的条件执行,if else
    14 C#编程中的逻辑运算
    13 继续C#中的方法,带返回值的方法介绍
    12 C#中的方法
    在使用实体框架(Entity Framework)的应用中加入审计信息(Audit trail)跟踪数据的变动
    11 在C#中写文件
    10 在C#中读取文件
    9 在C#控制台程序(console)中让用户输入
    大数据组件图谱
  • 原文地址:https://www.cnblogs.com/russellyoung/p/ansible-xue-xi-bi-ji-er.html
Copyright © 2011-2022 走看看