Ansible(1)—— Ansible详解及inventory文件配置

目录

一、Ansible详解

 (一)、认识Ansible

  • 1、Ansible 是什么
  • 2、为什么选择ansible
  • 3、Ansible 是如何工作的
  • 4、Ansible通信机制
  • 5、Ansible应用场景
  • 6、ansible执行流程
  • 7、ansible生成的主要文件

(二)、Ansible安装、配置及使用

  • 1、 在server1上安装ansible
  • 2、熟悉ansible配置文件使用
  • 3、参数及ansible命令的使用
  • 4、 创建普通用户,执行分发任务
  • 5、Inventory文件配置
  • 6、Ansible与正则

 

二、Ansible安装、配置及使用

1、实验环境的创建

  • 1.1、实验环境
  • 1.2、创建虚拟机内存和cpu的要求
  • 1.3、安装bah方便补齐命令
  • 1.4、设置虚拟机的上网功能

2、 在server1上安装ansible

  • 1、配置yum源
  • 2、安装ansible

3、熟悉ansible配置文件使用

  •     ansible配置文件查找顺序
  •     定义Inventory(主机列表)
  •     Inventory文件格式
  •     模板样式

 

三、Asible的使用以及远程主机的连接使用等

 

  • 1、添加远端主机
  • 2、定义好inventory后可以调用ping模块来检测网络是否可达
  • 3、ping 远程主机失败的解决方
  •       方法一:首先登录认证
  •       方法二:设置免密
  • 4、 创建普通用户,执行分发任务
  • 5、在两台hosts主机上对普通用户devops下方权力
  • 6、Ansible命令的使用场景
  •        1、查看列表的命令
  •        2、相关命令的描述和使用方法

四、自定义的主机和组

  • 1、创建inventory文件
  • 2、定义组的套嵌以及变量

五、远程复制

  • 1、创建新的用户 在普通用户下进行实验

  • 2、创建指定的超级用户身份文件目录

  • 3、开启root身份认证文件

  • 4、使用copy模块远程执行命令

  • 5、将文件复制到/mnt目录下

  • 6、删除文件远程

 

 

 

 

一、Ansible详解

  1. 官方文档:https://docs.ansible.com/
  2. 中文文档:http://www.ansible.com.cn/

(一)、认识Ansible

1、Ansible 是什么?

    Ansible 是一个能实现批量部署的自动化运维工具,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。帮助运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率。
    常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续继承、零宕机平滑升级。
    常见的部署工具有Chef、Puppet、Ansible、SaltStack、Fabric
    ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

2、为什么选择ansible?Ansible详解及inventory文件配置

    Ansible完全基于Python开发,而DevOps在国内已然是一种 趋势,Python已逐步普及,运维人员自己开发工具的门槛逐步降低,得益于此,方便对Ansible二次开发。
    Ansible丰富的内置模块,甚至还有专门为商业平台开发的功能模块,完全可以满足日常功能所需。
    在Ansible去中心化概念下,一个简单的复制操作即可完成管理配置中心的迁移。
    Agentless(无客户端),客户端无需任何配置,由管理端配置好后即可使用,更新时,只需在操作机上进行一次更新即可,这点非常诱人。
    配置简单、功能强大、扩展性强,通过Playbooks来定制强大的配置、状态管理。

3、Ansible 是如何工作的?

 Ansible(1)—— Ansible详解及inventory文件配置_第1张图片

 

上图对应的模块功能如下:

  1. Ansible:Ansible核心程序。
  2. HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
  3. Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
  4. CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
  5. CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
  6. ConnectionPlugins:连接插件,Ansible和Host通信使用

 

补充:
(1)Ansible使用者来源于多种维度,分为以下几种方式:Ansible详解及inventory文件配置

    CMDB存储和管理着企业IT架构中的各项配置信息,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具集完成操作者所希望达成的目标。
    基于PUBLIC(公有云)/PRIVATE(私有云),Ansible以API调用的方式运行,Ansible提供了丰富的API语言接口:PHP、Python等。
    直接使用Ad-Hoc临时集调用Ansible工具集来完成任务执行。
    通过执行Playbooks中预先编排好的任务集按序完成任务执行。

