自动化运维:Ansible基础与命令行模块操作

这篇具有很好参考价值的文章主要介绍了自动化运维:Ansible基础与命令行模块操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、理论

1. Ansible

2.部署Ansible自动化运维工具

3.Ansible常用模块

4.hostsinverntory主机清单

二、实验

1.部署Ansible自动化运维工具

2.ansible 命令行模块

 3.hostsinverntory主机清单

三、问题

1. ansible远程shell失败

 2.组变量查看webservers内主机ip报错

​编辑

 3.组嵌套查看webs内主机ip报错

四、总结


一、理论

1. Ansible

(1)概念

Ansible是基于模块工作的,只是提供了一种运行框架,本身没有完成任务的能力,真正操作的是Anisble的模块。每个模块都是独立的、实现了批量系统配置、批量程序部署、批量运行命令等功能。

Ansible是一款简洁、高效的运维自动化工具。只需要将ansible安装在主控机器上,就可以通过SSH协议实现针对大量受管服务器的批量化、剧本化的管理。通过过Ansible实现远程控制,主控机=被控机,通过SSH实现。基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
 

(2)架构

        Ansible架构中有两种计算机类型,即控制节点和受管主机。 Ansible在控制节点上安装和运行,计算机上也含有Ansible项目文件的副本。控制节点可以是管理员的笔记本电脑、多个管理员共享的系统,或者运行红帽Ansible Tower的服务器。
        受管主机列在清单中,清单还可以将这些系统组织到组中,以便于集中管理。清单可以在静态文本文件中定义,或者通过从外部来源获取信息的脚本来动态确定。
Ansible用户无需编写复杂的脚本,而只要创建高级别play即可确保主机或主机组处于特定状态。 Play按该play指定的顺序对主机执行一系列任务。这些play通过采用YAML格式的文本文件来表达。包含一个或多个play的文件称为playbook。
       每个任务运行一个模块,即(使用Python, Powershell或某种其他语言编写的)一小段代码。各个模块基本上是您的工具包中的一个工具。Ansible随附了数百个实用模块,它们能够执行许多不同的自动化任务。它们可以作用于系统文件,安装软件或者进行AP调用。

       在任务中使用时,模块通常确保计算机的某一特定方面处于特定的状态。例如,使用某一模块的任务可以确保某一文件存在且具有特定的权限和内容,而使用另一不同模块的任务可确保已挂载特定的文件系统。如果系统不处于指定的状态,任务应将它置于该状态。如果系统已处于该状态,则不执行任何操作。如果任务失败, Ansible的默认行为是对发生了错误的主机中止playbook的其余部分。

      QA任务、play和playbook设计为具有幂等性。这意味着,您可以在相同主机上多次安全地运行一个playbooko当您的系统处于正确状态时, playbook在运行时不会进行任何更改。这意味着,您应该能够在相同主机上多次安全地运行一个playbook。当您的系统处于正确状态时, playbook在运行时不应进行任何更改。您可以使用多个模块来运行任意命令。但是,您必须小心使用这些模块,以确保它们以幂等方式运行。

        Ansible也使用插件。插件是您可以添加到Ansible中的代码,以对它进行扩展并使它适合新的用途和平台。

        Ansible架构是无代理的。通常,当管理员运行Ansible Playbook或临时命令时,控制节点使用SSH (默认)或WinRM连接受管主机。这意味着客户端无需在受管主机上安装特定于Ansible的代理,也不需要允许将特殊的网络流量传输到某一非标准端口。

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 

(3)特点

①部署简单,只需要主控端部署Ansible环境,被控端无需做任何操作;

②默认使用SSH协议设备进行管理;

③主从集中化管理;

④配置简单、功能强大、扩展性强;

⑤支持API及自定义模块,可以通过Python轻松扩展

⑥通过playbooks来定制强大的配置、状态管理

⑦对云平台和大数据都有很好的支持
 

(4)优势

①轻便性:无需在被控制服务器上安装客户端,Ansible基于ssh协议

②幂等性:大部分模块有幂等性,即如果输入systemctl stop firewalld当发现要停止的服务已经停止就不会做任何操作了,多次停止不会改变结果。systemtl restart是非幂等的。

