ansible(续一)-阿里云开发者社区

开发者社区> 安全> 正文
登录阅读全文

ansible(续一)

简介:

安装本地软件包

[root@ms.dtedu.com~]$ansible all -m yum -a "name=/root/ipvsadm-DR.rpm state=installed "


1.10 user模块

创建和管理用户,其实使用command模块同样可以达到同样的效果。

选项:

home:指定家目录

createhome:配合home使用,yes/no

password:密码

name:用户名

state:状态,present,absent等

shell:使用的shell类型

system:指定系统账户类型

样例:

1、创建用户gongbing,密码12313,其他默认

[root@ms.dtedu.com~]$ansible all -m user -a "name=gongbing password=123123"

node5.dtedu.com | SUCCESS => {

    "changed": true, 

    "comment": "", 

    "createhome": true, 

    "group": 500, 

    "home": "/home/gongbing", 

    "name": "gongbing", 

    "password": "NOT_LOGGING_PASSWORD", 

    "shell": "/bin/bash", 

    "state": "present", 

    "system": false, 

    "uid": 500

}


2、删除用户,同时删除用户家目录,如果没有使用remove=yes,则家目录不会被删除

[root@ms.dtedu.com~]$ansible all -m user -a "name=gongbing  state=absent remove=yes"

node5.dtedu.com | SUCCESS => {

    "changed": true, 

    "force": false, 

    "name": "gongbing", 

    "remove": true, 

    "state": "absent"

}


1.11 synchronize模块

使用rsync同步文件

选项:

archive:是否归档

copy_links:是否复制链接文件

delete:删除源中没有,目标中有的文件

dest:目的位置

dest_port:对方接口,ssh接口

dirs:

mode:pull,客户端主动拉,push,服务器端推送

recursive:是否递归

rsync_path:如果没有在默认位置,指定命令的路径位置

src:指定管理服务器源文件位置

样例:

1、同步管理服务器/root/目录下的文件到远端服务器的/root/目录下,并删除源目录中没有,而目的目录中有的文件,删除命令慎用。

[root@ms.dtedu.com~]$ansible all -m synchronize -a "src=/root/ dest=/root/ rsync_path=/usr/bin/rsync rsync_opts='-avz --exclude=ipvsadm_DR-realserver.sh' delete=yes" 

root@node5.dtedu.com's password: 

node5.dtedu.com | SUCCESS => {

    "changed": true, 

    "cmd": "/usr/bin/rsync --delay-updates -F --compress --delete-after --archive --rsh 'ssh  -S none -o StrictHostKeyChecking=no' --rsync-path=\"/usr/bin/rsync\" -avz --exclude=ipvsadm_DR-realserver.sh --out-format='<<CHANGED>>%i %n%L' \"/root/\" \"node5.dtedu.com:/root/\"", 

    "msg": "building file list ... done\n<f.st...... ipvsadm-DR-realserver.sh\n.d..t...... .ansible/tmp/\ncd+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/\ncd+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/ansiballz_cache/\n<f+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/ansiballz_cache/synchronize-ZIP_DEFLATED\ncd+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-190887811627457/\n<f+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-190887811627457/synchronize.py\ncd+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-197655636791593/\n<f+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-197655636791593/synchronize.py\n*deleting   .ansible/tmp/ansible-tmp-1491648361.43-270103109521447/synchronize.py\n*deleting   .ansible/tmp/ansible-tmp-1491648361.43-270103109521447/\n*deleting   .ansible/tmp/ansible-tmp-1491648361.43-153252689637438/synchronize.py\n*deleting   .ansible/tmp/ansible-tmp-1491648361.43-153252689637438/\n*deleting   .ansible/tmp/ansible-local-4846toPJz0/ansiballz_cache/synchronize-ZIP_DEFLATED\n*deleting   .ansible/tmp/ansible-local-4846toPJz0/ansiballz_cache/\n*deleting   .ansible/tmp/ansible-local-4846toPJz0/\n\nsent 123310 bytes  received 121 bytes  11755.33 bytes/sec\ntotal size is 215264  speedup is 1.74\n", 

    "rc": 0, 

    "stdout_lines": [

        "building file list ... done", 

        "<f.st...... ipvsadm-DR-realserver.sh", 

        ".d..t...... .ansible/tmp/", 

        "cd+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/", 

        "cd+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/ansiballz_cache/", 

        "<f+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/ansiballz_cache/synchronize-ZIP_DEFLATED", 

        "cd+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-190887811627457/", 

        "<f+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-190887811627457/synchronize.py", 

        "cd+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-197655636791593/", 

        "<f+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-197655636791593/synchronize.py", 

        "*deleting   .ansible/tmp/ansible-tmp-1491648361.43-270103109521447/synchronize.py", 

        "*deleting   .ansible/tmp/ansible-tmp-1491648361.43-270103109521447/", 

        "*deleting   .ansible/tmp/ansible-tmp-1491648361.43-153252689637438/synchronize.py", 

        "*deleting   .ansible/tmp/ansible-tmp-1491648361.43-153252689637438/", 

        "*deleting   .ansible/tmp/ansible-local-4846toPJz0/ansiballz_cache/synchronize-ZIP_DEFLATED", 

        "*deleting   .ansible/tmp/ansible-local-4846toPJz0/ansiballz_cache/", 

        "*deleting   .ansible/tmp/ansible-local-4846toPJz0/", 

        "sent 123310 bytes  received 121 bytes  11755.33 bytes/sec", 

        "total size is 215264  speedup is 1.74"

    ]

}


1.12 mount模块

挂载块设备

选项:

fstype:指定文件系统类型

name:挂载点

opts:mount自身的参数

src:要挂载的文件

state:

