第2章 ansible基础元素

通过yum方式安装完ansible之后,它的相关文件存放位置,可以通过以下命令来查看:

rpm -ql ansible

 

大致分为以下几类:

1、配置文件目录:/etc/ansible

2、执行文件目录:/usr/bin

3、lib库:/usr/lib/python2.7/site-packages/ansible

4、帮助文档:/usr/share/doc/ansible-2.9.27

5、man手册:/usr/share/man/man1

 

ansible配置文件:/etc/ansible/ansible.cfg

分为如下几类配置

[defaults]:定义常规的连接类配置,多数保持默认即可。

[privilege_escalation]:部分配置主要针对 sudo 用户提权的配置。

[paramiko connection]:了解即可。

[ssh connection]:默认即可。

[accelerate]:加速相关。

[selinux]:了解即可。

[colors]:了解即可。

 

ansible 认证方式有密码认证和公私钥认证两种方式。

 

==============以root的身份执行==============

当前,我只有一台主机作为测试,那么首先生成相关公私钥对

ssh-keygen -N "" -b 4096 -t rsa -C "echoyang" -f /root/.ssh/echoyang.rsa

-N:指定密码,这里指定为空

-b:指定密钥的大小,这里指定为4096个字节

-t:指定密钥的类型,这里指定为rsa

-C:备注

-f:指定私钥存放的文件

此时生成的文件是:

(我一般使用默认的方法,ssh-keygen -t rsa,系统默认生成id_rsa和id_rsa.pub文件)

 

为本机添加密钥认证:

ssh-copy-id -i /root/.ssh/echoyang.rsa root@localhost

 

尝试免密登录:

ssh -i /root/.ssh/echoyang.rsa root@localhost

==============以root的身份执行==============

 

==============以普通用户的身份执行==============

[echoyang@localhost ~]$ ssh-keygen -t rsa

[echoyang@localhost ~]$ ssh-copy-id -i /home/echoyang/.ssh/id_rsa echoyang@localhost

[echoyang@localhost ~]$ ssh -i /home/echoyang/.ssh/id_rsa echoyang@localhost

 

需要提前以root用户在/etc/sudoers文件中增加echoyang用户

sudoedit /etc/sudoers

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

echoyang ALL=(ALL) ALL

 

通过免密连接之后,就可以用sudo获取权限。

[echoyang@localhost ~]$ sudo mkdir /data/hello

==============以普通用户的身份执行==============

 

Ansible的命令使用格式:

ansible <host-pattern> [options]

 

ansible all -m ping -u echoyang

以echoyang用户,对所有主机执行ping存活检测

all:匹配所有主机

-m ping:表示使用ping模块

-u echoyang:表示以echoyang用户来执行此项动作

 

ansible all -m ping -u echoyang -b

-b:表示become,在不指定切换到谁时,默认都是切换到root,以sudo的方式从echoyang切换到root

 

ansible all -m ping -u echoyang -b --become-user daolin

--become-user:明确指定从echoyang切换到daolin用户

 

我的疑问:是登录到远程主机之后,再进行的用户切换吗?

 

Ansible-playbook的命令使用格式:

ansible-playbook playbook.yml

 

ansible-galaxy

ansible-pull

ansible-doc

ansible-vault

ansible-console

 

ansible命令的使用场景:

1、非固话需求

2、临时一次性操作

3、二次开发接口调用

 

红色表示执行过程有异常、一般会中止剩余所有的任务。

绿色和橘黄色表示执行过程没有异常,所有任务均正常执行。

橘黄色表示命令执行结束后目标有状态的变化绿色表示命令执行结束后目标没有状态变化

 

ansible-galaxy的使用场景:

ansible-galaxy 的功能可以简单地理解为GitHub或 PIP 的功能。

通过 ansible-galaxy命令,我们可以根据下载量和关注量等信息,查找和安装优秀的Roles

 

ansible-pull的使用场景:

我们使用ansible命令,默认是push模式。也就是从控制端推送任务到被控制端

 

而ansible-pull是在被控制端执行的。

ansible-pull需要结合git(svn)和crontab来使用。

原理是:在定时任务中配置ansible-pull命令,ansible-pull会调用git或者svn,从指定地址下载playbook,然后执行。

管理端只需要将要执行的任务编成playbook,提交到仓库即可。

ansible-pull 通常在配置大批量机器的场景下会使用。

 

ansible-doc,是专门查看文档的命令。

// 列出支持的模块

ansible-doc -l


// 模块功能说明

ansible-doc ping

 

ansible-playbook:执行剧本,相当于ansible命令的批量化版本。

 

ansible-vault:

主要用于配置文件加密,如果Playbook 配置文件中包含敏感信息,不希望其他人随意查看,ansible-vault 可加密/解密这个配置文件。

 

ansible-console:一款类似于shell的交互控制台,方便更好地控制各台主机。

 

资产文件

/etc/ansible/hosts

 

1、未分组的主机

 

2、分过组的主机

 

3、范围

www[1:6].example.com

等价于

www1.example.com

www2.example.com

www3.example.com

www4.example.com

www5.example.com

www6.example.com

 

在资产文件中定义主机变量

效果等价于在远程主机直接定义变量:

 

在资产文件中定义组变量

为一组主机,定义共同的变量。

 

定义组嵌套和组变量

 

变量的其他定义位置

1、/etc/ansible/hosts

2、playbook中的vars区域

3、roles目录里的vars目录

4、roles目录的同级目录:group_vars和hosts_vars

 

 

正则表达式

ansible <pattern_goes_here> -m <module_name> -a <argutments>

 

// 重启 webservers 组所有主机的 httpd服务
ansible webservers -m service -a "name=httpd state=restarted"

 

(1)全量匹配

// all和*功能相同,但*号需引起来

ansible all -m ping

ansible "*" -m ping

 

ansible 192.168.1.* -m ping

 

(2)逻辑或匹配

ansible "web1:web2" -m ping

 

(3)逻辑非匹配

// 所有在webservers 组但不在phoenix组的主机

webservers:!phoenix

 

(4)逻辑与匹配

// webservers 组和 staging 组中同时存在的主机
webservers:&staging

 

(5)多条件组合

// webservers和dbservezs两个组中的所有主机在 staging 组中存在且在 phoenix组中不存在的主机
webservers:dbservers:&staging:!phoenix

 

(6)模糊匹配

// 所有以.magedu.com结尾的主机均符合

*.magedu.com

// one 开头.com结尾的所有主机和 dbservers 组中的所有主机

one*.com:dbservers

 

(7)域切割

webservers[0] = a

webservers[1] = b

webservers[0:1] = a

 

(8)正则匹配

ansible "~(beta|web|green)\.example\.(com|org)" -m ping

posted @ 2022-06-03 01:10  道霖  阅读(87)  评论(0编辑  收藏  举报