③判断性:大部分模块在执行时都会判断目标节点是否要执行任务,所有重复执行某个任务大部分时间不会产生副作用

④简介性:一个窗口即可管理所有需要控制的机器,无需开启多个窗口
 

(5)核心程序

①HostInventory:记录由Ansible管理的主机信息,端口,ip,密码等

②playbooks:'剧本'YAML格式文件,多任务定义在一个文件中,定义主机需要调用那些模块完成功能

③core modeules:核心模块主要操作通过调用核心模块来完成管理任务

④customodules:自定义模块,完成核心模块无法完成的模块,支持多种语言编写

⑤connectiontugins:连接插件,ansible和主机通信使用(ssh协议)
自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (6)工作原理及流程

①加载自己的配置文件,默认/etc/ansible/ansible.cfg

②查找对应的主机的配置文件,找到要执行的主机或组/etc/ansible/hosts文件

③加载自己对应的模块文件,如command、yum、ping、

④通过ansible将模块命令生成对应的临时py文件(类似python脚本),并将该文件传输至被管理端

⑤传输到在被控制端的对应用户的家目录下.ansible/tmp/xxx/xxx.py

⑥被控制端给传输过来的py文件加执行权限

⑦执行并返回结果,执行完成后删除py文件并sleep 0退出
自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

2.部署Ansible自动化运维工具

环境

表1 主机

管理端 192.168.111.199 ansible
被管理端 192.168.111.69
被管理端 192.168.111.186
被管理端 192.168.111.100

(1)部署

yum install  -y epel-release 
#安装epel-release
yum install -y  ansible
#安装ansible
#配置文件位置:/etc/ansible/ansible
#hosts文件位置:/etc/ansible/hosts
vim /etc/ansible/hosts
#编辑hosts文件添加被管理的机器,内容如下

[webservers]		#配置组名
192.168.204.69	#组里包含的被管理的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)
 
[dbservers]
192.168.204.186
#[webservers]、[dbservers]各为一个组,组内1个服务器,添加完毕保存退出
配置密钥对验证

#使用ssh免交互,需要下载sshpass工具,参考sshpass免密登录
ssh-keygen -t rsa		#一路回车,使用免密登录(配置密钥对验证)
sshpass -p '123123' ssh-copy-id root@192.168.204.69
sshpass -p '123123' ssh-copy-id root@192.168.204.186
或者直接输入

ssh-copy-id root@192.168.204.69          #上传公钥到被控制端
ssh-copy-id root@192.168.204.185

#进入生成的公钥路径将公钥传输给备管理的服务器,传输需要输入每台备管理服务的root密码

ansible ansible-doc  -l 
#安装完毕,此命令可以查看有哪些ansible模块,按q退出

ansible  webservers  -m command  -a 'pwd'
#安装完成尝试管理webservers组输入pwd命令
ansible  all   -a 'ls'
#安装完成尝试管理所有hosts中主机输入ls命令,不指定模块默认为command模块
ansible  192.168.204.69  -m -a 'ls'
#安装完成尝试管理192.168.204.69服务器输入pwd命令

3.Ansible常用模块

(1) ansible命令行模块
命令格式:ansible <组名>/ip -m <模块> -a<参数列表>

ansible-doc -s 模块

#-s 列出指定模块的描述信息和操作动作
ansible-doc -s command		
[root@ansible ansible]# ansible-doc -s command
- name: Execute commands on targets
  command:
      argv:                  # Passes the command as a list rather than a string. Use `argv' to avoid quoting values that would otherwise be interpreted
                               incorrectly (for example "user name"). Only the string or the list form can be provided, not both.
                               One or the other must be provided.
      chdir:                 # Change into this directory before running the command.
      cmd:                   # The command to run.
      creates:               # A filename or (since 2.0) glob pattern. If it already exists, this step *won't* be run.
      free_form:             # The command module takes a free form command to run. There is no actual parameter named 'free form'.
      removes:               # A filename or (since 2.0) glob pattern. If it already exists, this step *will* be run.
      stdin:                 # Set the stdin of the command directly to the specified value.
      stdin_add_newline:     # If set to `yes', append a newline to stdin data.
      strip_empty_ends:      # Strip empty lines from the end of stdout/stderr in result.
      warn:                  # Enable or disable task warnings.