(2)Ansible工具集(ansible命令是Ansible的核心工具,总指挥)

    INVENTORY:命令执行的目标对象配置文件
    API:供第三方程序调用的应用程序编程接口
    MODULES:丰富的内置模块
    PLUGINS:内置和自定义的插件6、Ansible命令的使用场景

(3)作用对象
Ansible的作用对象,不仅仅是Linux和非Linux操作系统的主机,同样也可以作用于各类公有云/私有云,商业和非商业设备的网络

4、Ansible通信机制

    Ansible主推的卖点是其无需任何Daemon维护进程即可实现相互间的通信,且通信方式是基于业内统一标准的安全可靠的SSH安全连接。
    无客户端,只需安装SSH、Python即可。
    基于OpenSSH通信,底层基于SSH协议(Windows基于PowerShell)。
    支持密码和SSH认证,建议使用公私钥方式认证,因为密码认证方式的密码需明文写配置文件,虽然配置文件可加密,但会增加Ansible使用的复杂度。

5、Ansible应用场景
应用部署

    Ansible内置网络、应用、系统、第三方平台扩展等完善的功能模块,协助运维快速完成应用的安装、卸载、升级、启停、配置等部署类工作,即使对跨平台或知名的商业硬件也同样支持。

配置管理

    Ansible内置File、Template,结合Jinja、Lineinfile等内置模块,同时无缝结合GitHub、GitLab、Git、SVN、Jenkin等主流版本控制和CI持续集成工具,助力配置管理自动化。

任务流编排

    有效保证Tasks任务流按即定规则和顺序完成事先制定的目标和计划,同时Roles编排方式又能在一定程度上从书写习惯和代码层编排上保证整体项目可架构性和规范性,协助控制项目维护成本不致过高。

适用于网络管理员、系统运维、应用运维、桌面运维、DevOps、基础架构运维等多领域运维行业,上手快,效率高。

6、ansible执行流程
 
Ansible(1)—— Ansible详解及inventory文件配置_第2张图片

 

7、ansible生成的主要文件

  1. /etc/ansible
  2. /etc/ansible/ansible.cfg   #配置文件
  3. /etc/ansible/hosts   #主机库(host inventory)管理被监控的主机
  4. /usr/bin/ansible   #主程序
  5. /usr/bin/ansible-doc   #文档
  6. /usr/bin/ansible-playbook   #剧本

 

 

二、Ansible安装、配置及使用

1、实验环境的创建

  • 1.1、实验环境
  • 1.2、创建虚拟机内存和cpu的要求
  • 1.3、安装bah方便补齐命令
  • 1.4、设置虚拟机的上网功能

2、 在server1上安装ansible

  • 1、配置yum源
  • 2、安装ansible

3、熟悉ansible配置文件使用

  •     ansible配置文件查找顺序
  •     定义Inventory(主机列表)
  •     Inventory文件格式

4、 参数及ansible命令的使用

  • 1、命令参数
  • 2、模板样式:

 

 

1、实验环境的创建 :

虚拟机名称 ip 版本 角色
server1 172.25.6.1 7.5 ansible
server2 172.25.6.2 7.5 远程主机hosts
server3 172.25.6.3 7.5 远程主机hosts

 

1.2、创建虚拟机内存和cpu的要求

Ansible(1)—— Ansible详解及inventory文件配置_第3张图片

 

 

1.3、安装bash方便补齐命令

[root@server1 ~]# yum install bash-* -y      ##方便补齐命令

Ansible(1)—— Ansible详解及inventory文件配置_第4张图片

 

1.4、设置虚拟机的上网功能

