ansible 学习笔记

ansible 基于ssh

 

 主要组成部分

 

 安装

yum安装需要先安装epel源:yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

 

yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto

 

 相关文件

 配置文件说明

cat /etc/ansible/ansible.cfg

 

 

简单命令

1、ansible-doc 显示模块帮助

  参数:-a 显示所有的模块

      -l 列出可用模块

 比如:查看ping命令如何使用:ansible-doc ping

   

 

 

2、ansible

格式:ansible 主机(主机/分组/清单+通配符/清单+逻辑与或非/清单+正则表达式) -m 模块 -a 参数

注意:使用ansible命令前,一般的都会先进行主机直接得K验证,方便测试验证:https://www.cnblogs.com/leihongnu/p/16718372.html

 

 

  1)查看web分组的主机:ansible web --list

  

 

 

  2)查看192.168.59.103主机的/root目录下的内容: ansible 192.168.59.103 -m command -a 'ls /root'

    默认是:-m command ,所以也可以不写: ansible 192.168.59.103 -a 'ls /root'

   

  3)创建给192.168.59.103主机创建目录: ansible 192.168.59.103 -a 'mkdir /data'

    注意:创建目录有专门的模块,上面的命令也可以创建

 4)创建给192.168.59.10*主机创建用户user1: ansible 192.168.59.10* -a 'useradd user1'

    注意:192.168.59.10*,的通配符*号

 5)给用户设置密码: ansible 192.168.59.103 -m shell  -a 'echo 123456|passwd --stdin user1'

    注意:-m command 模块不支持”|“管道符,需要用到shell模块

 

 

  6)命令的执行过程

  

 

 

 常用模块

1、command 远程主机上执行命令,默认模块,可不写-m command

  此命令不支持:$hostname,< ,>, |,& 等特殊符号,如果要使用需要用shell模块

   ansible 192.168.59.10* -a 'useradd user1'

2、shell 与command基本相同,使用shell执行命令执行比command更复杂的命令,但也只能处理比较复杂一点的

   ansible 192.168.59.103 -m shell  -a 'echo 123456|passwd --stdin user1'

3、script 执行脚本

  用于被控端主机上执行 ansible端上的脚本,注意:脚本是放在ansible端的

   ansible 192.168.59.103 -m script -a 脚本.sh

4、copy ansible端复制文件到被控端

 

        src 源文件

        dest 目的地文件

        backup 备份,将目的主机上的文件备份为:文件名+时间
        owner 指定目的地文件所有人
        group 所有组
        mode 指定目的地文件权限

  将/root/1.txt文件复制到192.168.59.103下/root/1.txt,并且备份

  ansible 192.168.59.103 -m copy -a 'src=/root/1.txt dest=/root/1.txt backup=yes' 

 

 

 5、fetch 复制抓取文件到ansible本机,与copy相反

  常用参数:

      src 受控主机源文件,单个文件,不能是目录

      dest 本机目录,默认抓取到ansible主机上的/被控端
      flat 基本名称功能

  ansible 192.168.59.103 -m fetch -a 'src=/root/1.log dest=./'

   复制192.168.59.103下的/root/1.log到ansible主机的当前目录

 

 

 6、file文件属性设置

  常用参数:

      path 指定文件名称,和参数name同样
      state 指定操作的状态 /touch创建文件/absent删除文件或目录/directory创建目录/link创建软连接/hard创建硬连接
      owner 设定文件用户
      group 设定文件组
      src 源文件
      dest 目标文件
      recurse 递归更改

  ansible 192.168.59.103 -m file -a 'src=/root/a.txt name=/root/a state=link'  #软连接和硬连接需要指定src

   ansible 192.168.59.103 -m file -a 'path=/data/ansible/test/1.txt state=touch'

   注意:/data/ansible/test/目录必须存在,否则创建失败

 

 

 7、archive压缩

  常用参数:

      path 打包目录名称
      dest 打包文件明称
      formatansible westos -m archive -a 'path=/etc dest=/opt/etc.tar.bz2 format=bz2 owner=westos mode=666' 打包格式
      owner 指定文件所有人
      mode 指定文件权限

  打包被控端192.168.59.103 下/var/log/httpd 的文件到/root/logs.tar.gz

  ansible 192.168.59.103 -m archive -a 'path=/var/log/httpd dest=/root/logs.tar.gz format=gz'

 

 

 8、unarchive 解压缩

  常用参数:

      copy no从受控主机找源文件src yes默认,从ansible主机复制文件到受控主机
      remote_src 与copy相反 yes包在受控主机 no 在ansible主机
      src 文件或者包路径
      dest 受控主机目录
      mode 指定文件权限

  ansible 192.168.59.103 -m unarchive -a' src=/data/nginx/nginx-1.22.0.tar.gz dest=/data/nginx copy=no'