(2) command模块
此模块不能使用管道符和重定向,指定模块默认为commend模块

举例:ansible  webservers   -m   command   -a  'date'

调用command模块在192.168.204.69服务器上执行ls命令,若不指定则默认为command模块

#指定 ip 执行 date
ansible 192.168.204.69 -m command -a 'date'

#指定组执行 date
ansible webservers -m command -a 'date'			
ansible dbservers -m command -a 'date'       

#all 代表所有 hosts 主机
ansible all -m command -a 'date'			

#如省略 -m 模块,则默认运行 command 模块
ansible all -a 'ls /'		

常用的参数:

表2  command常用参数

chdir 在远程主机上运行命令前提前进入目录
creates 判断指定文件是否存在,如果存在,不执行后面的操作
removes 判断指定文件是否存在,如果存在,执行后面的操作
ansible all -m command -a "chdir=/home  ls ./"

(3) shell模块
用远程主机的shell进程,打开一个子shell进行命令操作,支持管道符和重定向。

在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)。

举例:ansible webservers -m shell -a 'ifconfig ens33 |awk "NR==2{print \$2}"'
提取webservers组中的所有ip地址,注意双引号不识别变量所以要加转义符\

列出指定模块的描述信息和操作动作

ansible-doc -s shell

首先在192.168.204.186服务器上创建一个用户

[root@localhost ~]# useradd test

使用shell给dbservers组中的服务器中的用户设置密码

ansible dbservers -m shell -a 'echo 666666 | passwd --stdin test'

截取dbservers组中主机的ip

ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") | cut -d " " -f2'
 
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print \$2}")'

(4)cron模块
远程主机定义计划任务,2种状态present(添加)和absent(移除),默认为present。

举例:ansible  webservers -m cron  -a 'name=crontest hour="*/12"  day="*/1" job="/usr/bin/echo   cron test "   ' 

        ansible webservers -m cron -a "name=crontest  state=absent"

列出指定模块的描述信息和操作动作

#按 q 退出
ansible-doc -s cron				

常用的参数:

表3 cron常用参数

minute/hour/day/month/weekday 分/时/日/月/周
job 任务计划要执行的命令
name 任务计划的名称
#每年 10 月 21 日  每2个小时的10 30 50分,执行一次输出helloworld的操作,名字就叫做test cron
ansible webservers -m cron -a 'minute="*10,30,50" hour="*/2" day="21" month="10" job="/bin/echo helloworld" name="test cron"'
 
#查看计划任务
ansible webservers -a 'crontab -l'            
 
#移除计划任务,假如该计划任务没有取名字,name=None即可
ansible webservers -m cron -a 'name="test cron" state=absent'        

(5) user模块
用户管理模块

举例:ansible webservers -m user -a 'name="crontest"  uid="10086"  group="root"'

           ansible webservers -m user -a 'name=crontest    state=absent  remove=yes'

列出指定模块的描述信息和操作动作

#按 q 退出
ansible-doc -s user		

常用的参数:

表4 user常用参数

name 用户名,必选参数
state=present|absent 创建账号或者删除账号,present表示创建,absent表示删除
system=yes|no 是否为系统账号
uid 用户uid
group 用户基本组
shell 默认使用的shell
move_home=yse|no 如果设置的家目录已经存在,是否将已经存在的家目录进行移动
password 用户的密码,建议使用加密后的字符串
comment 用户的注释信息
remove=yes|no 当state=absent时,是否删除用户的家目录
#创建用户test0
ansible dbservers -m user -a 'name="test0"'				
ansible dbservers -m command -a 'tail /etc/passwd'

#删除用户test0
ansible dbservers -m user -a 'name="test0" state=absent'	

(6) group模块 
 用户组模块

常用参数: name:组名称 gid:组id system:是否为系统组

列举指定模块的描述信息和操作动作

ansible-doc -s group
#创建mysql组
ansible dbservers -m group -a 'name=mysql gid=306 system=yes'	
ansible dbservers -a 'tail /etc/group'

#创建用户test01
ansible dbservers -m user -a 'name="test01"'				

