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 11:27
下一篇 2015-08-17 11:29

相关推荐

  • 马哥教育网络班21期+第四周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 ~]# cp -r /etc/skel /home/tuser1; chmod -R gx=— /home/tuser1 [root@mag…

    Linux干货 2016-08-02
  • 理解基本权限以及特殊权限:Suid 、Sgid、Sticky以及acl

    理解基本权限以及特殊权限:Suid 、Sgid、Sticky以及acl 在Linux中特殊权限是什么?为什么要设定特殊权限?回答这个问题前,我们不妨思考为什么要设定权限? 大家知道Linux中一切皆文件。不论你是什么,在linux系统中都会被当做一个文件来看待。无论你是文本或目录,硬件或软件,图片或视频等等,统统都被当做文件来看待。所以,在linux中,文件…

    Linux干货 2017-04-08
  • 理解Inode

    inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础。 我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念,从而大大简化用户接口。 下面就是我的inode学习笔记,尽量保持简单。 一、inode是什么? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最…

    Linux干货 2015-03-20
  • 马哥教育21期网络班—第8周课程+练习—-成长进行时–不退步

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:一种网路装置,负责网路桥接,将网络的多个网段在数据链路层连接起来。 集线器:将多条以太网线或光纤集合连接在同一段物理介质下的装置。工作在物理层。 二层交换机:工作在数据链路层,交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通…

    Linux干货 2016-08-24
  • Linux中的账号管理(上)

    一背景  Linux  是  一个真实的、完整的多用户多任务操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响,例如某台linux服务器上有4个用户,分别是root、www、ftp和mysql,在同一时间内,root用户可能在查看系统日志,管理维护系统,ww…

    Linux干货 2016-08-04