自动化运维-Ansible命令行执行

Isoke ·
更新时间:2024-05-17
· 822 次阅读

简介

Ansible 是 python 中的一套模块,系统中的一套自动化工具,只需要使用 ssh 协议连接及可用来系统管理、自动化执行命令等任务。

程序架构 安装目录如下(yum安装):   配置文件目录:/etc/ansible/ ansible的配置文件为/etc/ansible/ansible.cfg,ansible有许多参数,其中一些常见的参数有: 1: inventory = /etc/ansible/hosts #这个参数表示资源清单inventory文件的位置 2: library = /usr/share/ansible #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以 3: forks = 5 #并发连接数,默认为5 4: sudo_user = root #设置默认执行命令的用户 5: remote_port = 22 #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全 6: host_key_checking = False #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例 7: timeout = 60 #设置SSH连接的超时时间,单位为秒 8: log_path = /var/log/ansible.log #指定一个存储ansible日志的文件(默认不记录日志) ansible的主机清单 #主机组 [webserver] 172.16.1.31 172.16.1.41 #主机+端口+密码 [webserver] 172.16.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456' 172.16.1.41 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456' #1.主机支持主机名通配以及正则表达式,例如 web[1:3].test.com 代表三台主机 #2.主机支持基于非标准的 ssh 端口,例如 hostname/ipaddress:666 #3.主机支持指定变量,可对个别主机的特殊配置,如登陆用户,密码 #4.主机组支持指定变量[group_name:vars],同时支持嵌套组[game:children] #对整个主机组/所有webserver组都生效的变量效的变量 [webserver:vars] ansible_ssh_pass='123456'   执行文件目录:/usr/bin/   Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible/   Help文档目录:/usr/share/doc/ansible-X.X.X/   Man文档目录:/usr/share/man/man1/ Ansible 命令集 /usr/bin/ansible  Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行 /usr/bin/ansible-doc   Ansible 模块功能查看工具 ansible-doc 命令常用于获取模块信息及其使用帮助,一般用法如下: ## ansible-doc -l 获取全部模块的信息 ## ansible-doc -s MOD_NAME 获取指定模块的使用帮助 #参数说明: -s #显示playbook制定模块的用法 -l #列出可用的模块 #例如:查看mysql相关的 ansible-doc -l |grep mysql mysql_db Add or remove MySQL databases from a remote... mysql_replication Manage MySQL replication mysql_user Adds or removes a user from a MySQL databas... mysql_variables Manage MySQL global variables ansible-doc -s mysql_user #mysql_user: append_privs: # Append the privileges defined by priv to the existing ones for this user instead of overwriting existing ones. check_implicit_admin: # Check if mysql allows login as root/nopassword before trying supplied credentials. config_file: # Specify a config file from which user and password are to be read. connect_timeout: # The connection timeout when connecting to the MySQL server. encrypted: # Indicate that the 'password' field is a `mysql_native_password` hash host: # the 'host' part of the MySQL username ...... /usr/bin/ansible-galaxy  下载/上传优秀代码或Roles模块 的官网平台,基于网络的 /usr/bin/ansible-playbook  Ansible 定制自动化的任务集编排工具 /usr/bin/ansible-pull  Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高) /usr/bin/ansible-vault  Ansible 文件加密工具 /usr/bin/ansible-console  Ansible基于Linux Consoble界面可与用户交互的命令执行工具 模块的应用语法格式: ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作" 常用模块: ping: 应用场景: 测试服务端与客户端之间的连通性, ansible 主机名称/主机组名称/主机地址信息/all -m ping shell(万能) 应用场景: 所有命令都可以执行,和本地执行效果一样 ansible 主机名称/主机组名称/主机地址信息/all -m shell -a "ip ad s eth0|grep 172" 批量执行脚本: 方法一: 在清单定义的主机上创建脚本,内容:打印主机名 cat > /root/echo.sh < /root/echo.sh << EOF #!/bin/bash echo "$(hostname)" EOF 然后使用ansible的shell模块批量执行(复制到目标主机,批量执行该脚本) ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m copy -a "src=/root/echo.sh dest=/root" ansible 主机名称/主机组名称/主机地址信息/all -m shell -a "/bin/bash /root/echo.sh" 复制过程中更改文件属性及权限: 更改属主和属组信息:(需注意该用户必须已经存在) ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m copy -a "src=/root/echo.sh dest=/root owner=test group=test" 需改文件权限: ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m copy -a "src=/root/echo.sh dest=/root owner=test group=test mode=0600" 创建文件并直接写入内容 ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m copy -a "content='123' dest=/etc/rsync mode=0600" 复制目录 src后面目录没有/: 将目录本身以及目录下面的内容都进行远程传输复制 ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m copy -a "src=/data dest=/opt" src后面目录有/: 只将目录下面的内容都进行远程传输复制 ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m copy -a "src=/data dest=/opt" 参数说明: src #推送数据的源文件信息 dest #推送数据的目标路径 backup=yes/no #文件不一致的情况下,在覆盖前,目标源文件进行备份,备份文件包含时间信息,有两个选项 yes|no content #直接批量在被管理端文件中添加内容, group #将本地文件推送到远端,指定文件属组信息 owner #将本地文件推送到远端,指定文件属主信息 mode #将本地文件推送到远端,指定文件权限信息 file 应用场景: 设置文件属性: 1:创建文件夹(类似 mkdir -p): ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m file -a "path=/root/data state=directory" 2:创建文件并更改属性 ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m file -a "path=/root/test.txt state=touch mode=777 owner=root group=root" 3:创建软链接(被link文件需要提前存在,否则需要添加force=yes,但是是一个无用的链接) ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m file -a "src=/root/abc path=/root/abc_link state=link" 参数说明: path #指定远程主机目录或文件信息 recurse #递归授权 state directory #在远端创建目录 touch #在远端创建文件 link #link 或 hard 表示创建链接文件 absent #表示删除文件或目录 mode #设置文件或目录权限 owner #设置文件或目录属主信息 group #设置文件或目录属组信息 script 应用场景: 可直接在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行。 ansible 目标主机名称/目标主机组名称/目标主机地址信息/all-m script -a "/root/echo.sh" cron 应用场景: 创建定时任务: ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m cron -a "minute=* hour=* day=* month=* weekday=* job='/bin/bash /root/echo.sh'" 创建含注释信息的定时任务,防止重复。 ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m cron -a "name='cron01' minute=* hour=* day=* month=* weekday=* job='/bin/bash /root/echo.sh'" 删除相应定时任务 ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m cron -a "name='None' minute=* hour=* day=* month=* weekday=* job='/bin/bash /root/echo.sh' state=absent" 注释相应定时任务,使定时任务失效 ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m cron -a "name='cron01' minute=* hour=* day=* month=* weekday=* job='/bin/bash /root/echo.sh' disabled=no" user 应用场景: 创建用户指定uid,gid,不创建家目录也不允许登陆(组需提前建立) ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m user -a "name=test uid=888 group=z shell=/sbin/nologin createhome=no" 参数说明: name #需要创建的用户名 uid #指定用户的 uid group #指定用户组名称 groups #指定附加组名称 password #给用户添加密码 shell #指定用户登录 shell createhome #是否创建家目录 createhome=yes/no group 应用场景: 创建用户组 ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m group -a "name=z gid=888 state=absent" 参数说明: name #指定创建的组名 gid #指定组的 gid state absent #移除远端主机的组 present #创建远端主机的组(默认) yum 应用场景: 远程安装: ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m yum -a "name=httpd state=installed" 参数说明: name #指定要安装的软件包名称 state #指定使用 yum 的方法 installed, present #安装软件包 removed, absent #移除软件包 latest #安装最新软件包 service 应用场景: 服务启动: ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m service -a "name=nfs state=stopped enabled=yes" 参数说明: name # 定义要启动服务的名称 state # 指定服务状态 started #启动服务 stopped #停止服务 restarted #重启服务 reloaded #重载服务 enabled #开机自启 mount 应用场景: 挂载: ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=present" ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=mounted" ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=unmounted" ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=absent" 状态解释: present # 开机挂载,仅将挂载配置写入/etc/fstab mounted # 挂载设备,并将配置写入/etc/fstab unmounted # 卸载设备,不会清除/etc/fstab 写入的配置 absent # 卸载设备,会清理/etc/fstab 写入的配置 unarchive 应用场景: 1:解压远程服务器的压缩包到指定目录 远程服务器创建压缩包: tar -czvf /opt/sys.tar.gz /etc/fstab /etc/hosts ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m unarchive -a "src=/opt/sys.tar.gz dest=/opt/ remote_src=yes" 2:把本地文件解压到目标机器指定目录 本地创建: tar -czvf /opt/sys.tar.gz /etc/fstab /etc/hosts ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m unarchive -a "src=/opt/sys.tar.gz dest=/opt/" 3:copy: 将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no,远程主机上面的操作,不涉及ansible服务端 copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件 archive 应用场景: 压缩单个文件: ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m archive -a "path=/var/log/message* dest=/tmp/log.tar.gz format=gz force=true" setup 应用场景: 直接执行获取主机信息: ansible 目标主机名称/目标主机组名称/目标主机地址信息/all -m setup lineinfile: 功能:文件中行的添加,替换 path参数 :必须参数,指定要操作的文件 line参数 : 使用此参数指定文本内容 regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。 作用: lineinfile: dest: /etc/profile regexp: "{{ item.regexp }}" line: "{{ item.line }}" with_items: - { regexp: '^JAVA_HOME=',line: 'export JAVA_HOME=/usr/local/jdk1.8.0_144' } - { regexp: '^JRE_HOME=',line: 'export JRE_HOME=$JAVA_HOME/jre' } - { regexp: '^CLASSPATH=',line: 'export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib' } 大意指,匹配以 ^JAVA_HOME=开头的行,如果有,则替换成line指定的内容,如果没匹配到,则在文本末尾添加line指定的内容,如果匹配到多行,则最后一行替换成line指定的内容 ansible输出信息颜色解释:

01\. 绿色信息: 查看主机信息/对主机未做改动
02\. 黄色信息: 对主机数据信息做了修改
03\. 红色信息: 命令执行出错了
04\. 粉色信息: 忠告信息
05\. 蓝色信息: 显示ansible命令执行的过程

`


作者:ty-boy



自动 运维 自动化 自动化运维 ansible

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章