#将test01用户添加到mysql组中
ansible dbservers -m user -a 'name=test01 uid=306 system=yes group=mysql'	
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id test01' 

(7) copy模块
 复制文件或输出内容到被控制服务器上

举例:       ansible webservers -m copy   -a "src=/a.txt  dest=/opt/"

                  ansible webservers -m copy   -a 'content="123456"  dest=/opt/a.txt'

列举指定模块的描述信息和操作动作

ansible-doc -s copy

常用的参数:

表5 copy常用参数

dest 指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
src 指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
mode 指出复制时,目标文件的权限
owner 指出复制时,目标文件的属主
group 指出复制时,目标文件的属组
content 指出复制到目标主机上的内容,不能与src一起使用
ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -a 'ls -l /opt'
ansible dbservers -a 'cat /opt/fstab.bak'
 
#将helloworld写入/opt/hello.txt文件中
ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt'  
ansible dbservers -a 'cat /opt/hello.txt'

(8) file模块
文件属性管理模块

常用参数:owner:文件的属主;group:文件属组;mode:文件权限;path:文件路径

                       指定的属主和属组不存在会报错

举例:ansible  webservers  -m  file  -a  'ower=lhj group=lhj mode=777 path=/opt/a.txt'    

列举指定模块的描述信息和操作动作

ansible-doc -s file
#修改文件的属主属组权限等
ansible dbservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak'	

#设置/opt/fstab.link为/opt/fstab.bak的链接文件
ansible dbservers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'    


#创建一个文件
ansible dbservers -m file -a "path=/opt/abc.txt state=touch"

#删除一个文件			
ansible dbservers -m file -a "path=/opt/abc.txt state=absent"			

(9)hostname模块

修改被控制端的主机名

参数:name:指定被控端的主机名 

举例:ansible  webservers -m hostname -a "name=ansible"

列举指定模块的描述信息和操作动作

ansible-doc -s hostname

修改主机名

#将dbservers中服务器得主机名修改为mysql01
ansible dbservers -m hostname -a "name=mysql01"

#回到dbservers服务器中查看
su

(10) ping模块

检测ansible与被控端的网络连通性

举例:ansible  webservers  -m ping 

列举指定模块的描述信息和操作动作

ansible-doc -s ping
#检测远程主机得连通性
ansible all -m ping
 
#指定ip检测
ansible 192.168.204.186 -m ping

(11)yum模块
在远程主机上yum安装与卸载软件包

常用参数:name:指定要安装卸载的软件;state=present/absent,默认persent添加,absent卸载

举例:ansible   webservers  -m  yum  -a  "name=httpd"
 

列举指定模块的描述信息和操作动作

ansible-doc -s yum
#dsbsrvers检测是否安装httpd
systemctl status httpd

Unit httpd.service could not be found.


#ansible给dsbsrvers安装服务
ansible dbservers -m yum -a 'name=httpd'

#dsbsrvers检测httpd状态
systemctl status httpd

● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)


#ansible给dsbsrvers卸载服务				
ansible dbservers -m yum -a 'name=httpd state=absent'	

#dsbsrvers检测httpd状态
systemctl status httpd

Unit httpd.service could not be found.

(12)service/system模块
管理远程被控制主机上的管理服务的运行状态

举例:ansible webservers -m service -a 'enabled=yes  name=httpd state=started'

列举指定模块的描述信息和操作动作

ansible-doc -s service

常用的参数:

表6 service/system常用参数

name 被管理的服务名称
state=started|stopped|restarted 动作包含启动关闭或者重启
enabled=yes|no 表示是否设置该服务开机自启
runlevel 如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动
# 给webservers安装httpd服务
ansible webservers -m yum -a 'name=httpd'


#查看web服务器httpd运行状态
ansible webservers -a 'systemctl status httpd'	

192.168.204.69 | FAILED | rc=3 >>
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)non-zero return code


#启动httpd服务		
ansible webservers -m service -a 'enabled=true name=httpd state=started'	


#查看web服务器httpd运行状态
ansible webservers -a 'systemctl status httpd'		