让虚拟机上网
在server1、server2、server3上
[root@server1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

GATEWAY=172.25.6.250
DNS1=114.114.114.114

systemctl restart network      ##重启网络

真机上:
[root@foundation6 kiosk]# iptables -t nat -I POSTROUTING -s 172.25.6.0/24 -j MASQUERADE     ##让虚拟机上网

在虚拟机上进行测试看网络是否可以ping
[root@server1 ~]# ping baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=50 time=54.7 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=50 time=55.5 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=3 ttl=50 time=55.2 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=4 ttl=50 time=56.7 ms
^C

Ansible(1)—— Ansible详解及inventory文件配置_第5张图片

 

 

2、 在server1上安装ansible

  • 1、配置yum源
  • 2、安装ansible

步骤一:配置EPEL源

1.1、配置yum源

在阿里云上查看镜像所在的位置

Ansible(1)—— Ansible详解及inventory文件配置_第6张图片

 

1.2、配主机相关的信息

配置阿里云的yum源文件

  1. [root@server1 yum.repos.d]# vim epel.repo
  • [epel]
  • name=epel
  • baseurl=https://mirrors.aliyun.com/epel/7/x86_64/        ##阿里云上ansible安装包存放的路径
  • gpgcheck=0

 

    2.[root@server1 yum.repos.d]# yum clean all                   ##清除yum源的缓存信息

    3.[root@server1 yum.repos.d]# yum repolist                                                     ##yum源列表

Ansible(1)—— Ansible详解及inventory文件配置_第7张图片

Ansible(1)—— Ansible详解及inventory文件配置_第8张图片

 


步骤二:安装ansible


1、在server1虚拟机上安装ansible

[root@server1 ~]# yum install ansible -y         ##安装ansible软件


[root@server1 ~]# rpm -qa ansible                   ##查看ansible的安装包信息
ansible-2.9.3-1.el7.noarch
[root@server1 ~]#
[root@server1 ~]# rpm -qc ansible                    ##查看ansible的配置文件信息
/etc/ansible/ansible.cfg
/etc/ansible/hosts

Ansible(1)—— Ansible详解及inventory文件配置_第9张图片

 


 


3、熟悉ansible配置文件使用

  •     ansible配置文件查找顺序
  •     定义Inventory(主机列表)
  •     Inventory文件格式
  •     模板样式:

 

  •     ansible配置文件查找顺序

    检查环境变量ANSIBLE_CONFIG指向的路径文件(export ANSIBLE_CONFIG=/etc/ansible.cfg);

    ~/.ansible.cfg,检查当前目录下的ansible.cfg配置文件;
    /etc/ansible.cfg检查etc目录的配置文件。

  •     定义Inventory(主机列表)

    ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名。默认的inventory file为/etc/ansible/hosts。
    inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成。

  •     Inventory文件格式:

    inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明。

 

2、模板样式:

[webservers]
www1.com:2222
www2.com

[dbservers]
db1.com
db2.com
db3.com

2.2、如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机,例如:

[webservers]
www[01:50].example.com

[databases]
db-[a:f].example.com

2.3、主机变量: 可以在inventory中定义主机时为其添加主机变量以便于在playbook中使用。例如:

[webservers]
www1.com http_port=80 maxRequestsPerChild=808
www2.com http_port=8080 maxRequestsPerChild=909

 

2.4、组变量

[webservers]  #组
www1.com
www2.com

[webservers:vars]  #组变量
ntp_server=ntp.com
nfs_server=nfs.com

 

 

 

三、Asible的使用以及远程主机的连接使用等

  • 1、添加远端主机
  • 2、定义好inventory后可以调用ping模块来检测网络是否可达
  • 3、ping 远程主机失败的解决方
  •       方法一:首先登录认证
  •        方法二:设置免密
  • 4、 创建普通用户,执行分发任务
  • 5、在两台hosts主机上对普通用户devops下方权力

 

 

1、添加远端主机

1.1、将server2和server3添加到Ansible管理的主机中:

[root@server1 ~]# vim /etc/ansible/hosts

写入:
server2
server3

Ansible(1)—— Ansible详解及inventory文件配置_第10张图片

 

 

1.2、测试:

1.2.1、列出远程主机的列表

[root@server1 ~]# cd /etc/ansible/
[root@server1 ansible]# ls
ansible.cfg  hosts  roles(角色为空默认会取角色)

[root@server1 ~]# ansible all --list       ##默认会放在一个组中匹配所有的主机
  hosts (2):
    server2
    server3

Ansible(1)—— Ansible详解及inventory文件配置_第11张图片

 

1.2.2、没有被定义的主机放在默认组中

[root@server1 ~]# ansible ungrouped --list-hosts      ##没有定义会放在一个默认组中
  hosts (2):
    server2
    server3
[root@server1 ~]#
[root@server1 ~]#

server2
[test]                     ##在server3上添加[test]
server3

Ansible(1)—— Ansible详解及inventory文件配置_第12张图片

[root@server1 ~]# ansible ungrouped --list-hosts
  hosts (1):
    server2                 ##因为server2没有被定义
[root@server1 ~]#

Ansible(1)—— Ansible详解及inventory文件配置_第13张图片

 


[test]
server2
[prod]
server3

[root@server1 ~]# ansible ungrouped --list-hosts       
[WARNING]: No hosts matched, nothing to do                      ##全部的已经分好组所以没有发现

  hosts (0):
[root@server1 ~]# ansible server2 --list-hosts
  hosts (1):
    server2
[root@server1 ~]# ansible server3 --list-hosts
  hosts (1):
    server3
[root@server1 ~]#

Ansible(1)—— Ansible详解及inventory文件配置_第14张图片

 

 

2、定义好inventory后可以调用ping模块来检测网络是否可达

2.1、检查网络是否通顺

[root@server1 ~]# ansible all -m ping         ##ping所有主机

发生报错:

Ansible(1)—— Ansible详解及inventory文件配置_第15张图片

ansible test -m ping -k  #-k指使用密码登陆,命令行会提示输入SSH密码

Ansible(1)—— Ansible详解及inventory文件配置_第16张图片

(连接网络失败!!!!)

 

3、ping 远程主机失败的解决方法

  • 方法一:首先登录认证
  • 方法二:设置免密

方法一:

3.1、解决的方法首先登录验证

[root@server1 ~]# ssh server2      ##登录验证

Ansible(1)—— Ansible详解及inventory文件配置_第17张图片

 

3.2、测试:

Ansible(1)—— Ansible详解及inventory文件配置_第18张图片

 

方法二:

3.3、设置免密

-m
[root@server1 ~]# ssh-keygen                      ##生成免密
[root@server1 ~]# ssh-copy-id server2             ##将密钥传给server2
[root@server1 ~]# ssh-copy-id server3

Ansible(1)—— Ansible详解及inventory文件配置_第19张图片

Ansible(1)—— Ansible详解及inventory文件配置_第20张图片

 

3.4、测试:

Ansible(1)—— Ansible详解及inventory文件配置_第21张图片

 

ansible的命令示例
以bruce用户执行ping的存活检测
# ansible all -m ping -u bruce

以 bruce sudo 至root执行ping存活检测

# ansible all -m ping -u bruce -b

以 bruce sudo 至batman用户执行ping存活检测

# ansible all -m ping -u bruce -b --become-user batman

 

 

3.5、以超户的身份进行访问

[root@server1 ~]# ansible all -m ping -u root

Ansible(1)—— Ansible详解及inventory文件配置_第22张图片

 

 

 

4、 创建普通用户,执行分发任务

 

linux机器都禁止使用root远程登陆,更安全的做法是用普通用户登陆,分发任务

4.1、在server2、server3上创建普通用户

在ansible主机上和两台hosts主机上创建普通用户devops,用于ansible任务分发与执行。
保证ansible与hosts主机上devops用户id相同


在server2、server3上创建用户

在server2上:

[root@server2 ~]# useradd ansible      ##创建用户

useradd ansible      

[root@server2 ~]# passwd ansible       ##修改用户的密码

Changing password for user ansible.

New password:

passwd: all authentication tokens updated successfully.

[root@server2 ~]#

在server3上:

[root@server3 ~]# useradd ansible

[root@server3 ~]# passwd ansible

 

4.2、以ansible的身份登录

[root@server1 ~]# ansible all -m ping -u ansible         ## 登录失败因为没有免密认证

Ansible(1)—— Ansible详解及inventory文件配置_第23张图片

 

4.3、做免密

[root@server1 ~]# ssh-copy-id ansible@server2      ##免密转给server2的ansible用户

[root@server1 ~]# ssh-copy-id ansible@server3      ##转给server3的ansible用户

Ansible(1)—— Ansible详解及inventory文件配置_第24张图片
 

 

4.4、测试

验证免密登录

[root@server1 ~]# ansible all -m ping -u ansible     
[root@server1 ~]# ansible all -a "hostname"       ##查看主机名
[root@server1 ~]# ansible all -a "df -h"            ## 查看磁盘信息

Ansible(1)—— Ansible详解及inventory文件配置_第25张图片

Ansible(1)—— Ansible详解及inventory文件配置_第26张图片
 

如果每次ping的时候都会警告 解决方法如下

消除掉警告

[root@server1 ~]# vim /etc/ansible/ansible.cfg

command_warnings=False

Ansible(1)—— Ansible详解及inventory文件配置_第27张图片

 

 

4.5、测试 :

远程用户在tmp目录下创建testfile文件


[root@server1 ~]# ansible all -a "ls -l /tmp/testfile2" -u ansible     ##远程用户在tmp目录下创建testfile文件 
server2 | CHANGED | rc=0 >>
-rw-rw-r-- 1 ansible ansible 0 mar  6 11:51 /tmp/testfile2

server3 | CHANGED | rc=0 >>
-rw-rw-r-- 1 ansible ansible 0 mar  6 11:51 /tmp/testfile2

Ansible(1)—— Ansible详解及inventory文件配置_第28张图片

 

 

5、在两台hosts主机上对普通用户devops下方权力

 

5.1、在/mnt目录下创建文件需要sudo密码

[root@server1 ~]# ansible all -a "ls -dl /mnt/testfile" -u ansible -b      ##需要sudo的密码
server3 | FAILED | rc=-1 >>
Missing sudo password

server2 | FAILED | rc=-1 >>
Missing sudo password

Ansible(1)—— Ansible详解及inventory文件配置_第29张图片

 

 

5.2、设置sudo的权限

在server2上:

[root@server2 ~]# visudo

ansible  ALL=(ALL)      ALL

server3同server2

 

Ansible(1)—— Ansible详解及inventory文件配置_第30张图片

 

 

5.3、测试:

在真机上进行测试:

[root@server1 ~]# ansible all -a "touch /mnt/testfile" -u ansible -b -K     ##K表示输入sudo的密码
BECOME password:
server2 | CHANGED | rc=0 >>


server3 | CHANGED | rc=0 >>


在server2、server3上进行免密登录
在visudo
ansible  ALL=(ALL)      NOPASSWD: ALL            

 

5.3.1、在真机上进行测试

[root@server1 ~]# ansible all -a "touch /mnt/testfile" -u ansible -b
server3 | CHANGED | rc=0 >>


server2 | CHANGED | rc=0 >>

Ansible(1)—— Ansible详解及inventory文件配置_第31张图片

 

 

6、Ansible命令的使用场景

  • 1、查看列表的命令
  • 2、相关命令的描述和使用方法

 

  • 非固化需求
  • 临时一次性操作
  • 二次开发接口调用

1、查看列表的命令

-m 要执行的模块,默认为command
-a 模块的参数
-u ssh连接的用户名,默认用root,ansible.cfg中可以配置
-k 提示输入ssh登录密码,当使用密码验证的时候用
-s sudo运行
-U sudo到哪个用户,默认为root
-b,–become 变成hosts主机中的哪个用户身份,拥有其权限
-K 提示输入sudo密码,当不是NOPASSWD模式时使用
-C 只是测试一下会改变什么内容,不会真正去执行
-c 连接类型(default=smart)
-f fork多少进程并发处理,默认为5个
-i 指定hosts文件路径,默认default=/etc/ansible/hosts
-I 指定pattern,对已匹配的主机中再过滤一次
–list-host 只打印有哪些主机会执行这个命令,不会实际执行
-M 要执行的模块路径,默认为/usr/share/ansible
-o 压缩输出,摘要输出
–private-key 私钥路径
-T ssh连接超时时间,默认是10秒
-t 日志输出到该目录,日志文件名以主机命名

-v

显示详细日志

 

2、相关命令的描述和使用方法


匹配所有主机,all或*功能相同
ansible all -m ping

ansible “*“  -m ping

ansible 172.25.6.* -m ping  


对多台主机或多个组同时分开处理即可
ansible"web1:web2" -m ping

在webserver组但不在database组的主机,用感叹号表示

absible "webserver:!database" -m ping

在webserver组和database组中同时存在的主机,用&符号表示

ansible "webserver:&database" -m ping

模糊匹配:

*.example.com
www*.com.database

 

2.1、-a 命令参数,使用command模块远程执行命令

Ansible(1)—— Ansible详解及inventory文件配置_第32张图片

 

2.2、*号的使用方法

[root@server1 ~]# ansible server* --list-hosts

Ansible(1)—— Ansible详解及inventory文件配置_第33张图片

 


2.3、-m 要执行的参数,使用copy模块远程执行命令

Ansible(1)—— Ansible详解及inventory文件配置_第34张图片

 


[root@server1 ~]# ansible test:prod --list-hosts
  hosts (2):
    server2[ansible@server1 ~]$ ansible test -a "ls -l /tmp"
    server3
[root@server1 ~]# ansible 'test:!prod' --list-hosts           ##只查看test中的数据
 hosts (1):
    server2

 



四、自定义的主机和组

  • 1、创建inventory文件
  • 2、定义组的套嵌以及变量

 

 

  1. 定义Inventory(主机列表)
  • Inventory可以直接为地址如:172.25.6.2
  • 端口号步不是默认的22端口时 可以明确表示为: server2:2222

 

    2.定义主机和组

  • 中括号表示一个组,也可以表示一个范围

       [webserver]
       www[1:10].example.com
       db-[a:f].example

 

    3.定义主机变量

  • 在palyook中使用时对应主机进行个性化的定制

        [webserver]

        web1 http_port=8080 maxRequestsPChaild=1024

 

   4.在inventory 主文件年中存在的变量并不是最佳的方式 还可以保存在独立的文件中

  •       这些独立的文件格式为YAML    
  •       当变量边多时,文件定义变量更方便的进行管理和组织


   5.变量的检索位置

  • Inventory中vars的定义的区域
  • Playbook中vars目录下的文件
  • Riles同级目录的文件
  • Rolrs同级目录下的group_vars和hosts_vars目录中的文件
  • 大家设置变量时应尽量沿用同一种方式,以便维护人员管理   


1、创建inventory文件

[root@server1 ~]# vim inventory
[pord]
server3
~        
[root@server1 ansible]# ansible all -i inventory -m ping         ##查看是否能连通

Ansible(1)—— Ansible详解及inventory文件配置_第35张图片


1.2、测试 :

Ansible(1)—— Ansible详解及inventory文件配置_第36张图片

(连接成功!!)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

2、定义组的套嵌以及变量

[root@server1 ~]# vim /etc/ansible/hosts

...

[test]
server2
[prod]
server3
[webserver:children]     ##创建一个组把test和prod加近来
test
prod

...

Ansible(1)—— Ansible详解及inventory文件配置_第37张图片


2.2、测试 :

[root@server1 ~]# ansible webserver --list-hosts
  hosts (2):
    server2
    server3

Ansible(1)—— Ansible详解及inventory文件配置_第38张图片

 

 

五、远程复制

  • 1、创建新的用户 在普通用户下进行实验

  • 2、创建指定的超级用户身份文件目录

  • 3、开启root身份认证文件

  • 4、使用copy模块远程执行命令

  • 5、将文件复制到/mnt目录下

  • 6、删除文件远程

copy模块:复制本地文件至远程主机上

    dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录。
    src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
    mode 文件或目录复制到远程主机后,所拥有的权限
    shell模块:让远程主机在shell进程下执行命令,从而支持shell的特性,如管道等

4、 创建普通用户,执行分发任务

linux机器都禁止使用root远程登陆,更安全的做法是用普通用户登陆,分发任务。

(1)在ansible主机上和两台hosts主机上创建普通用户devops,用于ansible任务分发与执行。
保证ansible与hosts主机上devops用户id相同
 

 

1、创建新的用户 在普通用户下进行实验

[root@server1 ansible]# useradd ansible
[root@server1 ansible]#
[root@server1 ansible]# su -  ansible

 

1.2、给新创建的用户生成秒密

[ansible@server1 ~]$ ssh-keygen                   ##生成免密

[ansible@server1 ~]$ ssh-copy-id server3          ##将密钥转给其他节点

[ansible@server1 ~]$ ssh-copy-id server2

Ansible(1)—— Ansible详解及inventory文件配置_第39张图片

Ansible(1)—— Ansible详解及inventory文件配置_第40张图片

 

1.3、测试:

[ansible@server1 ~]$ ansible all -m ping

 

Ansible(1)—— Ansible详解及inventory文件配置_第41张图片

 

2、创建指定的超级用户身份文件目录

[ansible@server1 ~]$ mkdir demo
[ansible@server1 ~]$
[ansible@server1 ~]$ cd demo/
[ansible@server1 demo]$
[ansible@server1 demo]$ cp /etc/an
anacrontab  ansible/    
[ansible@server1 demo]$ cp /etc/ansible/ansible.cfg .
[ansible@server1 demo]$

Ansible(1)—— Ansible详解及inventory文件配置_第42张图片
 


2.2、测试:

没有给予超级用户得很放

查看失败!!!

[ansible@server1 ~]$ ansible websever --list-hosts
[WARNING]: Could not match supplied host pattern, ignoring: websever

[WARNING]: No hosts matched, nothing to do

 

 

2.3、默认是以ansible普通用户的身份进行的

Ansible(1)—— Ansible详解及inventory文件配置_第43张图片 

Ansible(1)—— Ansible详解及inventory文件配置_第44张图片

 

3、开启root身份认证文件(以root身份运行)  普通与胡可以有权限进行远程的查看、

 

[ansible@server1 demo]$ vim ansible.cfg
[defaults]
inventory  =~/hosts
command_warnings = False
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

 

Ansible(1)—— Ansible详解及inventory文件配置_第45张图片

 

3.2、、创建Inventory自定义

[ansible@server1 demo]$ vim inventory
[ansible@server1 demo]$
[ansible@server1 demo]$ cat  inventory
[test]
server2

[prod]
server3


[ansible@server1 demo]$

 Ansible(1)—— Ansible详解及inventory文件配置_第46张图片


 

4、使用copy模块远程执行命令

 
[ansible@server1 ~]$ ansible test -m copy -a "src=hosts dest=/tmp"   ##进行远程复制 
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

Ansible(1)—— Ansible详解及inventory文件配置_第47张图片wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

4.2、测试:

查看/tmp下的文件信息

[ansible@server1 ~]$ ansible test -a "ls -l /tmp"
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


4.3、查看以test的身份查看/tmp/hosts下的配置信息

[ansible@server1 ~]$ ansible test -a "cat /tmp/hosts"
server2 | CHANGED | rc=0 >>
[test]
server2

[prod]
server3]
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 


5、将文件复制到/mnt目录下

[ansible@server1 ~]$ ansible test -m copy -a "src=hosts dest=/mnt"
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

Ansible(1)—— Ansible详解及inventory文件配置_第48张图片wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

6、删除文件远程

[ansible@server1 ~]$ ansible test -m command -a "rm -f /mnt/hosts"
server2 | CHANGED | rc=0 >>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

Ansible(1)—— Ansible详解及inventory文件配置_第49张图片wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

 

 

 

你可能感兴趣的:(Ansible(1)—— Ansible详解及inventory文件配置)