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
     
      
  • 相关阅读:
    教你如何有效防止DDos攻击?
    IsNumeric 判断字符串是否为数字(使用Val函数实现),这个函数相当于Java的IsNaN函数
    Delphi全角转半角
    SetLocalTime API函数设置本地时间(DateTimeToSystemTime函数,把TDateTime转换成TSystemTime)
    StyleBook皮肤控件的使用
    Qt 学习之路 2(19):事件的接受与忽略(当重写事件回调函数时,时刻注意是否需要通过调用父类的同名函数来确保原有实现仍能进行!有好几个例子。为什么要这么做?而不是自己去手动调用这两个函数呢?因为我们无法确认父类中的这个处理函数有没有额外的操作)
    C# 8.0、.NET Framework 4.8与NET Standard 2.1的一个说明
    基于PaaS和SaaS研发平台体系
    Redis 当成数据库在使用和可靠的分布式锁,Redlock 真的可行么?
    NET Core + Ocelot + IdentityServer4 + Consul
  • 原文地址:https://www.cnblogs.com/jsonhc/p/7263516.html
Copyright © 2011-2022 走看看