192.168.204.69 | CHANGED | rc=0 >>
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 一 2023-08-28 14:55:51 CST; 5s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 5304 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           ├─5304 /usr/sbin/httpd -DFOREGROUND
           ├─5307 /usr/sbin/httpd -DFOREGROUND
           ├─5308 /usr/sbin/httpd -DFOREGROUND
           ├─5309 /usr/sbin/httpd -DFOREGROUND
           ├─5310 /usr/sbin/httpd -DFOREGROUND
           └─5311 /usr/sbin/httpd -DFOREGROUND

(13)script模块 

实现远程批量运行本地的shell脚本

列举指定模块的描述信息和操作动作

ansible-doc -s script

在本地编写一个脚本

ansible服务器:
vim  /test.sh
#编写/下的test.sh脚本内容如下
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt

chmod +x test.sh
ansible webservers -m script -a 'test.sh'
ansible webservers -a 'cat /opt/script.txt'

(14)setup模块

setup 模块可以获取这些信息 facts 组件收集d 被管理节点信息

参数:filter 过滤可配合正则表达式。

ansible webservers -m setup -a 'filter=*ipv4'

列举指定模块的描述信息和操作动作

ansible-doc -s setup
#获取mysql组主机的facts信息
ansible webservers -m setup	

#使用filter可以筛选指定的facts信息			
ansible dbservers -m setup -a 'filter=*ipv4'    

4.hostsinverntory主机清单


 hosts配置文件位置:/etc/ansible/hosts;

Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内

如果是名称类似的主机,可以使用列表的方式标识各个主机。

vim /etc/ansible/hosts
[webservers]
192.168.204.186:2222		#冒号后定义远程连接端口,默认是 ssh 的 22 端口
192.168.204.18[5:7]
 
[dbservers]
db-[a:f].example.org	    #支持匹配 a~f

(1)inventory 中的变量含义

Inventory变量名 含义
ansible_host ansible连接节点时的IP地址
ansible_port 连接对方的端口号,ssh连接时默认为22
ansible_user 连接对方主机时使用的主机名。不指定时,将使用执行ansible或ansible-playbook命令的用户
ansible_password 连接时的用户的ssh密码,仅在未使用密钥对验证的情况下有效
ansible_ssh_private_key_file 指定密钥认证ssh连接时的私钥文件
ansible_ssh_common_args 提供给ssh、sftp、scp命令的额外参数
ansible_become 允许进行权限提升
ansible_become_method 指定提升权限的方式,例如可使用sudo/su/runas等方式
ansible_become_user 提升为哪个用户的权限,默认提升为root
ansible_become_password 提升为指定用户权限时的密码

(2)主机变量使用

写法1:
#webservers组中被控制端192.168.204.69的端口号为22登录时用户是root密码为123123

[webservers]
192.168.204.69 ansible_port=22 ansible_user=root ansible_password=123123
192.168.204.186 ansible_port=22 ansible_user=root ansible_password=123123

写法2:
#如果是名称类似的主机,可以使用列表的方式标识各个主机

[webservers]
192.168.204.6[8:9] ansible_port=22 ansible_user=root ansible_password=abc123

写法3:
#默认ssh管理时的端口为22,若不是22则直接在被管理ip后加冒号和对应端口号

[webservers]
192.168.204.69:22
192.168.204.186:22

添加一台主机

[webservers]
192.168.204.69
192.168.204.100  ansible_port=22 ansible_user=root ansible_password=123123

[dbservers]
192.168.204.186


查看webservers内得主机ip

ansible webservers -m command -a 'ifconfig'

(3)组变量使用

#表示为 webservers 组内所有主机定义变量
[webservers:vars]			
ansible_user=root
ansible_password=123123
 
#表示为所有组内的所有主机定义变量
[all:vars]					
ansible_port=22

webservers 组内所有主机定义变量

[webservers]
192.168.204.69
192.168.204.100 
192.168.204.186


#表示webservers 组内所有主机定义变量控制时使用root账户密码为123123
[webservers:vars]   
ansible_port=22  
ansible_user=root
ansible_password=123123


(4)组嵌套使用 

##php组
[php]
192.168.204.100


#nginx组
[nginx]
192.168.204.69

#httpd组
[httpd]
192.168.204.186


#组内嵌为web
#表示web组的成员即children的直译‘孩子’包括php、nginx和httpd组
[web:children]
php
nginx
httpd

