ansible自动化运维

一、ansible

ansible简介

1.ansible可以同时管理Redbat系的Linux,Debian系的Linux,以及Window主机。管理节点只在执行脚本是与远程主机连接,没有特别的同步机制,所以断电等异常一般不会影响ansible。

2.ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

  • 1.连接插件connection plugins:负责和被监控端实现通信;
  • 2.host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
  • 3.各种模块核心模块、command模块、自定义模块;
  • 4.借助于插件完成记录日志邮件等功能;
  • 5.playbook:剧本执行多个任务时,非必须可以让节点一次性运行多个任务
    3.ansible的框架:老连接其它主机默认使用ssh协议,默认端口号22

二、ansible环境安装部署

部署环境

管理端(master):192.168.91.10
被管理端(webserver):192.168.91.20
被管理端(mysql):192.168.91.30

部署步骤

1.配置yum源

[root@ansible ~]# vi /etc/yum.repos.d/local.repo
[local]
name=local
#baseurl=file:///mnt
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=0
enabled=1

2.安装eqel源

[root@ansible ~]# yum -y install epel-release
[root@ansible ~]# yum -y install ansible

3.查看ansible版本

[root@ansible ~]# ansible --version

4.安装tree,并以树状结构展示文件

[root@ansible ~]# yum -y install tree
[root@ansible ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg   ##ansible的配置文件
├── hosts     ##ansible的主仓库,用于存储需要管理的远程主机的相关信息
└── roles     ##角色

5.配置主机清单

[root@ansible ~]# cd /etc/ansible
[root@ansible ~]# vi hosts
[webserver]
192.168.91.20
[mysql]
192.168.91.30

6.配置密钥对验证

[root@ansible ~]# ssh-keygen -t rsa
[root@ansible ~]# ssh-copy-id root@192.168.91.20
[root@ansible ~]# ssh-copy-id root@192.168.91.30

7.免交互代理

[root@ansible ~]# ssh-agent bash
[root@ansible ~]# ssh-add

三、ansible命令行模块

  • 命令格式
ansible [主机] [-m 模块] [-a args]

ansible-doc -l ##列出所有已安装的模块,注:按q退出
ansible-doc -s yum ##-s列出yum模块描述信息和操作动作

command模块

command模块可以帮助我们在远程主机上执行命令

##指定ip执行date
[root@ansible ~]# ansible 192.168.91.20 -m command -a 'date'    
##指定分类执行date
[root@ansible ~]# ansible webserver -m command -a 'date'   
[root@ansible ~]# ansible mysql -m command -a 'date'
##所有hosts主机执行date命令
[root@ansible ~]# ansible all -m conmmand -a 'date'
##如果不加-m模块,则默认运行command模块
[root@ansible ~]# ansible all -a 'ls/'

cron模块

两种状态(state):present表示添加(可以省略),absent表示移除。

##查看cron模块信息
[root@ansible ~]# ansible-doc -s cron
##创建定时计划任务
[root@ansible ~]# ansible webserver -m cron -a 'minute'="*/1" job="/usr/bin/echo heihei >> /opt/test.txt" name="text cron job"
##查看定时计划任务
[root@ansible ~]# ansible webserver -a 'crontab -l'
192.168.10.20 | CHANGED | rc=0 >>
#Ansible: test cron
*/1 * * * * /usr/bin/echo heihei cron >> /opt/test.txt
##移除计划任务,假如该任务计划没有取名字,name=None即可
[root@ansible ~]# ansible apache -m cron -a 'name="test cron" state=absent'

user模块

user 模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。
user模块是请求的是useradd,userdel,usermod三个指令

##查看user模块信息
[root@ansible ~]# ansible-doc -s user
##创建用户test01
[root@ansible ~]# ansible mysql -m user -a 'name="test01"'
##查看mysql上是否创建了test01用户
[root@ansible ~]# ansible mysql -m command -a 'tail /etc/passwd'
##删除用户test01
[root@ansible ~]# ansible mysql -m user -a 'name="test01" state=absent'

group模块

group 模块可以帮助我们管理远程主机上的组
group模块请求的是useradd,userdel,usermod三个指令

##查看group模块信息
[root@ansible ~]# ansible-doc -s group
##创建用户组
[root@ansible ~]# ansible mysql -m group -a 'name=mysql gid=306 system=yes'
##查看apache节点上是否生成apache这个组
[root@ansible ~]# ansible mysql -a 'tail /etc/group'
[root@ansible ~]# ansible mysql -m user -a 'name=test01 uid=306 system=yes group=mysql'
[root@ansible ~]# ansible mysql -a 'tail /etc/passwd'
##查看mysql上是否创建了test01用户
[root@ansible ~]# ansible mysql -a 'id test01'
192.168.10.20 | CHANGED | rc=0 >>
uid=306(test01) gid=306(mysql)=306(mysql)

copy模块

copy 模块的作用就是拷贝文件
常用参数:

参数作用
srcansible端源文件或目录,空文件夹不复制
content用来替代src 用于将指定的文件内容复制到远程文件
dest客户端目标目录或文件,需要绝对路径
back_up复制之前备份远程节点上的原始文件
directory_code用于复制文件夹,新建文件会被复制,旧文件不会被复制
follow支持link文件复制
force覆盖远程主机不一致的内容
group设定远程主机文件夹的组名
mode文件夹权限
owner设定远程主机文件夹的用户名
##查看copy模块信息
[root@ansible ~]# ansible-doc -s copy
[root@ansible ~]# ansible mysql -m copy -a 'src=/stc/fstab dest=/opt/fstab.back owner=root mode=640'
[root@ansible ~]# ansible mysql -a 'ls -l /opt'
ansible mysql -a 'cat /opt/fstab.back'
##将hello heihei!写入/opt/fstab.back
[root@ansible ~]# ansible mysql -m copy -a 'content="hello heihei!" dest=/opt/fstab.back'
[root@ansible ~]# ansible mysql -a 'cat /opt/fstab.back'
192.168.10.20 | CHANGED | rc=0 >>
hello heihei!

file模块

file 模块可以帮助我们完成一些对文件的基本操作。比如,创建文件或目录、删除文件或目录、修改文件权限等。

##查看file模块信息
[root@ansible ~]# ansible-doc -s file
##创建一个mysql用户
[root@ansible ~]# ansible mysql -m user -a 'name=mysql system=yes' 
##创建一个apache的组
##设置文件的属主属组权限等
[root@ansible ~]# ansible mysql -m group -a 'name=mysql system=yes'
[root@ansible ~]# ansible mysql -m file -a 'owner=mysql group=mysql mode=644 path=/opt/fstab.bak'
##设置/opt/1.txt为/opt/2.txt的链接文件
[root@ansible ~]# ansible mysql -m file -a 'path=/fstab.link src=/opt/fstal.back state=link'
##删除mysql节点上的一个文件
[root@ansible ~]# ansible mysql -m file -a 'path=/opt/fstal.back state=absent'
##在mysql节点上创建一个文件
[root@ansible ~]# ansible mysql -m file -a 'path=/opt/1.txt state=touch'
##在mysql节点上创建一个目录
[root@ansible ~]# ansible mysql -m file -a 'path=/opt/temp state=directory mode=755'

##ping模块
测试主机之间的连通性

[root@ansible ~]# ansible all -m ping 
192.168.10.20 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.10.30 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

yum模块

yum 模块可以帮助我们在远程主机上通过 yum 源管理软件包。
常用参数

参数作用
name参数必须参数,用于指定需要管理的软件包,比如 nginx。
state参数用于指定软件包的状态 ,默认值为。present,表示确保软件包已经安装,除了。present,其他可用值有 installed、latest、absent、removed,其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包。
disable_gpg_check参数用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。在对应的 yum 源没有开启 gpg 验证的情况下,需要将此参数的值设置为 yes,否则会报错而无法进行安装。
enablerepo参数用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件,但是你不确定A源是否启用了,你可以在安装软件包时将此参数的值设置为 yes,即使A源的设置是未启用,也可以在安装软件包时临时启用A源。
disablerepo参数用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数,比如,当多个 yum 源中同时存在要安装的软件包时,你可以使用此参数临时禁用某个源,这样设置后,在安装软件包时则不会从对应的源中选择安装包。

注:enablerepo 参数和 disablerepo 参数可以同时使用。

##查看yum模块信息
[root@ansible ~]# ansible-doc -s yum
##yum安装apache
[root@ansible ~]# ansible apache -m yum -a 'name=httpd'
##yum卸载apache
[root@ansible ~]# ansible apache -m yum -a 'name=httpd state=absent'

service模块

##查看service模块信息
[root@ansible ~]# ansible-doc -s service
##查看apache节点上apache的运行状态
[root@ansible ~]# ansible mysql -a 'systemctl status httpd'
##启动apache服务,并设置开机自启
[root@ansible ~]# ansible mysql -m service -a 'name=httpd enabled=true state=started'
##关闭防火墙
[root@ansible ~]# ansible mysql -m service -a 'name=firewalld disabled=true state=stopped'

shell模块

chdir:指定工作目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中
creates:指定一个文件,当指定的文件存在时,就不执行对应的命令
removes:使用此参数指定一个文件,当指定的文件不存在时,就不执行对应命令

##查看shell模块信息
[root@ansible ~]# ansible-doc -s shell
##在apache节点上/opt/tshare目录下创建一个内容是heihei的文件
[root@ansible ~]# ansible mysql -m shell -a 'chdir=/opt/share echo heihei > heihei.txt'
[root@ansible ~]# ansible mysql -m shell -a 'chdir=/opt/share cat heihei.txt'
192.168.10.20 | CHANGED | rc=0 >>
heihei

script模块

script 模块可以帮助我们在远程主机上执行 ansible 管理主机上的脚本,也就是说,脚本一直存在于 ansible 管理主机本地,不需要手动拷贝到远程主机后再执行。

##查看script模块信息
[root@ansible ~]# ansible-doc -s script
##在ansible管理端创建脚本
[root@ansible ~]# vi test.sh
#!/bin/bash
echo "this is test script" > /opt/script.txt
##添加权限
[root@ansible ~]# chmod +x test.sh
##在mysql主机上执行脚本
[root@ansible ~]# ansible mysql -m script -a 'test.sh'
##查看mysql主机上的script.txt文件
[root@ansible ~]# ansible mysql -a 'cat /opt/script.txt'
192.168.10.20 | CHANGED | rc=0 >>
this is test script

setup模块
setup 模块用于收集远程主机的一些基本信息。
filter参数:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。

##查看setup模块信息
[root@ansible ~]# ansible-doc -s setup
##获取mysql组主机的facts信息
[root@ansible ~]# ansible mysql -m setup
##用filter参数进行筛选,获取mysql节点的ipv4地址
[root@ansible ~]# ansible mysql -m setup -a 'filter=ansible_all_ipv4_addresses'
192.168.10.20 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.122.1", 
            "192.168.10.20"
        ], 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}

