ansible学习笔记

简介:

 在日常服务器维护中,从系统安装到程序部署再到发布应用,在大规模的生产环境中,如果需要手动的每台服务器进行安装配置将会给运维人员带来许多繁琐而又重复的工作。这就促使了在每个运维层次中出现了不同的自动化运维工具。

常见的自动化运维工具分类有以下几类:

 系统安装运维工具(OS Provisioning):

   常见的有:PXE,Cobbler,Red Hat Satelite(redhat)系统专用等

 操作系统的配置运维工具(OS Config):

   常见的有:cfengine,puppet,saltsack,chef等 

 应用程序部署工具(Application Service Orchestration):

   常见的有:Func,Fabric,ControITier,Capistrano等

根据工作模式不同上面的运维工具有分为以下两类:

   agent:基于ssl协议实现,agent工作在被监控端,例如:puppet

   agentless: 基于ssh key实现,例如:ansible

ansible介绍:

 ansible是一款轻量级自动化运维工具,由Python语言开发,结合了多种自动化运维工具的特性,实现了批量系统配置、批量程序部署、批量命令执行等功能;ansible是基于模块化实现批量操作的。

各模块之间的工作联系如下图所示:

ansible架构图.jpgansible的特点:

 模块化、部署简单、工作于agentless模式、默认使用ssh协议、支持自定义模块、支持Palybook等

一、ansible安装以及常用的模块介绍

1、安装ansible

[root@node1 ~]# yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto ansible

2、配置ansible的主机文件,编辑/etc/ansible/hosts,添加管理节点主机:

[test]  \\主机组名,可以任意命名
172.16.2.13 \\管理节点主机,也可以是主机名

3、ansible常用的模块有:

command模块:默认模块,用于在各被管理节点运行指定的命令;

例:[root@node1 ~]# ansible all  -m command -a 'ifconfig eth0'
172.16.2.13 | success | rc=0 >>
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F8:D4:88  
          inet addr:172.16.2.13  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fef8:d488/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8046 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2165 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1392192 (1.3 MiB)  TX bytes:201703 (196.9 KiB)

user模块:用户模块,用于在各被管理节点管理用户所使用;

例:[root@node1 ~]# ansible all  -m user -a 'name=test'
172.16.2.13 | success >> {  
    "changed": true, 
    "comment": "", 
    "createhome": true, 
    "group": 500, 
    "home": "/home/test", 
    "name": "test", 
    "shell": "/bin/bash", 
    "state": "present", 
    "system": false, 
    "uid": 500
}
[root@node2 ~]# tail  -1 /etc/passwd
test:x:500:500::/home/test:/bin/bash

group模块:用户组模块,用于在各被管理节点管理用户组所使用;

例:[root@node1 ~]# ansible all  -m group  -a 'name=mylinux gid=1000'
172.16.2.13 | success >> {
    "changed": true, 
    "gid": 1000, 
    "name": "mylinux", 
    "state": "present", 
    "system": false
}

[root@node2 ~]# tail -1 /etc/gshadow
mylinux:!::

cron模块:计划任务模块,用于在各被管理节点管理计划任务;

例:[root@node1 ~]# ansible all -m cron -a  "name=time  minute='*/2' job='/usr/sbin/ntpdate 172.16.12'"
172.16.2.13 | success >> {
    "changed": true, 
    "jobs": [
        "time"
    ]
}
[root@node2 ~]# crontab  -l  \\在管理节点查看cron任务
#Ansible: time
*/2 * * * * /usr/sbin/ntpdate 172.16.12

copy模块:复制模块,复制文件至各管理节点;

例:[root@node1 ~]# ansible all -m copy -a 'src=/root/test dest=/tmp mode=600'
172.16.2.13 | success >> {
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/tmp/test", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0600", 
    "owner": "root", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1439189042.77-131108212586927/source", 
    "state": "file", 
    "uid": 0
}
[root@node2 ~]# ls -l /tmp/test
-rw------- 1 root root 0 Aug 10 14:44 /tmp/test

