• ansible工具


    关于ansible

    在ansible官网上是这样介绍ansible的:Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates.
    ansible是一块自动化IT工具,主要实现以下几个功能:

    • 自动化部署
    • 自动化管理配置
    • 不停机更新
    • 自动化持续交互

    安装ansible

    ansible默认使用SSH协议管理计算机,因为ansiible只需要安装在一台管控机上就可以以此为中心点管控多台服务器,不需要在其他机器上安装和运行软件,所以官网建议跟随ansible版本进行使用,现在ansible的最新版本是2.7版本,ansible能够在安装了python2.7x和3.x版本的计算机上运行,但是被管控的机器不包括windows,只支持一些类unix系统,如macOS,redhat,Debian,CentOS.本文就以CentOS来进行演示。

    • 下载epel源
      在https://opsx.alibaba.com/mirror 上直接复制就可以,不同的操作系统不一样,选择与自己系统相匹配的。
    • 安装ansible
    yum install -y ansible
    

    这样ansible就安装好了,十分的方便不需要源码编译安装的步骤,
    ansible都安装哪些东西?可以通过rpm -ql ansible来查看。
    补充一下yum源的配置。

      [epel]
      name=Extra Packages for Enterprise Linux 7 - $basearch #名字
      baseurl=http://mirrors.aliyun.com/epel/7/$basearch  #rpm源的地址,可以写http,https,ftp,Samba,file:
      failovermethod=priority
      enabled=1 # 是否开启,1代表开启,0表示关闭
      gpgcheck=0  #是否校验签名,1代表校验,0表示校验
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    

    yum的包组安装

    yum grouplist	#查看包组信息
    yum groupinstall	#安装包组
    

    机器之间怎么进行连接

    上文说过,ansible默认通过SSH协议连接并控制被控节点,SSH有两种认证方式,密码和密钥,密钥的安全性更高故选择密钥。

    ssh-keygen	#生成SSH密钥对
    ssh-copy-id 192.168.245.130		#复制密钥到远程主机
    

    ansible的命令格式

    ansible <host-parttern> [options]
    -a MODULE_ARGS,--args=MOULE_ARGS	#模块的参数
    -C,--check	#检查
    -f FORKS,--forks=FORKS	#用于做高并发
    --list-hosts	#列出主机列表
    -m MODULE_NAME	#模块名称
    -k	#输入密码
    

    ansible的hosts文件

    # This is the default ansible 'hosts' file.
    #
    # It should live in /etc/ansible/hosts
    #
    #   - Comments begin with the '#' character # 用#来表示注释
    #   - Blank lines are ignored # 空白行被忽略
    #   - Groups of hosts are delimited by [header] elements # 主机组 需要在【】下面
    #   - You can enter hostnames or ip addresses #可以写主机名或者ip地址
    #   - A hostname/ip can be a member of multiple groups # 一台主机可以在多个组里面
    # www[001:006].example.com 表示从www001到www006的机器
    

    配置举例,可以根据功能将机器进行分组。

    [web]
    192.168.13.25
    192.168.22.231
    [db]
    192.168.23.33
    192.168.13.25
    

    host-pattern的格式

    • 多个主机
      全部主机 all
    • 多个的主机,中间用","隔开
    • 单个组
    • 多个组
      • 交集 'web:&db'
      • 并集'web,db' , 'web:db'
      • 差集 'web:!db'

    查看模块帮助信息

    ansible-doc 参数 模块名
    参数包括 -j, -l ,-s
    -j #以json的方式返回ansible的所有模块
    -l #列出所有的ansible模块
    -s	#片段式的显示
    

    举例:

    ansible-doc -s ping
    ansible-doc -s command
    

    ansible的模块

    ping

    Try to connect to host, verify a usable python and return `pong' on success.

    ansible web -m ping	#返回json pong
    

    command

    Executes a command on a remote node.
    执行远程命令的模块,command不需要-m参数,因为-m参数是默认,不支持特殊字符,如管道符|等。

    ansible web -a 'ls /'
    ansible web -a 'chdir=/tmp pwd'	#切换目录后执行命令
    ansible web -a 'creates=/tmp pwd' #若/tmp目录存在,则不执行任何操作
    ansible web -a 'removes=/tmp pwd'	#若/tmp目录存在则执行操作
    

    shell

    Execute commands in nodes.
    在远程主机执行远程主机的shell或python脚本及命令。

    ansible web -m shell -a 'echo "123"|passwd --stdin cui' #鼻梁创建密码
    ansible web -m shell -a'/tmp/a.sh'	#执行a.sh文件
    

    script

    Runs a local script on a remote node after transferring it.
    在远程主机执行本地的文件或脚本。

    ansible web -m script -a '/root/a.sh'	#在远程主机执行本地的文件
    ansible web -m script -a 'removes=/root/m.sh /root/m.sh' # 如果存在,存在就执行
    ansible web -m script -a 'creates=/root/a.sh /root/m.sh' #如果存在,就不执行
    

    copy

    Copies files to remote locations
    参数:

    • backup 备份,以时间戳结尾
    • dest 目标地址
    • src 文件源地址
    • owner 文件的属主
    • group 文件的属组
    • mode 文件的权限 rwx
    ansible web -m copy -a 'src=/tmp/a.sh dest=/tmp/a.sh' #复制本地文件到远程主机
    ansible web -m copy -a 'src=/tmp/a.sh dest=/tmp/a.sh mode=755 owner=cui'	#修改文件权限和属主
    ansible web -m copy -a 'src=/tmp/a.sh dest=/tmp/' #复制文件,剥到远程主机,如果改变文件属性,文件夹内文件属性也会改变
    ansible web -m copy -a 'src=/tmp/ dest=/tmp/' #复制目录内的所有文件到主机
    ansible web -m copy -a 'content="我有点小帅" dest=/tmp/a.txt'	#注入文本内容到远程文件
    

    file

    Sets attributes of files.
    一些知识 点准备:

    • inode获取的是硬盘的地址
    • id获取的是内存地址
    • ln -s a.txt b.txt 创建软连接
    • ln a.txt b.txt 创建硬链接
    • 若源文件发生改变,软连接和硬链接生成的文件都会随着变化
      参数:
    • path 目标地址
    • src 源地址
    • state
      • link 建立软连接
      • file 建立文件
      • directory 建立文件夹
      • hard 建立硬链接
      • touch 建立空文件
      • absent 删除
    ansible web -m file -a 'path=/tmp state=directory'	#建立文件夹
    ansible	db -m file -a 'path=/tmp/a src=/etc/f'	#建立软连接
    

    fetch

    Fetches a file from remote nodes
    参数:

    • src 源地址
    • dest 目的地址
    ansible web -m fetch -a 'src=/var/log/cron dest=/tmp'	#下载被控节点的文件,每台远程主机都会创建一个文件夹,保留原来的目录结构
    

    yum

    Manages packages with the `yum' package manager.
    参数:

    • disablerepo 禁用源
    • enablerepo 启用源
    • name 包名
    • state
      • install 安装
      • remove 卸载
    ansible web -m yum -a 'name=wget' # 安装wget
    ansible web -m yum -a 'name=python2-pip' # 安装python2-pip
    ansible web -m yum -a 'name=wget state=absent' # 卸载软件包
    ansible web -m yum -a 'name="@Development Tools"' # 安装包组
    

    pip

    Manages Python library dependencies.
    参数:

    • chdir 切换目录后安装
    • name 包名
    ansible web -m pip -a 'name=flask'	#安装flask
    

    service

    Manage services.
    ss -tnlp 查看端口信息
    参数:

    • name 服务名
    • enable 自启动
    • state
      • started 开始
      • stoped 结束
      • restarted 重启
      • reload 平滑加载
    ansible web -m service -a 'name=nginx state=started' # 启动nginx
    ansible web -m service -a 'name=nginx state=stopped' # 关闭nginx
    

    cron

    Manage cron.d and crontab entries.
    参数:

    • day 天
    • disable 禁用
    • hour 小时
    • job 任务
    • minute 分钟
    • month 月
    • name 任务名字
    • weekday 周
    ansible db -m cron -a 'minute=26 job="touch /tmp/a.txt" name=touchfile' # 新建一个计划任务
    ansible db -m cron -a 'name=touchfile state=absent' # 删除一个计划任务
    ansible db -m cron -a 'minute=26 job="touch /tmp/ay.txt" name=touchfile disabled=yes'  # 禁用计划任务,以#表示禁用
    

    user

    Manage user accounts.
    参数:

    • group 组
    • groups 附加组
    • home 家目录
    • name 用户名
    • password 密码
    • remove 删除
    • system 创建系统用户
    • uid 指定用户的uid
    • state
      • absent
    • shell 用户登陆后的shell
    absible web -m user -a 'name=cyz uid=6666 home=/opt/cyz groups=root shell=/sbin/nologin'	#创建用户cyz uid为666
    absible web -m user -a 'name=cyz state=absent'	#删除用户但不删除家目录
    absible web -m user -a 'name=cyz state=absent remove=yes'	#删除用户并删除家目录
    

    group

    Add or remove groups.
    参数:

    • gid 组id
    • name 组名
    • system 系统组
    ansible -m group -a 'name=cui system=yes'	#创建cui系统组
    ansible -m group -a 'name=cui state=absent'	#删除cui用户组
    

    关于user和group的一些补充

    用户:

    • 管理员 root uid为0
    • 普通用户
      • 系统用户 不能登陆 uid为1-999(centos7)
      • 登陆用户 可以登录 uid为1000-65535(centos7)
        用户组:
    • 管理员组 root 0
    • 系统用户组 1-999
    • 登陆用户组 1000-65535
    useradd
    - -r 创建系统用户
    - -s 创建普通用户
    - -d 创建用户时指定家目录
    - -g 创建用户时指定用户组
    - -G 创建用户时指定用户的执行组
    - -u 创建用户时指定用户uid
    
    userdel
    - -r	删除用户并删除用户的家目录(默认只删除用户)
    groupadd	创建用户组
    - r 创建系统用户组
    groupdel	删除用户组
    

    关于计划任务的一些补充

    crontab命令

    • -e 编辑计划任务
    • -l 查看计划任务
    • -r 删除计划任务
      计划任务的书写
    * * * * * job
    分 时 日 月 周 任务
    0 */2 * * * job	#每隔两个小时执行任务
    0 12,13 * * * job	# 12点和13点执行任务
    0 12-17 * *  * job	#12-17点执行任务
    0 12-17/2 * * * job	#12-17点每隔两小时执行任务
    

    关于pip的一些补充

    pip install package	#安装包
    pip freeze >a.txt	#导出环境
    pip install -r a.txt	#根据环境文件安装包
    pip list	#查看已经安装成功的包
    

    ansible剧本(playbook)

    剧本是ansible的配置和部署语言,它是由yaml编写的,用来描述对远程机器执行的策略或步骤。

    yaml的语法

    yaml是一种编写配置文件的编程语言,常见的配置文件后缀有.ini、.xml等,
    由yaml编写的配置文件的后缀是.yaml 或.yml。

    • 书写规范
      • 不要使用tab,两个空格代表一个缩进
      • ':'后要加一个空格
      • '-' 后要加一个空格
      • 变量使用{{}}表示
    • 列表的所有元素均以'-'+空格开头
    • 字典key和value以:分开
    • 条件判断使用when
    • 循环使用with_items,变量用{{item}}
    - hosts: web
      tasks:
      - name: creategroup
        group: name=cyz
      - name: createuser
        user: name=cui
    

    变量的传参方式

    • 通过命令行传递变量
    ansible-playbook -e 'user=cui' a.yml
    
    • 在hosts文件中声明,有两种方法。
    [web]
    192.168.13.25 user=cui
    192.168.22.231 user=cyz
    
    [web:vars]
    user=cui
    
    • 在剧本中声明
    - hosts: db
      vars:
      - user: cui
      tasks:
      - name: create{{ user }}
        user: name={{ user}}
    
    • 使用register
    - hosts: web
      tasks: 
      - name: reg
        shell: echo 'cui'
        register: user
      - name: createuser
        user: name={{user.stdout}}
    

    传参的优先级为:命令行>剧本>hosts文件

  • 相关阅读:
    MYSQL中排序
    编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary)
    job1
    python中对于数组的操作
    python中将字符串转为字典类型
    python中的周几
    python 链接redis 获取对应的值
    jenkins 设置定时任务规则
    如何安全close go 的channel
    [转]
  • 原文地址:https://www.cnblogs.com/cuiyuanzhang/p/10408583.html
Copyright © 2020-2023  润新知