二、实验

1.部署Ansible自动化运维工具

(1)管理端安装 ansible

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

完成自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 如果要查看ansible的目录结构,可以安装树形查询工具

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

添加被管理主机的ip到管理端的配置组名中

 自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 配置密钥对验证

使用ssh免交互,需要下载sshpass工具

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

2.ansible 命令行模块

(1)查看ansible的命令模块

列出所有已安装的模块,按q退出

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (2)command 模块

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

指定 ip 执行 date

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 指定组执行 date

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

  查看所有 hosts 主机自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 如省略 -m 模块,则默认运行 command 模块

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 查看右几个用户的家目录自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (3)shell 模块

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

首先在192.168.204.186服务器上创建一个用户

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 使用shell给dbservers组中的服务器中的用户设置密码

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 截取dbservers组中主机的ip

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (4)cron 模块

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 每年 10 月 21 日 每2个小时的10 30 50分,执行一次输出helloworld的操作,名字就叫做test cron

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 查看计划任务

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 移除计划任务

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (5) user 模块

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 创建用户test0

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 查看用户

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible删除用户test0

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (6)group 模块

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 创建mysql组

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 查看组

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 创建用户test01

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 将test01用户添加到mysql组中

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 查看用户

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 查看用户id和组id

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (7)copy 模块

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 将dbservers组中得/etc/fstab文件复制到 /opt目录中,并改名为fstab.bak,属主为root,权限为640

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 查看/opt目录中得文件属性

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 查看是否复制

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 将helloworld写入/opt/hello.txt文件中

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 查看文档内容

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (8)file模块

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 修改文件的属主属组权限等

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 设置/opt/fstab.link为/opt/fstab.bak的链接文件

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 创建一个文件

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 删除一个文件

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

(9)hostname 模块

 列举指定模块的描述信息和操作动作自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 回到dbservers得服务器查看,可以切换名称

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (10) ping 模块

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 检测远程主机得连通性自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 指定ip检测自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (11)yum 模块

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

查看dbservers是否安装httpd服务

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 ansible给dbservers安装httpd服务

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

dbservers检测httpd服务自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

ansible给dbservers卸载服务

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 dbservers又找不到服务了

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (12)service/systemd 模块

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 给webservers安装httpd服务

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 查看webservers得httpd状态

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 启动httpd服务

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

再次 查看webservers得httpd状态

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (13)script模块 

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 在本地编写一个脚本自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 给程序一个可执行得权限,执行程序,查看自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (14)setup 模块

列举指定模块的描述信息和操作动作

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 获取mysql组主机的facts信息

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 使用filter可以筛选指定的facts信息

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 3.hostsinverntory主机清单

(1)主机变量

在ansible配置文件中添加一台新的主机

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 成功查看ip

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

(2) 组变量

编辑配置文件

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

为 webservers 组内所有主机定义变量

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

成功查看

 自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (3)组嵌套

编辑配置文件

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 webs主机组包含php、nginx和httpd组

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 成功查看

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

三、问题

1. ansible远程shell失败

(1)报错

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (2)原因分析

replace过滤器中的一个逃逸问题。您需要替换双引号,该双引号将字符串转换为\"。由于该字符串本身位于双引号字符串内,因此必须转义=> \\\n

(3)解决方法

去掉多余的双引号

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 2.组变量查看webservers内主机ip报错

(1)报错

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (2)原因分析

从输出提示上基本可以了解到由于在本机的~/.ssh/known_hosts文件中并有fingerprint key串,ssh第一次连接的时候一般会提示输入yes 进行确认为将key字符串加入到 ~/.ssh/known_hosts 文件中

(3)解决方法

第一种:在本地先SSH登录一下对方设备,下次ansible 就可以正常操作了,但是比较麻烦

第二种:设置参数为不检查key

vim /etc/ansible/ansible.cfg
 
host_key_checking = False           #71行取消注释

 自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

如继续操作出现如下报错,需要修改被管理端/etc/hosts

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 注释被管理端域名自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

如继续操作出现如下报错,修改 /etc/ansible/hosts

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 返现密码输入错误

修改前

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 修改后

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

成功查看ip

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 3.组嵌套查看webs内主机ip报错