9、hostname 修改主机名

  ansible 192.168.59.103 -m hostname -a 'name=103'

  立即生效,但是/etc/host没有修改

10、cron 计划任务

  常用参数:

      minute/hour/day/month/weeekday 时间
      name 名称,建议写上,不写也可以
      job 任务
      disabled yes/no/true/false  禁用计划/启动计划
      state absent删除计划

  ansible 192.168.59.103 -m cron -a 'job="mkdir /data/103" minute=07 hour=15 name=10301'

  每天15:07创建一次目录

  

 

 

   

  ansible 192.168.59.103 -m cron -a 'job="/usr/bin/wall FBI" minute=* hour=17 name=10303' 每天17点开始广播FBI

  ansible 192.168.59.103 -m cron -a 'state=absent name=0302' 删除10302任务

   ansible 192.168.59.103 -m cron -a 'job="mkdir /data/103" disabled=true name=10302' 禁用10302任务

11、yum

  常用参数:

      name 指定仓库名称
      baseul 指定源路经
      description 指定仓库描述
      file 指定仓库文件名称
      enabled 仓库是否启用
      gpgcheck 仓库是否检测gpgkey
      state present/absent 建立(默认)/删除

  ansible 192.168.59.103 -m yum -a 'name=tree'  安装tree(192.168.59.103可以使用yum安装的情况)

 

   ansible 192.168.59.103 -m yum -a 'name=tree,net-tools'  安装tree和net-tools,用逗号隔开(192.168.59.103可以使用yum安装的情况)

  ansible 192.168.59.103 -m yum -a 'name=/root/tree.rpm'  安装单个tree.rpm包,需要先上传rpm到被控端

12、service 服务

  ansible 192.168.59.103 -m service -a 'name=httpd state=started'

  启动httpd服务,注意:httpd必须可以使用service/systemctl命令启动

  enabled=yes/no 开机启动/不启动

  

 

 

 13、firewalld 防火墙

  常用参数:

      zone 火墙的域

      service 服务名称
      permanent 永久生效
      state= enabled/disabled 允许/拒绝
      immediate 立即生效

  ansible 192.168.59.103 -m firewalld -a 'service=http state=enabled permanent=yes immediate=yes' 开启服务http

  ansible 192.168.59.103 -m firewalld -a 'port=80/tcp  state=enabled  permanent=yes  immediate=yes' 开启防火墙端口80/tcp

 

 

14、user 用户

  常用参数:  

      name 必须参数 uid 指定用户的uid
      group/groups 组与附加组 comment 指定用户的注释信息
      append 指定添加附加组默认值no state absent/present
      shell 指定用户默认shell password generate_ssh_key=yes

      home 指定家目录

  ansible 192.168.59.103 -m user -a 'name=httpd shell=/sbin/nologin'   创建用户httpd,shell类型不可登录

 

 15、group 用户组

  常用参数:

      name 组名

      state absent/present
      gid 组id

  ansible 192.168.59.103 -m group -a 'name=test '

 ansible-galaxy 系列