file模块:文件模块,修改各个节点指定的文件属性;

例:[root@node1 ~]# ansible all -m file -a 'path=/tmp/test mode=644 owner=test'
172.16.2.13 | success >> {
    "changed": true, 
    "gid": 0, 
    "group": "root", 
    "mode": "0644", 
    "owner": "test", 
    "path": "/tmp/test", 
    "size": 0, 
    "state": "file", 
    "uid": 500
}
[root@node2 ~]# ls -l /tmp/test
-rw-r--r-- 1 test root 0 Aug 10 14:44 /tmp/test

ping模块:测试模块,测试各个被管理节点是否在线;

例:[root@node1 ~]# ansible all  -m ping
172.16.2.13 | success >> {
    "changed": false, 
    "ping": "pong"
}

service模块:管理各个节点的服务

例:[root@node1 ~]# ansible all -m service -a 'name=ntpd  enabled=true'
172.16.2.13 | success >> {
    "changed": true, 
    "enabled": true, 
    "name": "ntpd"
}

shell模块:与command模块功能相同,但比command的模块功能强大

例:[root@node1 ~]# ansible all -m shell -a 'cat /etc/passwd | grep root'
172.16.2.13 | success | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

script模块:自动复制脚本至远程节点,并运行之

例:[root@node1 ~]# cat ansible.sh 
#!/bin/bash
echo  "hello word" >> /tmp/test
[root@node1 ~]# ansible all -m script -a '/root/ansible.sh'
172.16.2.13 | success >> {
    "changed": true, 
    "rc": 0, 
    "stderr": "OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug1: mux_client_request_session: master session id: 2\r\ndebug1: mux_client_request_session: master session id: 2\r\nShared connection to 172.16.2.13 closed.\r\n", 
    "stdout": ""
}
[root@node2 ~]# cat /tmp/test
hello word

setup模块:收集ansible的facters

例:[root@node1 ~]# ansible all -m setup
172.16.2.13 | success >> {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "172.16.2.13"
        ], 
       ...............

yum模块:用于在各个管理节点安装软件所使用

例:[root@node1 ~]# ansible all -m yum -a 'name=httpd state=present'
172.16.2.13 | success >> {
    "changed": true, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "Loaded plugins: fastestmirror\nSetting up Install Process\nLoading mirror speeds from cached hostfile\n * base: mirrors.yun-idc.com\n * extras: mirrors.yun-idc.com\n * updates: mirrors.yun-idc.com\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.2.15-45.el6.centos will be installed\n--> Processing Dependency: httpd-tools = 2.2.15-45.el6.centos for package: httpd-2.2.15-45.el6.centos.x86_64\n--> Processing Dependency: apr-util-ldap for package: httpd-2.2.15-45.el6.centos.x86_64\n--> Processing Dependency: /etc/mime.types for package: httpd-2.2.15-45.el6.centos.x86_64\n--> Running transaction check\n---> Package apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 will be installed\n---> Package httpd-tools.x86_64 0:2.2.15-45.el6.centos will be installed\n---> Package mailcap.noarch 0:2.1.31-2.el6 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package             Arch         Version                      Repository  Size\n================================================================================\nInstalling:\n httpd               x86_64       2.2.15-45.el6.centos         base       829 k\nInstalling for dependencies:\n apr-util-ldap       x86_64       1.3.9-3.el6_0.1              base        15 k\n httpd-tools         x86_64       2.2.15-45.el6.centos         base        77 k\n mailcap             noarch       2.1.31-2.el6                 base        27 k\n\nTransaction Summary\n================================================================================\nInstall       4 Package(s)\n\nTotal download size: 947 k\nInstalled size: 3.1 M\nDownloading Packages:\n--------------------------------------------------------------------------------\nTotal                                           977 kB/s | 947 kB     00:00     \nRunning rpm_check_debug\nRunning Transaction Test\nTransaction Test Succeeded\nRunning Transaction\n\r  Installing : httpd-tools-2.2.15-45.el6.centos.x86_64                      1/4 \n\r  Installing : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                         2/4 \n\r  Installing : mailcap-2.1.31-2.el6.noarch                                  3/4 \n\r  Installing : httpd-2.2.15-45.el6.centos.x86_64                            4/4 \n\r  Verifying  : mailcap-2.1.31-2.el6.noarch                                  1/4 \n\r  Verifying  : httpd-2.2.15-45.el6.centos.x86_64                            2/4 \n\r  Verifying  : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                         3/4 \n\r  Verifying  : httpd-tools-2.2.15-45.el6.centos.x86_64                      4/4 \n\nInstalled:\n  httpd.x86_64 0:2.2.15-45.el6.centos                                           \n\nDependency Installed:\n  apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1                                        \n  httpd-tools.x86_64 0:2.2.15-45.el6.centos                                     \n  mailcap.noarch 0:2.1.31-2.el6                                                 \n\nComplete!\n"
    ]
}
[root@node2 ~]# rpm -q httpd
httpd-2.2.15-45.el6.centos.x86_64

