Ansible命令使用,常用模块

ansible系列命令【帮助手册】

Ansible系列命令
    ansible ansible-doc ansible-playbook ansible-vault ansible-console
    ansible-galaxy ansible-pull
ansible-doc: 显示模块帮助
    ansible-doc [options] [module...]
        -a            显示所有模块的文档
        -l, --list    列出可用模块
        -s, --snippet 显示指定模块的playbook片段(简化版,便于查找语法)
示例:
    ansible-doc -l      列出所有模块【目前3387个模块】
    ansible-doc ping    查看指定模块帮助用法
    ansible-doc -s ping 查看指定模块帮助用法
ansible all --list  列出所有主机
ping模块: 探测网络中被管理主机是否能够正常使用  走ssh协议
          如果对方主机网络正常,返回pong
ansible-doc -s ping   查看ping模块的语法 

检测所有主机的网络状态
1>  默认情况下连接被管理的主机是ssh基于key验证,如果没有配置key,权限将会被拒绝
    因此需要指定以谁的身份连接,输入用户密码,必须保证被管理主机用户密码一致
    ansible all -m ping -k

2> 或者实现基于key验证 将公钥ssh-copy-id到被管理的主机上 , 实现免密登录
   ansible all -m ping

ansible的Host-pattern 【支持正则】

ansible的Host-pattern
匹配主机的列表
    All :表示所有Inventory中的所有主机
        ansible all –m ping
    * :通配符
        ansible * -m ping  (*表示所有主机)
        ansible 192.168.1.* -m ping
        ansible *srvs -m ping
    或关系 :
        ansible websrvs:appsrvs -m ping
        ansible “192.168.1.10:192.168.1.20” -m ping
    逻辑与 :&
        ansible websrvs:&dbsrvs –m ping
        在websrvs组并且在dbsrvs组中的主机
    逻辑非 :!
        ansible 'websrvs:!dbsrvs' –m ping
        在websrvs组,但不在dbsrvs组中的主机
        注意:此处为单引号
    综合逻辑
        ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' –m ping
    正则表达式
        ansible websrvs:&dbsrvs –m ping
        ansible ~(web|db).*\.test\.com –m ping
ansible的Host-pattern
匹配主机的列表
    All :表示所有Inventory中的所有主机
        ansible all –m ping
    * :通配符
        ansible * -m ping  (*表示所有主机)
        ansible 192.168.1.* -m ping
        ansible *srvs -m ping
    或关系 :
        ansible websrvs:appsrvs -m ping
        ansible “192.168.1.10:192.168.1.20” -m ping
    逻辑与 :&
        ansible websrvs:&dbsrvs –m ping
        在websrvs组并且在dbsrvs组中的主机
    逻辑非 :!
        ansible 'websrvs:!dbsrvs' –m ping
        在websrvs组,但不在dbsrvs组中的主机
        注意:此处为单引号
    综合逻辑
        ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' –m ping
    正则表达式
        ansible websrvs:&dbsrvs –m ping
        ansible ~(web|db).*\.test\.com –m ping

ansible命令执行过程

ansible命令执行过程
    1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg
    2. 加载自己对应的模块文件,如command
    3. 通过ansible将模块或命令生成对应的临时py文件,
       并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
    4. 给文件+x执行
    5. 执行并返回结果
    6. 删除临时py文件,sleep 0退出

执行状态:
    绿色:执行成功并且不需要做改变的操作
    黄色:执行成功并且对目标主机做变更
    红色:执行失败
ansible命令执行过程
    1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg
    2. 加载自己对应的模块文件,如command
    3. 通过ansible将模块或命令生成对应的临时py文件,
       并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
    4. 给文件+x执行
    5. 执行并返回结果
    6. 删除临时py文件,sleep 0退出
执行状态:
    绿色:执行成功并且不需要做改变的操作
    黄色:执行成功并且对目标主机做变更
    红色:执行失败

ansible使用示例

示例

ping模块测试连接
        ansible all -m ping  
执行ping存活检测
        ansible 192.168.38.126,192.168.38.127 -m ping

ansible常用模块

模块文档:https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

Command:在远程主机执行命令,默认模块,可忽略-m选项
    > ansible srvs -m command -a 'service vsftpd start'
    > ansible srvs -m command -a 'echo adong |passwd --stdin 123456'