(1)报错

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

 (2)原因分析

组嵌套名称错误

nginx与httpd主机已配置密钥对验证,需要对php做密钥对验


#一路回车,使用免密登录(配置密钥对验证)
ssh-keygen -t rsa		

[root@ansible ansible]# sshpass -p '123123' ssh-copy-id root@192.168.204.100
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.204.100'"
and check to make sure that only the key(s) you wanted were added.

(3)解决方法

组嵌套名称web修改为webs

修改配置文件

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

修改前

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

修改后

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

ansible服务器对php做密钥对验

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

成功查询

自动化运维:Ansible基础与命令行模块操作,运维,自动化,ansible

四、总结

沟通是DevOps的关键。Ansible是第一款可以在整个IT范围读取和编写的自动化语言。它也是唯能够从头至尾自动化应用生命周期和持续交付管道的自动化引擎。

Ansible用户无需编写复杂的脚本,而只要创建高级别play即可确保主机或主机组处于特定状态。 Play按该play指定的顺序对主机执行一系列任务。这些play通过采用YAML格式的文本文件来表达。包含一个或多个play的文件称为playbook。
 文章来源地址https://www.toymoban.com/news/detail-679491.html

到了这里,关于自动化运维:Ansible基础与命令行模块操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux高级篇基础理论十二( 自动化运维工具Ansible )

    ♥️ 作者:小刘在C站 ♥️ 个人主页:  小刘主页  ♥️ 不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️ 学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏: 云计算技术 ♥️ 感谢CSDN让你我相遇

    2024年01月20日
    浏览(42)
  • Ansible自动化运维

    目录 前言 一、概述 常见的开源自动化运维工具比较 二、ansible环境搭建 三、ansible模块 (一)、hostname模块 (二)、file模块 (三)、copy模块 (四)、fetch模块 (五)、user模块 (六)、group模块 (七)、cron模块 (八)、yum_repository模块 (九)、yum模块 (十)、service模块

    2024年02月09日
    浏览(46)
  • 自动化运维工具——Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个

    2024年02月14日
    浏览(47)
  • 自动化运维工具—Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 市面上其他自动化工具:pupet(ruby语言) saltstack(python) chef(C/S模式)等 Ansible能批量配

    2024年02月10日
    浏览(43)
  • Ansible 自动化运维工具

    目录 一: Ansible 简介   Ansible与其他自动化运维工具对比  二: ansible 环境安装部署   三:ansible 命令行模块 1、command 模块 2、 shell 模块 3、 cron 模块 4、 user 模块 5、 group 模块  6、copy 模块 7、 file 模块  8、hostname 模块 9、ping 模块 10、 yum 模块 11、 service/systemd 模块

    2024年02月15日
    浏览(42)
  • 自动化运维ansible(role)

    一、role的介绍 1、Roles称为角色,本质上是为简化playbook配置文件而产生的一种特殊的方法。 2、简单来说,roles就是将原本在一个yaml中的文件进行规则化分散,封装到不同的目录下,从而简化playbook的yaml配置文件大小。从其实现方法上来看,类似于软件开发上的代码封装。

    2024年02月07日
    浏览(33)
  • Ansible自动化运维工具

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 ansible 自动化运维工具(机器管理工具) 可以实现批量管理多台(成百上千)主机,应用级

    2024年02月14日
    浏览(44)
  • 自动化运维工具之Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个

    2024年02月08日
    浏览(65)
  • 自动化运维——ansible (五十二) (01)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、概述 1.1 为什么要用自动化运维软件 1.2 自动化运维 1.3 自动化运维要注意的方面 1.4 自动化运维主要关注的方面  1.5 常见的开源自动化运维软件 1.6 自动化运维软件一般安装在哪 二、ansibl

    2024年02月09日
    浏览(42)
  • 【Ansible】Ansible自动化运维工具之playbook剧本

      简单来说,playbooks是一种简单的配置管理系统与多机器部署系统的基础。与现有的其他系统有不同之处,且非常适合复杂应用的部署。   Playbooks 可用于声明配置,更强大的地方在于,playbooks可以编排有序的去执行过程,甚至做到多组机器间来回有序的执行特别指定的

    2024年02月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包