zoukankan      html  css  js  c++  java
  • Ansible的使用和模块化深入

    Ansible配置

    配置文件:/etc/ansible/ansible.cfg

    [default] 默认配置

    • inventory = /etc/ansible/hosts主机清单
    • library = /usr/share/my_modules
    • module_utils = /usr/share/my_module_utils模块路径
    • remote_tmp = ~/.ansible/tmp远程临时路径
    • local_tmp = ~/.ansible/tmp本地临时路径

    ansible执行一个命令会生成python脚本,存放于local_tmp,并复制到remote_tmp,目标主机执行此脚本,执行结束后即删除。

    • plugin_filters_cfg = /etc/ansible/plugin_filters.yml插件配置文件
    • forks = 5并行执行操作数
    • poll_interval = 15间隔:多长时间拉一次数据
    • sudo_user = root默认用户名

    连接到对方切换到sudo执行

    • ask_sudo_pass = True是否询问口令
    • ask__pass = True是否支持用户口令
    • transport = smart传输
    • remote_port = 22远程主机端口号
    • module_lang = C默认语音
    • module_set_locale = False
    • log_path = /var/log/ansible.log日志文件(建议启用,默认不记录日志)
    • host_key_checking = False连接到远程时是否需要验证公钥

    第一次连接,需要单独用命令连接,并确定连接,否则没有.ssh/known_hosts,导致连接失败,解决方法:rm -f .ssh/known_hosts。因此需要把此项设为False,即不会有这个问题。

    Ansible系列命令

    • ansible-doc显示模块帮助(类似man命令)
    -a 列出所有
    -l 列出可用模块列表
    -s --snippet 显示指定模块的playbook片段(短格式,简洁)

    命令格式

    ansible <HOST-PATTERN> [-m MODULE_NAME] [-a ARGS]

    -v 详细 -vv -vvv 更详细
    --list-hosts 显示主机列表 ,可简写 --list
    -k 提示输入ssh密码,默认Key验证
    -K 输入sudo的口令
    -c 检查,并不执行
    -T 默认超时时间
    -u 远程执行的用户
    -b 代替旧版本sudo切换
    -m 指定模块
    --version 版本号

    ansible servers -m command -u boxker -k -a 'ls /root'用boxker身份查看root目录。若boxker权限不够,则失败。-m command是默认模块,可省略。解决方法1:以root身份连接 ansible servers -m command -u root -k -a 'ls /root' 2.ansible servers -m command -u boxker -k -a 'ls /root' -b -K以boxker身份连接,用root身份(默认)执行,需要sudo口令。visudo管理sudo的配置文档/etc/sudoers当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限visudo精确用户赋权(sudo)

    查看彩色文字:echo export EDITOR=vim >> /etc/profile.d/env.sh

    ssh-keygen

    设置完即可无需 -k 输密钥

    1. ssh-keygen回车
    2. ssh-copy-id IP回车

    Linux使用ssh-keygen实现SSH无密码登录

    ssh-keygen的使用方法以及ssh-keygen参数说明

    HOST-PATTERN

    all 所有
    * 通配符
    : 或
    :& 与
    :! 非
    正则

    用到&,需要用引号引起来(在linux里表示后台运行)

    ansible-galaxy

    连接galaxy.ansible.com 下载对应的roles

    ansible-galaxy list geerlingguy.nginx查看本机geerlingguy.nginx
    ansible-galaxy install geerlingguy.nginx安装geerlingguy.nginx,默认下载在家目录的隐藏目录.ansible/roles/中。
    ansible-galaxy remove geerlingguy.nginx删除role,亦可把目录直接删除。

    ansible-pull

    推送命令至远程,效率无限提升,对运维要求高。(使用不多)

    ansible-playbook

    下一章。

    ansible执行过程

    ansible命令执行过程

    1. 加载配置文件
    2. 加载对应模块
    3. 将模块或命令生成临时py文件并传输
    4. 给文件 +x 权限执行
    5. 执行并返回结果
    6. 删除临时文件,并 sleep 0 退出

    ansible执行状态

    • 绿色:执行成功并且不需要做改变的操作
    • 黄色:执行成功且对目标主机做变更
    • 红色:执行失败
    • 蓝色:显示详细过程

    ansible常见模块

    1. Command模块

    默认模块,可忽略 -m选项
    次命令不支持$VARNAME < > & | ;等,用shell实现

    参数:
    -chdir 执行命令前先进入目录
    -creates 指定的文件若存在则不继续操作
    -remove 指定的文件若不存在则不继续操作

    ansible all -a 'removes=/etc/fs cat /etc/fstab'

    getent 用来察看系统的数据库中的相关记录getent [选项...] 数据库 [键 ...]

    2. Shell 模块

    语法实验与Command差不多
    支持特殊符号

    3. Script 模块

    运行脚本,可指定参数

    例 :ansible all -m script -a 'test.sh'

    linux下的stdin,stdout和stderr理解

    SELinux 与强制访问控制系统

    /etc/sysconfig/selinux/selinux : selinux=permissive,disable,enable

    4. Copy 模块

    参数 说明
    attributes 属性
    backup 备份,避免覆盖
    content 编辑文件内容,直接生成文件进行复制
    dest 文件放在目标主机哪
    mode 复制过去权限
    owner 所有者
    src 本机文件

    例:ansible -m copy -a 'src=/bendiwenjian dest=/mubiaowenjian backup=yes mode=000 owner=boxker'默认情况下复制的文件属性会变
    ansible -m copy -a 'content="hello " dest=/data/hello'相当于cat。

    5. Fetch 模块

    从客户端取一个文件至服务器端,抓取远程文件,与copy相反,目录可先tar

    src:源文件
    dest:存放位置

    ansible all -m fetch -a 'src=/var/log/messages dest=/data'
    存放方式为dest目录下,为每个主机创建一个目录,然后是src路径

    6. File 模块

    设置文件属性
    name,path,dest效果一样

    ansible all -m file -a 'name=/data/f3 state=touch'创建一个新文件。
    ansible all -m file -a 'name=/data/f3 state=absent'删除文件。
    ansible all -m file -a 'name=/data/dir1 state=directory'创建一个文件夹。
    ansible all -m file -a 'src=/etc/fstab dest=/data/fstab.link state=link'创建一个软链接。

    7. Hostname 模块

    管理主机名

    ansible IP -m hostname -a 'name=node1'改主机名,会顺带把/etc/hostname修改,但是在centos7 :/etc/hosts未做修改,centos6 : /etc/sysconfig/network则会修改。

    8. Cron 模块

    计划任务

    广播路径:/usr/bin/wall

    ansible all -m cron -a 'minute=* weekday=1,3,5 job="/usr/bin/wall FBI warning" name=warningcron'周一、三、五,每分钟发出警告。
    ansible all -m cron -a 'disabled=true job="/usr/bin/wall FBI warning"'关闭定时任务,即在crontab -e中注释。但是无法关闭上条任务,因为需要带上name,否则会注释新的name为none的新定时任务。
    ansible all -m cron -a 'disabled=true job="/usr/bin/wall FBI warning" name=warningcron'关闭第一条设置的定时任务。
    ansible all -m cron -a 'disabled=false job="/usr/bin/wall FBI warning" name=warningcron'启用第一条设置的定时任务。disable中用yes、no亦可。
    ansible all -m cron -a 'job="/usr/bin/wall FBI warning" name=warningcron state=absent'删除第一条设置的定时任务。

    9. Yum 模块

    管理包

    installed,latest,present安装(默认)
    absent,removed删除
    list查看

    ansible all -m yum -a 'name=vsftpd'安装vsftp。依赖于自身yum仓库配置/etc/yum.repos.d/base.repo,禁用enabled=0
    ansible all -m yum -a 'list=installed'查看已安装的。
    ansible all -m shell -a 'rpm -q vsftpd'查看。
    ansible all -m yum -a 'name=vsftpd,httpd,memcached'安装多个包,用逗号隔开。

    安装本地包

    1. 将本地包发到客户机
    2. 执行安装命令

    忽略gpg_check: 添加disable_gpg_check=yes

    ansible all -m yum -a 'name=dstat update_chche=yes'更新缓存。(dstat,监控工具)。

    10. Service 模块

    服务管理

    name名字
    enabled:是否开机启动(类似:systemctl enable 服务名)
    state: started,reloaded,stoped,restarted

    ansible all -m service -a 'name=vsftpd state=started enabled=yes'开启vsftpd服务,并开机自启。(systemctl is-enbale 服务名,查看是否开启自启)。

    11. User 模块

    管理用户

    comment注释
    create_home是否创建家目录
    expires过期时间
    group主组
    groups附加组
    home家目录
    name用户名
    password加密口令
    remove当删除用户时删除家目录
    state
    system指定系统帐号
    shell指定shell类型

    ansible all -m user -a 'name=nginx shell=/sbin/nologin system=yes home=/var/nginx groups=root,bin uid=80 comment="nginx service"'创建nginx用户。
    ansible all -a 'getent passwd nginx'查看创建的nginx用户信息。通常源码编译需要手动创建帐号,yum则自动创建好。
    ansible all -m user -a 'name=nginx state=absent remove=yes'删除用户并删除家目录。

    12. Group 模块

    组管理

    name
    gid
    state
    system

    ansible all -m group -a 'name=nginx system=true gid=80'创建nginx组。

  • 相关阅读:
    珍珠项链——容斥的应用
    协程库中 WaitGroup / CountDownLatch 实现
    简单C++线程池
    switch 比 if/else 效率更高?
    [LeetCode 264.] 丑数 II
    [LeetCode 229.] 求众数 II
    [NC41] 最长无重复子数组
    [NC105] 二分查找-II
    高楼扔鸡蛋
    C++ 编译期计算
  • 原文地址:https://www.cnblogs.com/boxker/p/10822256.html
Copyright © 2011-2022 走看看