zoukankan      html  css  js  c++  java
  • ansible模块学习

    ansible的功能:

      模块化任务,调用特定的模块,完成特定的任务

      基于python语言实现,由paramiko、pyyaml和jinja2三个模块构建

      部署简单,agentless,ansible基于ssh协议实现的
      主从模式
      支持自定义模块
      支持playbook
      允许重复执行
    ansible的安装,ansible提供的rpm包在epel源上
      note:epel源安装
      cd /etc/yum.repos.d
      rpm -ivh epel-release-latest-6.noarch.rpm
      yum install ansible -y
     
    ansible主端:192.168.223.136
    节点1:192.168.223.146
    1、ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
    2、ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.223.143
    3、远程连接ssh root@192.168.223.146或者ssh 192.168.223.146
    4、在节点上执行命令
    [root@node1 ~]# ssh 192.168.223.146 'date'
    Sun Jul 30 20:02:58 CST 2017
    [root@node1 ~]# date
    Sun Jul 30 12:03:00 CST 2017
     
    ansible基础用法:
    ansible <host-pattern> [-m module_name] [-a args] [options]
    ansible-doc -l 显示ansible支持的模块
    [root@node1 ~]# ansible-doc -s command 显示模块的具体用法
    - name: Executes a command on a remote node
     
    解决:定义host清单
    1、cp hosts hosts.bak
    2、修改hoats文件
    [nodes]
    192.168.223.146
     
    command模块:
      ansible nodes -m command -a 'ifconfig'
     
    ping模块:
      [root@node1 ansible]# ansible all -m ping
      192.168.223.146 | SUCCESS => {
      "changed": false,
      "ping": "pong"
      }
     
    user模块:
      #ansible-doc -s user
      新建某个用户:
      [root@node1 ansible]# ansible nodes -m user -a "name=wadeson state=present"
      192.168.223.146 | SUCCESS => {
      "changed": true,
      "comment": "",
      "createhome": true,
      "group": 500,
      "home": "/home/wadeson",
      "name": "wadeson",
      "shell": "/bin/bash",
      "state": "present",
      "system": false,
      "uid": 500
      }
    -a后面接模块的参数:
    name=:表示需要创建的新用户的名字
    state:表示用户存在的状态(由于是新建用户,所以状态为present)
    删除某个用户: absent不在的
    [root@node1 ansible]# ansible nodes -m user -a "name=wadeson state=absent"
    192.168.223.146 | SUCCESS => {
    "changed": true,
    "force": false,
    "name": "wadeson",
    "remove": false,
    "state": "absent"
    }
    如果state不填写,默认是present,创建一个新的
     
    cron模块:
    ansible-doc -s cron
    [root@node1 ansible]# ansible all -m cron -a 'name="sync time" minute=2 user=root state=present job="/usr/sbin/ntpdate time.nist.gov &> /dev/null"'
    192.168.223.146 | FAILED! => {
    "changed": false,
    "failed": true,
    "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
    }
    解决办法:在节点主机上安装libselinux-python
    yum -y install libselinux-python
     
    再次在ansible服务器上执行:
    [root@node1 ansible]# ansible all -m cron -a 'name="sync time" minute=*/2 user=root state=present job="/usr/sbin/ntpdate time.nist.gov &> /dev/null"'
    192.168.223.146 | SUCCESS => {
    "changed": true,
    "envs": [],
    "jobs": [
    "sync time"
    ]
    }
    在节点上查看:
    [root@wadeson ~]# crontab -l
    #Ansible: sync time
    2 * * * * /usr/sbin/ntpdate time.nist.gov &> /dev/null
    删除cron任务:
    ansible all -m cron -a 'name="sync time" state=absent‘
     
    copy模块:
    ansible-doc -s copy
    ansible all -m copy -a "src=/etc/fstab dest=/tmp/fatab.bak mode=600"
    节点上查看:
    [root@wadeson ~]# ll /tmp/
    总用量 8
    -rw-------. 1 root root 899 7月 30 21:55 fatab.bak

    [root@node1 ansible]# cat test_var.yaml
    - hosts: nodes
    remote_user: root
    tasks:
    - name: create a new file
    copy: content={{ node_var }} dest=/tmp/ansible_var.txt

    file模块:
    ansible-doc -s file,创建文件,目录,链接文件
    ansible all -m file -a 'path=/tmp/testdir state=directory'
    ansible all -m file -a 'src=/tmp/fstab.bak dest=/root/fstab.bak state=link'
    [root@wadeson ~]# ll
    总用量 16
    -rw-------. 1 root root 1104 7月 30 19:54 anaconda-ks.cfg
    lrwxrwxrwx. 1 root root 14 7月 30 22:03 fstab.bak -> /tmp/fstab.bak
    state:file|absent|directory|link|hard|touch
    在远程节点上创建一个新文件:
    ansible nodes -m file -a 'path=/tmp/ansible_agent.txt state=touch'
    path这里可以为dest或者name
     
    yum模块:
    ansible-doc -s yum
    ansible all -m yum -a 'name="vim,wget" state=latest'
    state:present|latest|absent
    ansible all -m yum -a 'name=ntpdate state=latest'
    按照ntpdate包,然后定义cron任务
     
    service模块:
    参数:
    enabled:设置是否开机启动
    state:started|stopped|restarted
    ansible all -m yum -a 'name=httpd state=latest'
    ansible all -m service -a 'name=httpd state=started enabled=no'
    节点查看:
    [root@wadeson ~]# rpm -qa httpd
    httpd-2.2.15-60.el6.centos.4.x86_64
    [root@wadeson ~]# chkconfig --list|grep httpd
    httpd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
     
    shell模块:
    -a “command”,没有额外的参数
    命令中带有管道,变量等等
    [root@node1 ~]# ansible nodes -m shell -a 'echo "redhat"|passwd --stdin testuser1'
    192.168.223.146 | SUCCESS | rc=0 >>
    更改用户 testuser1 的密码 。
    passwd: 所有的身份验证令牌已经成功更新。
    而command模块:
    [root@node1 ~]# ansible nodes -m command -a 'echo "redhat"|passwd --stdin testuser1'
    192.168.223.146 | SUCCESS | rc=0 >>
    redhat|passwd --stdin testuser1
    可以看出并没有修改用户的密码,command模块只能执行简单的命令
     
    script模块:
    1、将脚本传到node上
    2、并在node上执行该脚本
    ansible服务器:
    [root@node1 ~]# cat echo.sh
    #!/bin/bash
    echo "ansible is better" > /tmp/echo.text
    ansible all -m script -a "/root/echo.sh"
    节点查看:
    [root@wadeson ~]# ll /tmp/
    总用量 16
    -rw-r--r--. 1 root root 18 7月 30 14:46 echo.text
     
    setup模块:查看facts
    收集node上的系统信息,可以当作变量进行调用
    ansible all -m setup
     
      
  • 相关阅读:
    关于git的简单使用
    手机设备上调试接口,查看错误信息
    用after伪类清除浮动
    js字母大小写转换方法
    使用淘宝 NPM 镜像
    JS判断类型
    JS判断客户端是手机还是PC的2个代码
    微信小程序 WebSocket
    服务器安全管理
    Linux下禁止ping最简单的方法
  • 原文地址:https://www.cnblogs.com/jsonhc/p/7263516.html
Copyright © 2011-2022 走看看