设为首页 收藏本站
查看: 1312|回复: 0

[经验分享] 自动化运维工具Ansible实战(三)常用的配置和相关命令

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-9-7 11:11:41 | 显示全部楼层 |阅读模式
Ansible默认安装好后有一个配置文件/etc/ansible/ansible.cfg,该配置文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等。具体如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    [defaults]
    # some basic default values...
    #inventory      = /etc/ansible/hosts
    hostfile       = /etc/ansible/conf/hosts   \\指定默认hosts配置的位置
    # library_path = /usr/share/my_modules/
    remote_tmp     = $HOME/.ansible/tmp
    pattern        = *
    forks          = 5
    poll_interval  = 15
    sudo_user      = root  \\远程sudo用户
    #ask_sudo_pass = True  \\每次执行ansible命令是否询问ssh密码
    #ask_pass      = True  \\每次执行ansible命令时是否询问sudo密码
    transport      = smart
    remote_port    = 22
    module_lang    = C
    gathering = implicit
    host_key_checking = False    \\关闭第一次使用ansible连接客户端是输入命令提示
    log_path    = /var/log/ansible.log \\需要时可以自行添加。chown -R root:root ansible.log
    system_warnings = False    \\关闭运行ansible时系统的提示信息,一般为提示升级
    # set plugin path directories here, separate with colons
    #action_plugins     = /usr/share/ansible/plugins/action
    #cache_plugins      = /usr/share/ansible/plugins/cache
    #callback_plugins   = /usr/share/ansible/plugins/callback
    #connection_plugins = /usr/share/ansible/plugins/connection
    #lookup_plugins     = /usr/share/ansible/plugins/lookup
    #inventory_plugins  = /usr/share/ansible/plugins/inventory
    #vars_plugins       = /usr/share/ansible/plugins/vars
    #filter_plugins     = /usr/share/ansible/plugins/filter
    #test_plugins       = /usr/share/ansible/plugins/test
    #strategy_plugins   = /usr/share/ansible/plugins/strategy
    fact_caching = memory
    [accelerate]
    accelerate_port = 5099
    accelerate_timeout = 30
    accelerate_connect_timeout = 5.0
    # The daemon timeout is measured in minutes. This time is measured
    # from the last activity to the accelerate daemon.
    accelerate_daemon_timeout = 30



  ansible默认的配置都是注释掉的(#),可以通过去掉#来进行开启相应的配置服务,比如启用日志,更改相应的hosts文件的路径等等。  如查看日志,当再次操作ansible的时候就可以查看生成的日志了
1
2
3
4
5
6
7
8
[iyunv@Monitor .ssh]# tail -f /var/log/ansible.log
192.168.180.4
^ here
Attempted to read "/etc/ansible/conf/hosts" as ini file: /etc/ansible/conf/hosts:7: Expected key=value host variable assignment, got: ansible_ssh_port
2017-09-01 11:09:44,012 p=58662 u=root |  192.168.180.10 | SUCCESS | rc=0 >>
11:07:42 up 46 days, 19:50,  3 users,  load average: 0.08, 0.02, 0.01
2017-09-01 11:10:16,229 p=58662 u=root |  192.168.180.2 | SUCCESS | rc=0 >>
11:04:53 up 46 days, 19:52,  3 users,  load average: 0.37, 0.41, 0.37




(二)Ansible命令参数
(1)命令格式: ansible <host-pattern> [options]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[iyunv@Monitor ansible]# ansible --help
Usage: ansible <host-pattern> [options]
Options:
-m MODULE_NAME, --module-name=MODULE_NAME 要执行的模块,默认为command
-a MODULE_ARGS, --args=MODULE_ARGS 模块的参数
-u REMOTE_USER, --user=REMOTE_USER ssh 连接的用户名,默认用root,ansible.cfg 中可以配置
-k, --ask-pass 提示输入ssh 登录密码,当使用密码验证登录的时候用
-s, --sudo sudo 运行
-U SUDO_USER, --sudo-user=SUDO_USER sudo 到哪个用户,默认为root
-K, --ask-sudo-pass 提示输入sudo 密码,当不是NOPASSWD 模式时使用
-B SECONDS, --background=SECONDS run asynchronously, failing after X seconds(default=N/A)
-P POLL_INTERVAL, --poll=POLL_INTERVAL set the poll interval if using
-B (default=15)
-C, --check 只是测试一下会改变什么内容,不会真正去执行
-c CONNECTION 连接类型(default=smart)
-f FORKS, --forks=FORKS fork 多少个进程并发处理,默认5
-i INVENTORY, --inventory-file=INVENTORY 指定hosts 文件路径,默认default=/etc/ansible/hosts
-l SUBSET, --limit=SUBSET 指定一个pattern,对<host_pattern>已经匹配的主机中再过滤一次
--list-hosts 只打印有哪些主机会执行这个playbook 文件,不是实际执行该playboo
-M MODULE_PATH, --module-path=MODULE_PATH 要执行的模块的路径,默认为/usr/share/ansible/
-o, --one-line 压缩输出,摘要输出
--private-key=PRIVATE_KEY_FILE 私钥路径
-T TIMEOUT, --timeout=TIMEOUT ssh 连接超时时间,默认10 秒
-t TREE, --tree=TREE 日志输出到该目录,日志文件名会以主机名命名
-v, --verbose verbose mode (-vvv for more, -vvvv to enable connection debugging)



以上就是ansible常用的命令格式及参数,在接下来的学习中会逐步运用的。

(2)Ad-Hoc
    ansible任务:ad hoc任务就是执行shell命令、或shell脚本。可以执行一些简单的命令,不需要将这些执行的命令特别保存下来。
适合执行简单的命令。
ansible playbook:可以解决比较复杂的任务,可以将命令保存下来。
适合执行配置管理或部署客户机。

    Ad-Hoc 是指Ansible下临时执行的一条命令,并且不需要保存的命令,对于复杂的命令会使用playbook。Ad-hoc的执行依赖于模块,ansible官方提供了大量的模块。 如:command、raw、shell、file、cron等,具体可以通过ansible-doc -l 进行查看 。可以使用ansible-doc -s module来查看某个模块的参数,也可以使用ansible-doc help module来查看该模块更详细的信息。接下来我们详细讲解该命令的用法:
    1.命令说明: ansible 主机或组-m 模块名-a '模块参数'  ansible参数            
  • 主机和组,是在/etc/ansible/hosts 里进行指定的部分,当然动态Inventory 使用的是脚本从外部应用里获取的主机;
  • 模块名,可以通过ansible-doc -l 查看目前安装的模块,默认不指定时,使用的是command模块,具体可以查看/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,默认模块可以在该配置文件中进行修改;
  • 模块参数,可以通过 “ansible-doc -s 模块名” 查看具体的用法及后面的参数;
  • ansible参数,可以通过ansible命令的帮助信息里查看到,这里有很多参数可以供选择,如是否需要输入密码、是否sudo等。

    2.后台执行。当命令执行时间比较长时,也可以放到后台执行,使用-B、-P参数,如下:
1
2
3
ansible all -B 3600-a "/usr/bin/long_running_operation --do-stuff" #后台执行命令3600s,-B 表示后台执行的时间
ansible all -m async_status -a "jid=123456789"  #检查任务的状态
ansible all -B 1800-P 60-a "/usr/bin/long_running_operation --do-stuff" #后台执行命令最大时间是1800s即30分钟,-P 每60s检查下状态,默认15s




(3)命令执行模块。命令执行模块包含如下 四个模块:
  • command模块:该模块通过-a跟上要执行的命令可以直接执行,不过命令里如果有带有如下字符部分则执行不成功 “  "<", ">", "|",  "&" ;
  • shell 模块:用法基本和command一样,不过其是通过/bin/sh进行执行,所以shell 模块可以执行任何命令,就像在本机执行一样;
  • raw模块:用法和shell 模块一样 ,其也可以执行任意命令,就像在本机执行一样;
  • script模块:其是将管理端的shell 在被管理主机上执行,其原理是先将shell 复制到远程主机,再在远程主机上执行,原理类似于raw模块。

注:raw模块和comand、shell 模块不同的是其没有chdir、creates、removes参数,chdir参数的作用就是先切到chdir指定的目录后,再执行后面的命令,这在后面很多模块里都会有该参数 。接下来进行详细的介绍:

1,command模块包含如下选项:
  • creates:创建一个文件名,当该文件存在,则该命令不执行
  • free_form:要执行的linux指令
  • chdir:在执行指令之前,先切换到该指定的目录
  • removes:一个文件名,当该文件不存在,则该选项不执行
  • executable:切换shell来执行指令,该执行路径必须是一个绝对路径

一下是使用的例子
   使用chdir的实例:
1
2
3
4
5
6
7
8
9
10
11
12
[iyunv@Monitor ansible]# ansible 192.168.180.6 -m command -a  'chdir=/tmp/test.txt touch test.file'  
[iyunv@Monitor ansible]# ansible 192.168.180.5 -m command -a 'creates=/tmp/lqb.txt touch test.file'
192.168.180.5 | SUCCESS | rc=0 >>
[iyunv@Monitor ansible]# ansible 192.168.180.6 -m command -a  'chdir=/tmp/test.txt touch test.file'
192.168.180.6 | FAILED | rc=0 >>
MODULE FAILURE
[iyunv@Monitor ansible]# ansible 192.168.180.6 -m shell -a  'chdir=/tmp/test.txt touch test.file'      
192.168.180.6 | FAILED | rc=0 >>
MODULE FAILURE
[iyunv@Monitor ansible]# ansible 192.168.180.6 -m raw -a  'chdir=/tmp/test.txt touch test.file'     
192.168.180.6 | SUCCESS | rc=0 >>
Shared connection to 192.168.180.6 closed.



三个命令都会返回执行成功的状态。不过实际上只有前两个文件会被创建成功。使用raw模块的执行的结果文件事实上也被正常创建了,不过不是在chdir指定的目录,而是在当前执行用户的家目录。
creates与removes示例:
1
2
ansible 192.168.1.1 -a 'creates=/tmp/server.txt uptime'  ###当/tmp/server.txt文件存在时,则不执行uptime指令
ansible 192.168.1.1 -a 'removes=/tmp/server.txt uptime'  ###当/tmp/server.txt文件不存在时,则不执行uptime指令




2.script模块实例。首先在ansible服务器上创建一个脚本并赋予可执行权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[iyunv@Monitor ansible]# vim script.sh
#/bin/bash
ifconfig -a;
df -h
~  
[iyunv@Monitor ansible]# chmod +x script.sh
[iyunv@Monitor ansible]# ansible 192.168.180.5 -m script -a 'script.sh'
192.168.180.5 | SUCCESS => {
    "changed": true,
    "rc": 0,
    "stderr": "Shared connection to 192.168.180.5 closed.\r\n",
    "stdout": "eth0      Link encap:Ethernet  HWaddr 00:15:5D:6E:28:0F  \r\n          inet addr:192.168.180.5  Bcast:192.168.180.255  Mask:255.255.255.0\r\n          inet6 addr: fe80::215:5dff:fe6e:280f/64 Scope:Link\r\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\r\n          RX packets:8629 errors:0 dropped:0 overruns:0 frame:0\r\n          TX packets:2576 errors:0 dropped:0 overruns:0 carrier:0\r\n          collisions:0 txqueuelen:1000 \r\n          RX bytes:1868783 (1.7 MiB)  TX bytes:299303 (292.2 KiB)\r\n\r\nlo        Link encap:Local Loopback  \r\n          inet addr:127.0.0.1  Mask:255.0.0.0\r\n          inet6 addr: ::1/128 Scope:Host\r\n          UP LOOPBACK RUNNING  MTU:16436  Metric:1\r\n          RX packets:0 errors:0 dropped:0 overruns:0 frame:0\r\n          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0\r\n          collisions:0 txqueuelen:0 \r\n          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)\r\n\r\n文件系统\t      容量  已用  可用 已用%% 挂载点\r\n/dev/mapper/VolGroup-lv_root\r\n                       50G  4.6G   43G  10% /\r\ntmpfs                 935M     0  935M   0% /dev/shm\r\n/dev/sda1             485M   32M  429M   7% /boot\r\n/dev/mapper/VolGroup-lv_home\r\n                       72G  180M   68G   1% /home\r\n",
    "stdout_lines": [
        "eth0      Link encap:Ethernet  HWaddr 00:15:5D:6E:28:0F  ",
        "          inet addr:192.168.180.5  Bcast:192.168.180.255  Mask:255.255.255.0",
        "          inet6 addr: fe80::215:5dff:fe6e:280f/64 Scope:Link",
        "          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1",
        "          RX packets:8629 errors:0 dropped:0 overruns:0 frame:0",
        "          TX packets:2576 errors:0 dropped:0 overruns:0 carrier:0",
        "          collisions:0 txqueuelen:1000 ",
        "          RX bytes:1868783 (1.7 MiB)  TX bytes:299303 (292.2 KiB)",
        "",
        "lo        Link encap:Local Loopback  ",
        "          inet addr:127.0.0.1  Mask:255.0.0.0",
        "          inet6 addr: ::1/128 Scope:Host",
        "          UP LOOPBACK RUNNING  MTU:16436  Metric:1",
        "          RX packets:0 errors:0 dropped:0 overruns:0 frame:0",
        "          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0",
        "          collisions:0 txqueuelen:0 ",
        "          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)",
        "",
        "文件系统\t      容量  已用  可用 已用%% 挂载点",
        "/dev/mapper/VolGroup-lv_root",
        "                       50G  4.6G   43G  10% /",
        "tmpfs                 935M     0  935M   0% /dev/shm",
        "/dev/sda1             485M   32M  429M   7% /boot",
        "/dev/mapper/VolGroup-lv_home",
        "                       72G  180M   68G   1% /home"
    ]
}



  #########也可以直接进行输出如下图

wKiom1mpLjawS8pNAAB8wZpk4Lk589.png



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-404102-1-1.html 上篇帖子: 利用ansible简单修改一批务器密码为统一密码 下篇帖子: 自动化运维工具Ansible实战(四)常用模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表