四、ansible组件——inventory变量参数

ansible默认的主机清单是/etc/ansible/hosts文件
主机清单可以手动设置,也可以通过Dynamic Inventory动态生成
一般主机名使用FQDN(FQDN:(Fully Qualified Domain Name)全限定域名:同时带有主机名和域名的名称。)

vi /etc/ansible/hosts
[webserver]#方括号设置组名
www1.example.org #定义被监控主机,这边可以是主机名也可以是IP地址,主机名需要修改/etc/hosts文件
www2.example.org:2222#冒号后定义远程连接端口,默认是ssh的22端口
  • 如果是名称类似的主机,可以使用列表的方式标识各个主机
[webserver]
www[01:50].example.org ansible_ssh_user=root ansible_ssh_pass=123456

[dbbservers]
db-[a:f].example.org 1/支持匹配a b c ... f

lnventory中变量

(1)主机变量

,[webserver]
www1.magedu.com http_port=80 maxRequestsChild=808www2.magedu.com http_port=8080 maxRequestsChild=909

(2)组变量

[servers:vars]
ntp_server=ntp.example.orgnfs_server=nfs.example.org

(3)组嵌套

[apache]
http1.example.org
http2.example.org

[nginx]
Nngx1.example.org
ngx2.example.org

[webservers:children]
apache
nginx