4、ansible使用帮助

ansbile-doc -l \\列出ansible的所有模块
ansible-doc -s module_name \\查看模块的属性信息
例:查看service模块的属性信息;
[root@node1 ~]# ansible-doc -s service
less 436
Copyright (C) 1984-2009 Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less
- name: M a n a g e   s e r v i c e s .
  action: service
      arguments              # Additional arguments provided on the command line
      enabled                # Whether the service should start on boot. *At least one of state and enabled are required.*
      name=                  # Name of the service.
      pattern                # If the service does not respond to the status command, name a substring to look for as would be found in the output of the `ps' command 
      runlevel               # For OpenRC init scripts (ex: Gentoo) only.  The runlevel that this service belongs to.
      sleep                  # If the service is being `restarted' then sleep this many seconds between the stop and start command. This helps to workaround badly beha
      state                  # `started'/`stopped' are idempotent actions that will not run commands unless necessary.  `restarted' will always bounce the service.  `r

原创文章,作者:马行空,如若转载,请注明出处:http://www.178linux.com/6941

(0)
马行空马行空
上一篇 2015-08-17
下一篇 2015-08-17

相关推荐

  • Centos 6 –grub legacy及grub修复

    一、CentOS 6 grub legacy:     1.启动流程:             POST –> Boot Sequence(BIOS) –> Boo…

    Linux干货 2016-09-21
  • Linux系统启动流程

        下面按照系统的启动顺序来进行逐一的讲解。 一、POST     当我们按下开机的电源后,主板上的芯片组会首先向CPU发出一个reset指令,之后待芯片组检测到电源供电稳定后便撤去reset指令,CPU就会跳转到BIOS中的启动代码位置; BIOS首先要检测关键设备(如内显…

    Linux干货 2015-05-23
  • 进程和计划任务

    1、进程概念 内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等; 进程是运行中的程序的一个副本,是被载入内存的一个指令集合; 进程ID(PID )号码被用来标记各个进程; UID、GID 和SELinux 语境决定对文件系统的存取和访问权限,这些权限通常从执行进程的用户来继承并且存在生命周期; task struct:Linux内核存…

    Linux干货 2016-09-13
  • N22-第十周作业

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) (1)POST:加电自检,利用COMS里记录的配置信息检测硬件是否都工作正常 (2)Boot Sequence: 按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备 Grub引导程序:提供一个菜单,允许用户选择要启动的系统或不同的内核版本, 把用户选定的内…

    Linux干货 2016-10-25
  • windows server 2008 r2 每隔一段时间自动关机

    首先来说一下我的狗血经历:     话说作为一个地铁汪,每天背着电脑从房山到朝阳那简直就是能累死我的节奏,所以我跟公司申请我不要用自己的笔记本了(补助我不要了)。最后公司把一台不用的server 2008r2给我用,12G内存,志强CPU,跑虚拟机杠杠的。 但是噩梦开始了,我发现一个特点,这台server 2008 r…

    2015-11-26