此命令不支持 $VARNAME < > | ; & 等,用shell模块实现

    chdir:   进入到被管理主机目录
    creates: 如果有一个目录是存在的,步骤将不会运行Command命令
    ansible websrvs -a 'chdir=/data/ ls'

Shell:和command相似,用shell执行命令
    > ansible all -m shell  -a 'getenforce'  查看SELINUX状态
    >  ansible all -m shell  -a sed -i 's/SELINUX=.*/SELINUX=disabled' /etc/selinux/config
    > ansible srv -m shell -a 'echo magedu |passwd –stdin wang'

    调用bash执行命令 类似 cat /tmp/stanley.md | awk -F'|' '{print $1,$2}' &> /tmp/example.txt     
    这些复杂命令,即使使用shell也可能会失败,
    解决办法:写到脚本时,copy到远程执行,再把需要的结果拉回执行命令的机器

    修改配置文件,使shell作为默认模块    
        vim /etc/ansible/ansible.cfg
        module_name = shell

Script:在远程主机上运行ansible服务器上的脚本
    > -a /PATH/TO/SCRIPT_FILE
    > ansible websrvs -m script -a /data/test.sh

Copy:从主控端复制文件到远程主机
      src : 源文件  指定拷贝文件的本地路径  (如果有/ 则拷贝目录内容,比拷贝目录本身)
      dest: 指定目标路径
      mode: 设置权限
      backup: 备份源文件
      content: 代替src  指定本机文件内容,生成目标主机文件

      > ansible websrvs -m copy -a src=/root/test1.sh dest=/tmp/test2.showner=wang mode=600 backup=yes
        如果目标存在,默认覆盖,此处指定先备份
      > ansible websrvs -m copy -a content='test content\nxxx' dest=/tmp/test.txt
        指定内容,直接生成目标文件

Fetch:从远程主机提取文件至主控端,copy相反,目前不支持目录,可以先打包,再提取文件
     > ansible websrvs -m fetch -a 'src=/root/test.sh dest=/data/scripts'
     会生成每个被管理主机不同编号的目录,不会发生文件名冲突

     > ansible all -m shell -a 'tar jxvf test.tar.gz /root/test.sh'
     > ansible all -m fetch -a 'src=/root/test.tar.gz dest=/data/'

File:设置文件属性
    path: 要管理的文件路径 (强制添加)
    recurse: 递归,文件夹要用递归
    src:  创建硬链接,软链接时,指定源目标,配合'state=link' 'state=hard' 设置软链接,硬链接
    state: 状态
          absent 缺席,删除

    > ansible websrvs -m file -a 'path=/app/test.txt state=touch'       创建文件
    > ansible websrvs -m file -a path=/data/testdir state=directory   创建目录    
    > ansible websrvs -m file -a path=/root/test.sh owner=wang mode=755  设置权限755
    > ansible websrvs -m file -a 'src=/data/testfile dest=/data/testfile-link state=link' 创建软链接

unarchive:解包解压缩,有两种用法:
    1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes.
    2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no

    常见参数:
        copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,
              如果设置为copy=no,会在远程主机上寻找src源文件
        src: 源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
        dest:远程主机上的目标路径
        mode:设置解压缩后的文件权限

    示例:
        ansible websrvs -m unarchive -a 'src=foo.tgz dest=/var/lib/foo'  
          #默认copy为yes ,将本机目录文件解压到目标主机对应目录下

        ansible websrvs -m unarchive -a 'src=/tmp/foo.zip dest=/data copy=no mode=0777'
          # 解压被管理主机的foo.zip到data目录下, 并设置权限777
        ansible websrvs -m unarchive -a 'src=https://example.com/example.zip dest=/data copy=no'

Archive:打包压缩
    > ansible all -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.bz2 format=bz2 owner=wang mode=0777'
    将远程主机目录打包 
        path:   指定路径
        dest:   指定目标文件
        format: 指定打包格式
        owner:  指定所属者
        mode:   设置权限

Hostname:管理主机名
    ansible appsrvs -m hostname -a name=app.adong.com  更改一组的主机名
    ansible 192.168.38.103 -m hostname -a name=app2.adong.com 更改单个主机名

