临时命令
使用临时命令可以快速执行单个Ansible任务,不需要将其保存下来再次运行
这是一种简单的在线操作,无需编写playbook就可以运行
使用临时命令通过模块来执行任务
模块的简单介绍
模块:临时命令用于完成任务的工具
Ansible提供了数百个能够完成不同任务的模块,便于完成所需的任务
模块的简单查询
ansible-doc -l 命令来列出系统上所有安装的模块
ansible-doc 模块名 来查看特定模块的文档——全英文教程
举个例子就是 ansible-doc ping
简单地举几个Ansible模块
模块的使用
通过-m选项调用模块
使用-a选项以带引号字符串形式取得参数,如果需要指定多个参数,使用引号括起的空格分隔列表形式
例子:使用user模块 确保存在newbie用户在servera.lab.example.com上且其uid为4000
ansible -m user -a "name=newbie uid=4000state=present" servera.lab.example.com
在受管主机上运行任意命令
command模块允许管理员在受管主机的命令行中运行任何命令
并且这些命令不经过主机上的shell处理
例子:ansiblemymanagedhosts -m command -a /usr/bin/hostname
这句代码的意思是在每个受管主机上都运行hostname命令
shell模块与command模块类似,区别是shell模块的命令会通过受管主机上的shell进行处理,因此可以访问shell环境变量,也可以使用重定向和传送等shell操作
shell模块:会交给主机上的shell处理
并且在使用command模块和shell模块使用set命令的时候
只有shell可以成功
raw模块:绕过子系统直接使用shell的命令
这几个可能会导致计算机报告状态不报告change
所以不推荐使用
配置临时命令的连接
在临时命令中添加选项,这些选项会优先于ansible文件中的配置
运行临时命令实验
开始 lab deploy-adhoc start(workstation)
1.确定devops账户的sudo配置
ssh devops@servera.lab.example.com
sudo cat /etc/sudoers.d/devops
exit
2.去往新目录查看ansible.cfg和inventory文件的内容
cd~/deploy-adhoc
cat ansible.cfg
3.执行ping模块确保所有主机可以使用
ansible all -m ping
4.去往workstation使用command模块 查看id
ansible localhost -m command -a "id"
5. 执行同样的命令但使用-u选项以devops账户进行
ansible localhost -m command -a "id" -u devops
6.使用copy模块 更改/etc/motd文件的内容
添加字符串“managed by ansible”使用devops账户执行命令
但不使用 --become切换到root用户
ansible localohost -m copy -a "content="manage byansible\" dest=/etc/mota" -u devops
当尝试运行的时候就会发现 因为权限不足并不能成功
7.使用特权升级再次执行上面的命令
ansible localohost -m copy-a "content="manage by ansible\" dest=/etc/mota" -udevops --become
这里通过使用root的权限成功
8.对所有受控主机都执行命令
ansible all -m copy -a"content="manage by ansible\" dest=/etc/mota" -udevops --become
9.通过command模块 执行临时命令 运行cat /etc/motd 验证内容已经修改成功
ansible all -m command -a "cat /etc/motd" -u devops
完成实验 lab deploy-adhoc finish