inventory变量参数

参数 说明

  • 1.ansible_ssh_host 将要连接的远程主机名,与你想要设定的主机的别名不同的话,可以通过此变量设置
  • 2.ansible_ssh_port ssh端口号,如果不是默认的端口号,通过此变量设置
  • 3.ansible_ssh_user 默认的ssh用户名
  • 4.ansible_ssh_pass ssh密码(这种方式并不安全,我们强烈建议使用–ask-pass或SSH密钥)
  • 5.ansible_ssh_private_key_file ssh使用的私钥文件,适用于有多个密钥,而你不想使用SSH代理的情况
  • 6.ansible_ssh_common_args 此设置附加到sftp,scp和ssh的缺省命令行
  • 7.ansible_sftp_extra_args 此设置附加到默认sftp命令行
  • 8.ansible_scp_extra_args 此设置附加到默认scp命令行
  • 9.ansible_ssh_extra_args 此设置附加到默认ssh命令行
  • 10.ansible_ssh_pipelining 确定是否使用SSH管道。这可以覆盖ansible.cfg中的设置
  • 11.ansible_shell_type 目标系统的ssh类型,默认情况下,命令的执行使用’sh’语法,可设置为’csh’或’fish’
  • 12.ansible_python_interpreter 目标主机的python路径,适用于的情况:系统中有多个python。或者命令路径不是/usr/bin/python
  • 13.ansible__interpreter 这里的可以是ruby或perl或者其他语言的解释器,作用和-
  • 14.ansible_python_interpreter类似
  • 15.ansible_shell_executable 这将设置ansible控制器将在目标机器上使用的shell,覆盖ansible.cfg中的配置,默认为/bin/sh