present:只处理fstab中的配置,如果没有挂载点,则不会创建挂载点,但在fstab文件中会写入新的挂载信息。

[root@node5.dtedu.com /tmp]# cat /etc/fstab 


#

# /etc/fstab

# Created by anaconda on Thu Mar  9 09:57:24 2017

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

UUID=1671380c-445a-4f92-8b1e-d90b1f85224c /boot                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

/dev/loop0 /aaa ext3 defaults 0 0


absent:删除挂载点

mounted:自动创建挂载点并挂载之

umounted:卸载挂载点

样例:

通过dd命令模拟一个磁盘并分区格式化

[root@ms.dtedu.com~]$ansible all -a "dd if=/dev/zero of=/disk.img bs=4k count=1024"

node5.dtedu.com | SUCCESS | rc=0 >>

记录了1024+0 的读入

记录了1024+0 的写出

4194304字节(4.2 MB)已复制,0.00805549 秒,521 MB/秒


[root@ms.dtedu.com~]$ansible all -a "losetup /dev/loop0 /disk.img"

node6.dtedu.com | SUCCESS | rc=0 >>

[root@ms.dtedu.com~]$ansible all -m filesystem -a "dev=/disk.img fstype=ext3  opts=-F"

node6.dtedu.com | SUCCESS => {

    "changed": true

}


1、挂载指定块设备,如果挂载点不存在,则自动创建挂载点。

[root@ms.dtedu.com~]$ansible all -m mount -a "fstype=ext3 name=/aaa src=/dev/loop0 state=mounted"

node5.dtedu.com | SUCCESS => {

    "changed": true, 

    "dump": "0", 

    "fstab": "/etc/fstab", 

    "fstype": "ext3", 

    "name": "/aaa", 

    "opts": "defaults", 

    "passno": "0", 

    "src": "/dev/loop0"

}


2、卸载挂载点。unmounted和sbsent的区别就是absent卸载同时会删除挂载目录。

[root@ms.dtedu.com~]$ansible all -m mount -a "name=/aaa state=absent"

node6.dtedu.com | SUCCESS => {

    "changed": true, 

    "dump": "0", 

    "fstab": "/etc/fstab", 

    "name": "/aaa", 

    "opts": "defaults", 

    "passno": "0"

}


七、playbook简单介绍

组织结构:

1、target section:定义要执行playbook的远程主机组

常用配置选项:

hosts:远程主机组

user:执行远程主机的用户

sudo

sudo_user

connection:链接到远程主机的方式,默认ssh

gather_facts:是否在远程主机启动setup模块, 默认启动

2、variable section:playbook运行时变量部分

常用配置选项:

vars:给变量赋值

vars_files:调用定义变量的文件

vars_prompt:交互式输入变量值

3、task section:远程主机上执行的任务列表

方法一:

-name:install apache

action: yum name=httpd state=installed

方法二:

-name:configure apache

copy:src=files/httpd.conf dest=/etc/httpd/conf/httpd.conf

方法三:

-name:resart apache

service:

name:httpd

state:restarted

4、handler section:task执行完成后需要调用的任务

注意:在playbooks中使用模块跟在命令中使用有一点点不同,因为在playbooks中有许多从setup模块或者之前的模块中获取的数据要处理。有些模块在命令中无法使用,是因为他们需要访问变量,还有一些可以在命令行中使用的模块在playbooks中使用时会有更强大的功能

八、playbooks常用模块

1、template模块

可以设计一个框架式的配置文件,如何把ansible需要的值插入到合适的位置,其中jinja2最为复杂。

template和copy模块的不同:

template可以将配置文件中的变量在复制到目的文件中时,直接复制的是变量的值,而copy就是传统的文件复制功能。

2、pause暂停模块

在playbooks中暂停一段时间,加在脚本中通常用于给用户提供一个确认,或者提供一个手动确认。

- hosts: dtedu

  tasks:

    - name: "wait on user input"

      pause: prompt="warning! detected alight issue.ENTER to continue CTRL-C to quit"

    - copy: src=/root/123 dest=/tmp/                                                                                  

[root@ms.dtedu.com~]$ansible-playbook pause.yml 


PLAY [dtedu] *******************************************************************


TASK [setup] *******************************************************************

ok: [node6.dtedu.com]

ok: [node5.dtedu.com]


TASK [wait on user input] ******************************************************

[wait on user input]

warning! detected alight issue.ENTER to continue CTRL-C to quit:

Press 'C' to continue the play or 'A' to abort 


3、wait_for模块

用来检查一个tcp端口是否准备好接收远程连接,这是由远程主机来完成的,这个模块在后台运行某些程序,或者启动某些程序时需要一些时间的时候特别有用。可以用local_action参数来指定从远程主机运行命令,并配合ansible_hostname作为主机参数来连接远程受管主机。


4、assemble模块

把多个受管主机的文件合并成一个文件,当配置文件不允许包含的时候,特别有用,特别是在设置root用户的authorized_keys文件的时候。

5、add_host添加主机模块

可以动态的添加受管主机到playbooks中,可以使用uri模块从CMDB中获取主机信息然后添加他们。

6、group_by

根据主机的特性进行分组,可以将同一个操作系统,同一个拓扑结构,或者拥有相同性质的主机(都运行web)分为一组。

7、get_url

从远程主机下载文件。

-name: download foo.conf

Get_url: url=http://www.baidu.com dest=/root/ mode=0440

8、fail模块

九、变量详解

1、在hosts文件中定义变量。/etc/insible/hosts,这种定义方法使用率并不多。

[dtedu]

#10.40.0.[220:230]

node[5:6].dtedu.com http_port=80


2、在playbooks中定义变量。



本文转自 blackstome 51CTO博客,原文链接:http://blog.51cto.com/137783/1968797,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: