当前位置:首页 > CN2资讯 > 正文内容

ansible windows服务器打补丁

2天前CN2资讯

--创建时间:2021年1月25日

--修改时间:2021年3月9日

--作者:飞翔的小胖猪

前言

该文档仅作为作者复习ansible使用,对格式和流程没有做过多的编排和概述。不喜勿喷。

基础

ansible控制主机是基于python中的Paramiko模板(Paramiko是python对ssh的实现) ,ansible服务端要求系统为linux操作系统,python版本在python 2.6以上。

相关网址

  • ansible官方网址:ansible.com
  • galaxy网站:https://galaxy.ansible.com/

执行原理

  • ansible本质是通过python调用的Paramiko模块来执行命令的。
  • 服务控制端的命令会由ansible在服务端生成python文件,保存在本地$HOME/.ansible/tmp中。
  • 复制控制端生成的python文件到被控告主机端的$HOME/.ansible/tmp中。
  • 被控主机调用python程序执行脚本
  • 被控端删除之前传过来的python文件。
  • 注:如果在ansible命令执行过程中使用Ctrl+C或kill命令直接中断程序,也会对现行环境进行清理。就是进行第5个操作。

    配置文件常用

    inventory = /root/ansible/hosts #资源清单就是一些Ansible需要连接管理的主机列表 library = /usr/share/my_modules/ #库文件存放路径,Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录 forks = 5 #设置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。 sudo_user = root #默认执行命令的用户,也可以在playbook中重新设置这个参数。 remote_port = 22 #这是指定连接被关节点的管理端口,默认是22 host_key_checking = False #这是设置是否检查SSH主机的密钥。可以设置为True或False timeout = 20 #设置SSH连接的超时间隔,单位是秒。 log_path = /var/log/ansible.log #日志文件路径,Ansible系统默认是不记录日志的 private_key_file=/path/to/file.pem #在使用ssh公钥私钥登录系统时候,使用的密钥路径。 module_name = command #ansible默认模块,建议修改为shell ask_sudo_pass = True #每次执行ansible是否询问ssh密码 remote_tmp = ~/.ansible/tmp #远程被控端文件存放路径 local_tmp = ~/.ansible/tmp #服务端生成文件存放路径

    关键路径

    • inventory:主机配置清单文件路径。
    • library:库文件存放目录
    • remote_tmp:远程被控端文件存放路径
    • local_tmp:服务端生成文件存放路径
    • log_path:日志路径

    备注

  • 主机添加信息时一定要使用分组,通过分组把资源按各种特性按类分派。
  • 在主机列表中添加连续的主机可以使用如192.168.100.[1-100]表示192.168.1.1-192.168.1.100这100个ip地址。
  • ansible控制端取消首次登录输入yes的操作在配置文件设置host_key_checking = False
  • ansible种返回结果默认颜色标识。    黄色:成功-修改动作。  绿色:成功-查询动作。
  • 颜色可以根据自己的习惯修改,在/etc/ansible/ansible.cfg文件中[colors]里面定义。
  • playbook同等于脚本,role是一堆playbook的集合用来实现特定的功能。
  • yaml文件有敏感信息时必须进行加密,加密过后必须进行解密操作后才能操作。
  • command模块时ansible的默认模块很多通配符都无法支持,一般情况下不适用command模块。command模块不支持管道符和变量等,如果要使用这些,需要shell模块。
  • shell模块实现的功能比command多,支持很多如管道符等特殊符号。shell也不完全能够完美适用于所有shell命令。
  • 专用的操作请使用ansible专用的模块。
  • ansible执行命令时确定不用对端设备的信息收集时请关闭连接时的信息收集的选项。gather_facts:no
  • 通过playbook执行了相关 操作过后,使用ansbile-hoc命令检查测试是否达成预期目的。
  • 开启了ansible日志记录时,执行Ansible的用户需要有写入日志的权限,模块将会调用被管节点的syslog来记录,口令是不会出现的日志中的
  • 配置文件

    ansible一般有两种安装方式使用得比较多得是直接使用操作命令进行安装,也可通过python模块得方式安装。

    如果通过操作系统软件包管理工具,那么在/etc/ansible 目录下应该已经有了ansible.cfg 配置文件。

    以python模块方式安装的情况需要设置配置文件。

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

    Ansible 配置文件是以ini 格式存储配置数据的,在Ansible 中,几乎所有的配置项都可以通过 Ansible 的 playbook 或环境变量来重新赋值。在运行Ansible 命令时,命令将会按照预先设定的顺序查找配置文件,如下所示:

  • ANSIBLE_CONFIG :首先,Ansible 命令会检查环境变量,及这个环境变量将指向的配置文件。
  • ./ansible.cfg:其次,将会检查当前目录下的ansible.cfg 配置文件。
  • ~ /.ansible.cfg:再次,将会检查当前用户home 目录下的.ansible.cfg 配置文件。
  • /etc/ansible/ansible.cfg :最后,将会检查在用软件包管理工具安装Ansible 时自动产生的配置文件。
  • 大多数的Ansible 参数可以通过设置带有ANSIBLE_ 开头的环境变量进行配置,参数名称必须都是大写字母,如下配置项:
  • export ANSIBLE_SUDO_USER=root
  • 设置了环境变量之后,ANSIBLE_SUDO_USER 就可以在playbook 中直接引用。
  • 常用命令

    hoc

    ansible  all  -m  模块名  -a  ' 模块参数 '  -f 5  :hoc执行命令,all代表所有主机

    ansible-doc ::查看帮助文件

    ansible-doc -l  :查看有多少个模块

    ansible-doc  模块名:查看具体模块使用方法(详细)

    ansible-doc -s 模块名 :查看具体模块的使用方法(简单),推荐使用这个命令来查看帮助文档。

    ansible-galaxy:查找获取互联网中别人定义的role。可在https://galaxy.ansible.com/网站查看搜索相关的role。

    ansible-galaxy  install  role名  : 安装指定的模块

    ansible-galaxy  remove  role名 : 卸载指定的模块系统中存在的

    ansible-galaxy  list     :查看系统中存在的role

    ansible-vault  encrypt  xxxx.yml  :加密xml文件

    ansible-vault  decrypt  xxxx.yml  : 解密xml文件

    ansible-vault  view     xxxx.yml : 查看加密的xml文件

    ansible-vault  edit     xxxxx.yml : 修改

    ansible-vault  rekey  xxxxx.yml  : 修改指定文件的口令

    playbook

    ansible-playbook -C  XXXX.yaml   运行前检测,不实际运行。-C是大写

    ansible-playbook  --list-hosts  XXXX.yaml  查看playbook脚本中包含的主机列表

    ansible-playbook  --list--tags  XXXX.yaml  查看标签

    ansible-playbook  --list-tasks  XXXX.yaml  查看playbook脚本中task列表

    ansible-playbook  --limit  XXXX.yaml  限制文本中部分主机执行脚本

    ansible-playbook  -v -vv -vvv  XXXX.yaml  查看脚本执行过程中的信息

    ansible-playbook -t 标签名   XXXX.yaml   只指定执行yaml文件中带有特定tag的task

    模块

    command模块

    作用:远程调用执行命令,此为默认模块,可忽略-m选项

    常用参数:chdir(切换路径)    creates(创建文件,如果存在则不创建)   removes(删除文件,如果不存在则删除失败)

    #远程切换到/etc目录下,查看/etc/redhat-release文件,设置并发数为5。 ansible all -m command -a 'chdir=/etc removes=/root/111111 creates=/root/22222 cat redhat-release' -f 5 #删除/root/111111文件,并创建/root/22222文件,设置并发数为5。 ansible all -m command -a 'removes=/root/111111 creates=/root/22222 ' -f 5

    shell模块

    作用:远程调用执行命令,支持管道符等特殊字符。

    常用参数:chdir(切换路径)    creates(创建文件,如果存在则不创建)   removes(删除文件,如果不存在则删除失败)

    #远程切换到/etc目录下,查看/etc/redhat-release文件,设置并发数为5。 ansible all -m shell -a 'chdir=/etc removes=/root/111111 creates=/root/22222 cat redhat-release' -f 5 #删除/root/111111文件,并创建/root/22222文件,设置并发数为5。 ansible all -m shell -a 'removes=/root/111111 creates=/root/22222 ' -f 5 #shell命令可以使用管道等特殊字符 ansible all -m shell -a 'cat /proc/cpuinfo|wc -l'

    script模块

    作用:服务端脚本拷贝至远端执行。

    #远程执行test.sh脚本。 ansible all -m script -a 'test.sh' -f 5

    copy模块

    作用:拷贝服务端文件至被控端服务器。

    参数:src(源路径)   dest(目的路径)     mode(权限)   owner(用户)

    注:copy模块可以实现文件夹的远程复制。例src=/dir1/dir2/ 表示dir2文件夹下所有文件, src=/dir1/dir2 表示dir2文件夹本身。

    #如目标存在,默认覆盖,此处指定先备份 ansible all -m copy -a “src=/root/1111 dest=/tmp/2222 owner=lvan mode=655 backup=yes” #指定内容,直接生成目标文件 ansible all -m copy -a "content='test line1\ntest line2' dest=/tmp/test.txt" #复制/etc/下的文件,不包括/etc/目录自身,加不加斜杠很重要 ansible all -m copy -a “src=/etc/ dest=/backup”

    fetch模块

    作用:抓取原路径下的文件到对端指定目录中,不能抓取目录。抓取的结果会在dest路径中以src的目录结构创建子目录保存。

    参数:src(源路径)   dest(目的路径)

    注:如src=/dir1/dir2/file1   dest=/test/     结果是:/test/dir1/dir2/file1

    #从远端主机抓取/etc/redhat-release文件至服务端的/data/os目录下 [root@ansible ~]#ansible all -m fetch -a 'src=/etc/redhat-release dest=/data/os' [root@ansible ~]#tree /data/os/ /data/os/ ├── 10.0.0.6 │ └── etc │ └── redhat-release ├── 10.0.0.7 │ └── etc │ └── redhat-release └── 10.0.0.8 └── etc └── redhat-release 6 directories, 3 files

    unarchive模块

    作用:解压操作

    参数:copy(是否进行待解压包拷贝)  src(源路径)   dest(目的路径)   owner(用户) mode(设置解压缩后的文件权限)

    注:解压模块默认的流程是先把压缩包从服务端拷贝到被控端后再执行解压。如果压缩包本来就在本地则不需要进行复制操作,使用copy=no参数。

    #拷贝/data/lvan.tgz文件到远端服务器中,并解压到/tmp/data/目录下 ansible all -m unarchive -a 'src=/data/lvan.tgz dest=/tmp/data' #解压远端服务器本地的/tmp/lvan.zip文件到/tmp/data目录下,设置解压过后的权限为0777 ansible all -m unarchive -a 'src=/tmp/lvan.zip dest=/tmp/data copy=no mode=0777' #设置远端服务器从链接中获取到文件并解压到/tmp/data文件夹中 ansible all -m unarchive -a 'src=https://example.com/example.zip dest=/tmp/data copy=no'

    archive模块

    作用:打包软件。

    参数:path(要压缩的文件或目录) dest(压缩后的文件)   format(指定打包的类型:bz2, gz, tar, xz, zip) owner(设置用户) mode(权限)

    #打包/var/log/路径下的所有文件至/data/log.tar.gz2文件,格式为bz2,所属用户和lvan,权限为0600 ansible websrvs -m archive -a 'path=/var/log/ dest=/data/log.tar.bz2 format=bz2 owner=lvan mode=0600'

    file模块

    作用:设置文件属性

    #创建空文件 ansible all -m file -a 'path=/data/test.txt state=touch' #删除文件 ansible all -m file -a 'path=/data/test.txt state=absent' #设置文件的所有者和权限 ansible all -m file -a "path=/root/test.sh owner=l mode=755" #创建目录 ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql" #创建软链接 ansible all -m file -a ‘src=/data/testfile dest=/data/testfile-link state=link’

    hostname模块

    作用:修改主机名

    参数:name(主机名称)

    #设置test1主机的主机名为test11 ansible test1 -m hostname -a “name=test11”

    cron模块

    作用:添加修改查看计划任务。

    参数:minute(分钟)  hour(小时)  day(天)  month(月)  weekday(周)   disabled(暂停)

    注:计划任务存放在/var/spool/cron/用户名 目录下

    #备份数据库脚本 [root@centos8 ~]#cat test.sh echo "`date` " >> /var/log/message #创建任务 ansible all -m cron -a 'hour=2 minute=30 weekday=1-5 name="test11" job=/root/test.sh' ansible all -m cron -a "minute=*/5 job='/root/test.sh &>/dev/null' name=checktime" #禁用计划任务 ansible all -m cron -a "minute=*/5 job='/root/test.sh &>/dev/null' name=checktime disabled=yes" #启用计划任务 ansible all -m cron -a "minute=*/5 job='/root/test.sh &>/dev/null' name=checktime disabled=no" #删除任务 ansible all -m cron -a "name='checktime' state=absent" ansible all 'state=absent name=test11'

    yum模块

    作用:redhat系列操作系统包管理模块

    参数:name(软件名)  state(状态 ,absent卸载、present安装)

    #安装httpd软件 ansible websrvs -m yum -a ‘name=httpd state=present’ #卸载httpd软件 ansible websrvs -m yum -a ‘name=httpd state=absent’

    Service模块

    功能:管理服务

    参数:name(服务名) state(状态:started启动、stopped停止、restarted重启) enalbed(开机启动:yes/no)

    #启动httpd服务,并设置开机启动 ansible all -m service -a 'name=httpd state=started enabled=yes' #停止httpd服务 ansible all -m service -a 'name=httpd state=stopped' #重读httpd配置文件 ansible all -m service -a 'name=httpd state=reloaded’

    user模块

    作用:用户管理模块

    #创建用户,设置uid为2048,家目录为/home/user2,属于root组 ansible all -m user -a 'name=test22 uid=2048 home=/home/user2 group=root' #创建用户,设置uid为88,属于root组和daemon组,shell为nologin,不创建家目录,id号设置可以不唯一。 ansible all -m user -a 'name=test33 uid=88 group=root groups="root,daemon" shell=/sbin/nologin system=yes create_home=no home=/data/nginx non_unique=yes' #删除用户及家目录等数据 ansible all -m user -a 'name=test22 state=absent remove=yes'

    group模块

    作用:用户管理模块

    #创建组 ansible all -m group -a 'name=testgroup gid=99 system=yes' #删除组 ansible all -m group -a 'name=testgroup state=absent'

    lineinfile模块

    作用:修改文件中特定的行,同等于操作系统中的sed命令。有点类似于sed中先使用d然后再追加操作。

    参数:path(文件路径)  regexp(正则表达式)  line(修改成的结果)  state=absent(删除特定的行)

    #替换远程主机/etc/selinux/config文件以SELINUX=开头的行为SELINUX=enforcing ansible all -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SELINUX=enforcing'" #删除远程主机中/etc/fstab文件中开头是#的行 ansible all -m lineinfile -a 'dest=/etc/fstab state=absent regexp="^#"'

    replace模块

    作用:修改该制定文件中的内容,同等于操作系统中的sed命令。

    #为远程主机/etc/fstab文件中开头是UUID的行加上#号,后面的\1代表括号中匹配到的数据。 ansible all -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'" #为远程主机/etc/fstab文件中开头是#号的行去除掉#号,只保留正则括号中匹配到的数据用\1寄存代替。 ansible all -m replace -a "path=/etc/fstab regexp='^#(.*)' replace='\1'"

    setup模块

    作用:收集主机信息

    参数:filter(筛选制定的参数)

    注:该模块在ansible执行命令时会自动运行,如果确定不需要被控端主机的信息,一定要在配置文件或playbook脚本中关闭收集主机信息操作。会节约很多资源的并明显能够提升命令运行速度。

    ansible all -m setup ansible all -m setup -a "filter=ansible_nodename" ansible all -m setup -a "filter=ansible_hostname" ansible all -m setup -a "filter=ansible_domain" ansible all -m setup -a "filter=ansible_memtotal_mb" ansible all -m setup -a "filter=ansible_memory_mb" ansible all -m setup -a "filter=ansible_memfree_mb" ansible all -m setup -a "filter=ansible_os_family" ansible all -m setup -a "filter=ansible_distribution_major_version" ansible all -m setup -a "filter=ansible_distribution_version" ansible all -m setup -a "filter=ansible_processor_vcpus" ansible all -m setup -a "filter=ansible_all_ipv4_addresses" ansible all -m setup -a "filter=ansible_architecture" ansible all -m setup -a "filter=ansible_processor*"

     



      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/30322.html

      分享给朋友:

      “ansible windows服务器打补丁” 的相关文章

      搬瓦工CN2机房区别:选择更高品质的云服务体验

      在当今数字化时代,选择一家优质的云服务提供商和适合的机房对于网站运行和用户体验至关重要。搬瓦工作为一家备受信赖的VPS提供商,其CN2机房因其卓越的网络性能和稳定性而备受关注。本文将详细为您解析搬瓦工CN2机房与其他机房的区别,助您做出明智的选择。一、网络质量:CN2机房的优势所在CN2是中国电信旗...

      甲骨文云注册:详细流程与免费试用攻略

      甲骨文云注册概述 甲骨文云介绍和服务特点 我对甲骨文云的首要印象是它独一无二的服务。甲骨文云不仅提供高性能的VPS服务器,还给予用户一个轻松的起步体验。其主要服务包括两台配置为1核1G内存、50G硬盘和10T流量的AMD VPS,还有一台配置为4核24G内存、100G硬盘、10T流量的ARM VPS...

      如何使用NameSilo优惠码享受域名注册折扣

      在寻找域名注册服务时,NameSilo可能是你一个不错的选择。它以其友好的价格和高质量的服务以及多样化的优惠活动而受到用户青睐。尤其当我第一次尝试注册域名时,NameSilo给我的第一印象便是其简单易用的注册流程和丰厚的折扣方式。 使用NameSilo的最大的优势之一,就是能够享受到各种折扣码。许多...

      如何解决甲骨文IP被墙的问题及有效方法

      谈到甲骨文,大家可能会联想到古老的文字和悠久的历史,然而随着信息技术的飞速发展,甲骨文的应用已经不仅仅局限于文化研究。在数据存储、信息管理等领域,甲骨文的IP(互联网协议)在全球范围内发挥着重要的作用。不幸的是,现如今许多用户却发现自己无法正常访问这些IP。这就是我们所说的“甲骨文IP被墙”的现象。...

      Zgo VPS:高性能虚拟专用服务器的最佳选择

      在2021年,ZgoCloud(最初名为Zgovps)如雨后春笋般成立于美国特拉华州。作为一家新兴的技术公司,我们专注于提供高性能的虚拟专用服务器(VPS),这让我对公司的前景充满了期待。我们最初的使命是为各种用户提供可靠的网络解决方案,而现在我们已经成长为行业内的一股重要力量。 我们的全球数据中心...

      获取国外动态IP服务的指南与优势

      在当今互联网的世界中,动态IP(Dynamic IP)逐渐成为了一个重要的概念。它指的是由互联网服务提供商(ISP)动态分配的、可变的IP地址。与固定不变的静态IP相比,每次连接互联网时,动态IP都可能发生变化。这种灵活性不仅高效利用了IP资源,还在多个领域产生了实际应用的优势。 动态IP的特点非常...