• 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组。

  • 相关阅读:
    matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
    Coursera 机器学习 第9章(下) Recommender Systems 学习笔记
    机器学习基石笔记1——在何时可以使用机器学习(1)
    Coursera 机器学习 第9章(上) Anomaly Detection 学习笔记
    matlab安装过程的被要求的配置程序
    jdk环境变量配置
    Coursera 机器学习 第8章(下) Dimensionality Reduction 学习笔记
    Coursera 机器学习 第8章(上) Unsupervised Learning 学习笔记
    Coursera 机器学习 第7章 Support Vector Machines 学习笔记
    linux服务器---squid限制
  • 原文地址:https://www.cnblogs.com/boxker/p/10822256.html
Copyright © 2020-2023  润新知