写点什么

Ansible AD-Hoc

用户头像
耳东
关注
发布于: 2021 年 05 月 11 日

Ansible 的 AD-Hoc 命令是一种可以快速输入的命令。AD-Hoc 命令可以用来做一些快速的事情,而不必编写完整的 playbook。


在学习 playbook 之前,这是一个很好的开始了解 Ansible 的基本功能的地方。


AD-Hoc 和 playbook 都使用相同的模块,都是 ansible 提供的。目前 已经有超过 1000+ 模块可以使用。


常用基本参数


  • -o 将输出合并为 1 行。

  • -m 指定模块

  • -a 模块参数

shell 命令

可以使用 ansible 命令在其他节点上执行 shell 命令,并且可以并行执行。


首先最好配置信任连接,可以免密码登陆其他节点,如果不想要这样的话,可以使用 --ask-pass (-k) 参数来输入密码。


现在把一个组里的所有机器都执行一个命令,这下边的这个例子里,使用 -f 参数指定并行数量,把 web 组里的所有机器重启。


$ ansible web -a "/sbin/reboot" -f 10
复制代码


ansible 默认使用当前用户,如果你不希望使用当前用户,那么你可以通过命令行指定不同的用户来执行,比如


$ ansible web -a "/usr/bin/foo" -u zhangsan
复制代码


你不仅希望使用其他用户,还想要使用这个用户提权来执行


$ ansible web -a "/usr/bin/foo" -u zhangsan --become [--ask-become-pass]
复制代码


或者变成其他用户来执行


$ ansible web -a "/usr/bin/foo" -u zhangsan --become --become-user lisi [--ask-become-pass]
复制代码


或者试用 shell 模块

文件传输

ansible 命令行下可以并行的拷贝大量的文件到多个节点上。


拷贝过程主要使用 copy 模块。文件的变化是通过 MD5 值来判断的。


$ ansible web -m copy -a "src=/etc/hosts dest=/tmp/hosts"
复制代码


使用 file 模块 可以改变属组和权限,


$ ansible webs -m file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"
复制代码


或者创建目录


$ ansible webservers -m file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory"
复制代码


或者删除文件


$ ansible webservers -m file -a "dest=/path/to/c state=absent"
复制代码

包管理

对于操作系统场景的包管理都支持,以 yum 为例


比如安装一个包,但是不升级


$ ansible web -m yum -a "name=wget state=present"
复制代码


比如安装一个指定版本的包


$ ansible web -m yum -a "name=wget-1.14 state=present"
复制代码


安装最新版本


$ ansible web -m yum -a "name=wget state=latest"
复制代码

用户和组

user 模块可以方便地创建和操作现有的用户帐户,以及删除可能存在的用户帐户:


$ ansible all -m user -a "name=foo password=<crypted password here>"
$ ansible all -m user -a "name=foo state=absent"
复制代码

管理服务

可以使用服务管理模块来管理服务


比如启动服务


$ ansible web -m service -a "name=httpd state=started"
复制代码


比如重启服务


$ ansible web -m service -a "name=httpd state=restarted"
复制代码


比如停止服务


$ ansible web -m service -a "name=httpd state=stopped"
复制代码

收集 Facts

Facts 组件是 Ansible 用于采集被管理机器设备信息的功能。整个 facts 信息被包装在一个 json 格式的数据结构中。


Facts 表示关于系统的已发现变量。这些可以用来实现任务的条件执行,也可以用来获取关于系统的特殊信息。可以通过 setup 模块获取


$ ansible web -m setup
复制代码


输出如下:


 [root@172-18-12-6 ~]# ansible web -m setup172.18.12.47 | SUCCESS => {    "ansible_facts": {        "ansible_all_ipv4_addresses": [            "172.18.12.47"        ],        "ansible_all_ipv6_addresses": [            "fe80::2ab4:4dc6:eb66:aea5",            "fe80::e104:c59f:6682:32d2",            "fe80::87d0:287f:ae77:f5ef"        ],        "ansible_apparmor": {            "status": "disabled"        },        "ansible_architecture": "x86_64",        "ansible_bios_date": "04/01/2014",        "ansible_bios_version": "1.9.1-5.el7.centos",        "ansible_cmdline": {            "BOOT_IMAGE": "/vmlinuz-3.10.0-693.el7.x86_64",            "LANG": "en_US.UTF-8",            "quiet": true,            "rd.lvm.lv": "centos/swap",            "rhgb": true,            "ro": true,            "root": "/dev/mapper/centos-root"        },        "ansible_date_time": {            "date": "2019-03-26",            "day": "26",            "epoch": "1553594894",            "hour": "18",            "iso8601": "2019-03-26T10:08:14Z",            "iso8601_basic": "20190326T180814810604",            "iso8601_basic_short": "20190326T180814",            "iso8601_micro": "2019-03-26T10:08:14.810657Z",            "minute": "08",            "month": "03",            "second": "14",            "time": "18:08:14",            "tz": "CST",            "tz_offset": "+0800",            "weekday": "星期二",            "weekday_number": "2",            "weeknumber": "12",            "year": "2019"        },        "ansible_default_ipv4": {            "address": "172.18.12.47",            "alias": "eth0",            "broadcast": "172.18.15.255",            "gateway": "172.18.0.1",            "interface": "eth0",            "macaddress": "fa:32:04:69:68:00",            "mtu": 1500,            "netmask": "255.255.240.0",            "network": "172.18.0.0",            "type": "ether"        },    ......    
复制代码


而且 facts 还支持查看指定信息。比如只查看设备的 IPv4 地址。


$ ansible web -m setup -a 'filter=ansible_default_ipv4'
复制代码


发布于: 2021 年 05 月 11 日阅读数: 9
用户头像

耳东

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Ansible AD-Hoc