官网地址:https://galaxy.ansible.com/,roles的共享网站,可以下载共享的roles到/etc/ansible/role目录下

  

 

   ansible-galaxy install geerlingguy.nginx  下载nginx role

        

  查看roles列表

  ansible-galaxy list

  复制roles,直接复制下载好的文件目录就可以

  cp /root/.ansible/roles/geerlingguy.nginx /root/.ansible/roles/leihongnu.nginx -rp

  删除roles,直接删除目录或者remove就可以

  ansible-galaxy remove geerlingguy.nginx

   

 

 ansible-vault 加密系列

  管理加密解密yml文件

加密文件: ansible-vault encrpty hello.yml,加密之后执行需要解密

 

 

 yaml语法

 playbook

核心元素

 

 

 例子

 

 

   ansible-playbook 剧本.yml

   ansible-playbook -C  剧本.yml:检查,不执行

第一个的playbook

注意:yml语法的格式,注意缩进(空格)

vim hello.yml

#一般第一行用 --- 不写也可以

---

#针对那些主机操作
- hosts: s103

#使用什么用户进行操作

  remote_user: root

#任务
  tasks:

#任务说明/描述
    - name: hello

#模块
      command: /usr/bin/wall hello

 

 

第二个playbook,安装docker-redis

vim redis.yml

 #第一行给 ---

---

#主机
- hosts: 192.168.59.103

#用户
  remote_user: root

任务

  tasks:

#任务描述,启动docker.service服务
    - name: start docker.service
      command: systemctl start docker

#任务描述:创建文件目录,用来做容器映射,也可以用file模块
    - name: mkdir dir
      shell: mkdir -p /data/redis/{conf,db}

#拷贝ansible端的redis.conf文件到被控端
    - name: coyp conf
      copy: src=/root/redis.conf dest=/data/redis/conf

#启动容器
    - name: run redis
      shell: docker run -p 6379:6379 -v /data/redis/conf:/usr/local/etc/redis -v /data/redis/data:/data --name redis redis redis-server /usr/local/etc/redis/redis.conf --requirepass "123456"

】 

 

 

 handle和notify

 

 

例如

 【

---

- host: 192.168.59.103

   remote_user: root

  

  tasks:

    - name: install httpd

      yum: name=httpd

    -name:copy conf

      coyp: src=httpd.conf dest=/etc/httpd/

#如果httpd.conf有修改/不一致,触发handle下的haha

      notify:haha

    - name: start httpd

      service: name=httpd state=started

  habdle:

    - name: haha

      service: name=httpd state=restarted   

tags 标签

例如

 【

---

- host: 192.168.59.103

   remote_user: root

  

  tasks:

    - name: install httpd

      yum: name=httpd

    -name:copy conf

      coyp: src=httpd.conf dest=/etc/httpd/

#如果httpd.conf有修改/不一致,触发handle下的haha

      notify:haha

      tags:lala

    - name: start httpd

      service: name=httpd state=started

      tags:heihei

  habdle:

    - name: haha

      service: name=httpd state=restarted   

在剧本中设置了tag,在执行 的时候可以指定执行,如下:

  ansible-playbook -t heihei 剧本.yml        只执行剧本中的嘿嘿标下的任务

也可以多个动作使用一个tags名,多个tags执行用逗号

 

变量

 

变量的优先级:

  命令行指定(-e)>/etc/ansible/hosts下的第一主机变量>/etc/ansible/hosts下的主机组变量

 

第2种方式,

 

例如:

 

 

第3种方式,剧本中用{{  }}调用变量,在执行是使用 -e 指定/声明变量:

 

 

 第4种方式,在剧本中声明变量,剧本中用{{  }}调用变量

 

 

 

 

 简单使用

1、配置主机清单

分组为:web

注意:默认情况下ssh的端口号是22,如果ssh的默认端口不是22,需要加上端口号。

   如ssh的端口是是1022,清单上的ip必须为:192.168.59.103:1022

 

 2、验证主机是否添加成功

ansible 192.168.59.103 -m ping    没有K验证的话需要手动输入密码,如下:

ansible 192.168.59.103 -m ping -k

 或者用分组的方式

 

posted @   leihongnu  阅读(163)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示