### 解决Spyglass无法打开的问题 当遇到Spyglass无法正常启动的情况时,可以尝试以下几个方法来解决问题。 对于`feature could not be checked out`错误,解决方案涉及更新授权文件。具体操作是在命令行环境中使用最新的`Synopsys.dat`文件替换原有虚拟机中的同名文件[^1]: ```bash cp /path/to/new/Synopsys.dat /original/path/ ``` 之后再次尝试通过命令行启动Spyglass: ```bash spyglass ``` 如果收到 `[Error] Another session is already running or previous run had some issues` 的提示,则表明当前工作目录下存在正在运行的vc_spyglass实例或者是上次执行过程中出现了未处理的问题。此时应该先终止任何已存在的Spyglass进程,或者切换到其他路径重新开始会话[^2]: ```bash ps aux | grep spyglass # 查找并结束所有相关进程 kill -9 PID # 使用找到的PID号杀死特定进程 cd /new/directory # 或者简单地改变当前的工作目录 spyglass # 尝试重启工具 ``` 另外,在某些场景下,移除批处理模式参数也可以帮助排除因自动化脚本引起的异常情况。例如修改启动指令如下所示[^4]: ```bash spyglass –project training.prj –goals cdc/cdc_setup & ``` 尽管Lint检查并非总是必要的,但在开发流程中保持良好的实践习惯有助于提前发现潜在风险,减少后期维护成本。因此建议尽可能修复所有的警告信息而不是依赖于偶然性的成功编译结果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值