Cron:计划任务
    支持时间:minute,hour,day,month,weekday
    > ansible websrvs -m cron -a minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null' name=Synctime 
    创建任务
    > ansible websrvs -m cron -a 'state=absent name=Synctime' 
    删除任务
    > ansible websrvs -m cron -a 'minute=*/10 job='/usr/sbin/ntpdate 172.30.0.100 name=synctime disabled=yes'
    注释任务,不在生效

Yum:管理包
    ansible websrvs -m yum -a 'list=httpd'  查看程序列表

    ansible websrvs -m yum -a 'name=httpd state=present' 安装
    ansible websrvs -m yum -a 'name=httpd state=absent'  删除
    可以同时安装多个程序包

Service:管理服务
    ansible srv -m service -a 'name=httpd state=stopped'  停止服务
    ansible srv -m service -a 'name=httpd state=started enabled=yes' 启动服务,并设为开机自启
    ansible srv -m service -a 'name=httpd state=reloaded'  重新加载
    ansible srv -m service -a 'name=httpd state=restarted' 重启服务

User:管理用户
    home   指定家目录路径
    system 指定系统账号
    group  指定组
    remove 清除账户
    shell  指定shell类型

    ansible websrvs -m user -a 'name=user1 comment=test user uid=2048 home=/app/user1 group=root'
    ansible websrvs -m user -a 'name=sysuser1 system=yes home=/app/sysuser1'
    ansible websrvs -m user -a 'name=user1 state=absent remove=yes'  清空用户所有数据
    ansible websrvs -m user -a 'name=app uid=88 system=yes home=/app groups=root shell=/sbin/nologin password=$1$zfVojmPy$ZILcvxnXljvTI2PhP2Iqv1'  创建用户
    ansible websrvs -m user -a 'name=app state=absent'  不会删除家目录

    安装mkpasswd 
    yum insatll expect 
    mkpasswd 生成口令
    openssl passwd -1  生成加密口令

删除用户及家目录等数据
    Group:管理组
        ansible srv -m group -a name=testgroup system=yes   创建组
        ansible srv -m group -a name=testgroup state=absent 删除组

ansible系列命令

可以通过网上写好的
ansible-galaxy
    > 连接 https://galaxy.ansible.com 
      下载相应的roles(角色)

    > 列出所有已安装的galaxy
        ansible-galaxy list

    > 安装galaxy
       ansible-galaxy collection install community.mysql

    > 删除galaxy
        ansible-galaxy remove community.mysql

ansible-pull
    推送命令至远程,效率无限提升,对运维要求较高

ansible-playbook  可以引用按照标准的yml语言写的脚本
    执行playbook
    示例:ansible-playbook hello.yml
        cat hello.yml
        #hello world yml file
        - hosts: websrvs
          remote_user: root
          tasks:
            - name: hello world
              command: /usr/bin/wall hello world

ansible-vault  (了解)
功能:管理加密解密yml文件
    ansible-vault [create|decrypt|edit|encrypt|rekey|view]
        ansible-vault encrypt hello.yml 加密
        ansible-vault decrypt hello.yml 解密
        ansible-vault view hello.yml    查看
        ansible-vault edit hello.yml    编辑加密文件
        ansible-vault rekey hello.yml   修改口令
        ansible-vault create new.yml    创建新文件

Ansible-console:2.0+新增,可交互执行命令,支持tab  (了解)

    root@test (2)[f:10] $
    执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$

    设置并发数:         forks n   例如: forks 10
    切换组:             cd 主机组 例如: cd web
    列出当前组主机列表: list
    列出所有的内置命令: ?或help
    示例:
        root@all (2)[f:5]$ list
        root@all (2)[f:5]$ cd appsrvs
        root@appsrvs (2)[f:5]$ list
        root@appsrvs (2)[f:5]$ yum name=httpd state=present
        root@appsrvs (2)[f:5]$ service name=httpd state=started

本文版权归 飞翔沫沫情 作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接 如有问题, 可发送邮件咨询,转贴请注明出处:https://www.fxkjnj.com/3583/

(1)
打赏 WeChat WeChat Alipay Alipay
上一篇 2022年2月26日 上午11:23
下一篇 2022年3月1日 上午10:02

相关推荐

发表评论

登录后才能评论
分享本页
返回顶部