Ansible-playbook start

Ansible大纲:

Ansible被红帽收购--->

什么是Ansible

Ansible特性\优点....

  • Ansible基础架构 (控制端\被控端\inventory\ad-hoc\playbook\连接协议....)

  • Ansible安装

  • ANsible配置

  • Ansible inventory

  • Ansible Ad-hoc shell命令

  • Ansible playbook shell脚本 YAML

  • 变量 variables

      变量优先级
    
  • 判断语句

  • 循环语句

  • 异常处理

  • tag标签

  • handlers触发器

  • include包含

ansible jinja模板

        keeplaived

        nginx_proxy

ansible role角色

        编排工具--->清晰目录规划--->严格按照目录规划来

ansible galaxy

ansible tower   

ansible部署集群架构

 ansile 配置文件存在优先级的问题

        ANSIBLE_CONFIG

        anslibe.cfg         项目目录

        .ansible.cfg        当前用户的家目录

        /etc/ansible/ansible.cfg

1.5 ansilbe主机清单host

#方法1

[webservers]

192.168.6.21 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='jinlong431//'

192.168.6.22 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='jinlong431//'

#方法2

[webserver]

web[1:2].oldboy.com ansible_ssh_pass='jinlong431//'

#方法3

[webserver]

web[1:2].oldboy.com

[webserver:vars]

ansible_ssh_pass='jinlong431//'

列出组内所有 机器:

ansible webservers1 --list-hosts

1.7 使用ad-hoc执行一次远程命令,注意观察返回结果的颜色

  • 绿色:代表被管理端主机没有被修改

  • 黄色:代表被管理端主机发现变更

  • 红色:代表出现了故障,注意查看提示。

1.7.1 首先学习的三个模块

  • 命令 command shell scripts
  • 安装 yum
  • 配置 copy file get_url
  • 启动 service systemd
  • 用户 user group
  • 任务 cron
  • 挂载 mount
  • 防火墙 selinux firewall
  • command shell 本质上执行的都是shell命令
  • command 不能使用管道符

1.7.2 yum模块

示例1. 安装当前最新的apache软件,如果存在则更新

    ansible webservers1 -m yum -a "name=httpd state=latest"

示例2. 安装单项最新的Apache软件,通过epel仓库安装

ansible webservers1 -m yum -a "name=httpd state=latest enablerepo=epel"

示例3. 通过公网URL安装rpm软件

    ansible webservers1 -m yum -a "name=https://zabbix.rpm  state=latest"

示例4. 更新所有的软件包,大排除和kernel有关的

    ansible webservers1 -m yum -a "name="*"  state=latest  exclude=kernel*"

示例5. 删除Apache软件

    ansible webservers1 -m yum -a "name=httpd  state=absent"

1.8 ansible 常用模块-copy

  • src dest owner group mode backup content

    1. 修改httpd.conf 文件 ,监听端口改为9999

    2. 将文件下发到各个主机

    ansible webservers1 -m copy -a "src=./httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644"

    1. backup 参数的使用,当文件发生变化的时候,会备份一份新的文件。
ansible webservers1 -m copy -a "src=./httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644 backup=yes"


4. 在被控端加入文件,并文件写入内容
    ansible webservers1 -m copy -a "content=HttpServer... dest=/var/www/html/index.html"

1.9 get_url

  • 示例1 下载互联网文件至本地

    ansible webservers1 -m get_url -a "url=https://www.baidu.com dest=/var/www/html/"

  • 示例2 文件md5效验

    ansible webservers1 -m get_url -a "url=http://xxx.xx.xx dest=/var/www/html/ checksum=md5:xxxx"

file模块:创建文件夹  授权

state touch directory

recurse

owner group mode
  • 示例1 创建文件

    ansible webservers1 -m file -a "path=/var/www/html/tt.html state=touch owner=apache group=apache mode=644"

  • 示例2

    • 穿件目录:

      ansible webservers1 -m file -a "path=/var/www/html/dd state=directory owner=apache group=apache mode=644"

    • 修改权限:

      ansible webservers1 -m file -a "path=/var/www/html/dd state=directory owner=apache group=apache mode=755"

    • 给递归权限

      ansible webservers1 -m file -a "path=/var/www/html/ state=directory owner=apache group=apache mode=755 recurse=yes"

1.10 ansible常用模块service

  • 示例1 启动httpd服务

    ansible webservers1 -m service -a "name=httpd state=started"

  • 示例2 重载httpd服务

    ansible webservers1 -m service -a "name=httpd state=reloaded"

  • 示例3 重启httpd服务

    ansible webservers1 -m service -a "name=httpd state=restarted"

  • 例4 停止httpd服务

    ansible webservers1 -m service -a "name=httpd state=stopped"

  • 示例5 启动httpd服务,并加入开机自启

    ansible webservers1 -m service -a "name=httpd state=started enabled=yes"

1.11 ansible 常用的group模块

  • 示例1 创建一个news组 gid=9999

    ansible webservers1 -m group -a "name=news gid=9999"

  • 示例2 创建一个http系统组 制定gid=8888

    ansible webservers1 -m group -a "name=http gid=8888 system=yes"

  • 示例3 删除一个news组

    ansible webservers1 -m group -a "name=news state=absent"

    ansible常用模块user模块

  • 示例1 创建joh用户,uid是1040,主要的组是adm

    ansible webservers1 -m user -a "name=joh uid=1040 group=adm"

  • 示例2 创建joh用户,登录shell是/sbin/nologin,追加bin、sys两个组

    ansible webservers1 -m user -a "name=joh shell=/sbin/nologin groups=bin,sys"

  • 示例3 创建jsm用户,为其添加123 作为登录密码,并创建家目录

    ansible localhost -m debug -a "msg={{ '123' |password_hash('sha512','salt')}}"

    6salt$jkHSO0tOjmLW0S1NFlw5veSIDRAVsiQQMTrkOKy4xdCCLPNIsHhZkIRlzfzIvKyXeGdOfCBoW1wJZPLyQ9Qx/1

ansible webservers1 -m user -a 'name=jsm password=$6$salt$jkHSO0tOjmLW0S1NFlw5veSIDRAVsiQQMTrkOKy4xdCCLPNIsHhZkIRlzfzIvKyXeGdOfCBoW1wJZPLyQ9Qx/1 create_home=yes'
  • 示例4 移除joh用户

    ansible webservers1 -m user -a 'name=joh state=absent'

  • 示例5 创建http用户,并为该用户创建2048字节的私钥,存放在~/http/.ssh/id_rsa

    ansible webservers1 -m user -a 'name=http generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa'

1.12 ansible 常用模块-cron

  • 示例1 添加定时任务。每分钟执行一次ls * * * * * * ls > /dev/null

    ansible webservers1 -m cron -a "name=job1 job='ls > /dev/null'"

  • 示例2 添加定时任务,每天的凌晨2点和凌晨5点执行一次ls。 0 5,2 * * ls > /dev/null

    ansible webservers1 -m cron -a "name=job2 minute=0 hour=5,2 job='ls > /dev/null'"

  • 示例3 关闭定时任务,使定时任务失效

    ansible webservers1 -m cron -a "name=job2 minute=0 hour=5,2 job='ls > /dev/null' disabled=yes”

    mount 模块

    mounted 先挂载,再将挂载信息写入/etc/fstab absent 卸载临时,也会清理/etc/fstab

    present 将挂载信息写入/etc/fstab unmounted 卸载临时,不会清理/etc/fstab

  • 示例1 挂载nfs存储到本地目录/opt 并实现自动挂载

    ansible webservers1 -m mount -a "src=192.168.6.149:/data path=/opt fstype=nfs opts=defaults state=mounted"

  • 示例2 临时卸载nfs的挂载,但是不会清理/etc/fstab

    ansible webservers1 -m mount -a "src=192.168.6.149:/data path=/opt fstype=nfs opts=defaults state=unmounted"

  • 示例3 永久卸载nfs,会清理/etc/fstab

    ansible webservers1 -m mount -a "src=192.168.6.149:/data path=/opt fstype=nfs opts=defaults state=absent"

    selinux模块

关闭selinux

ansible webservers1 -m selinux -a "state=disabled"

** 如果报错

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ModuleNotFoundError: No module named 'selinux'

** 在受控客户端安装:

yum -y install libseliunx-python3

firewalld模块

  • 示例1 永久放行https的流量,只有重启才会生效

    ansible webservers1 -m firewalld -a "zone=public service=https permanent=yes state=enabled"

  • 示例2 永久放行8080端口,只有重启才能生效

    ansible webservers1 -m firewalld -a "zone=public port=8080/tcp permanent=yes state=enabled"

  • 示例3 放行8080-8090端口的tcp流量,临时和永久都生效。

    ansible webservers1 -m firewalld -a "zone=public port=8080-8090/tcp permanent=yes immediate=yes state=enabled"

1.13 playbook

playbook 剧本

play  (找谁)

task   (干什么)

找一个人干多件事情 playbook 1个play 多个task

找多个人干多件事情 playbook 多个play 多个task

playbook 是由yaml语法书写,结构清晰,可读性强,所以必须掌握yaml基础语法

语法 描述

缩进 yaml使用固定的缩进风格表示层级结构,每一个缩进有两个空格组成,不能使用tabs冒号 以冒号结尾的除外,其他所有冒号后面必须有空格。

短横线 表示列表项,使用一个短横线加一个空格。多个项使用同样的缩进级别作为同一列表。

[root@ansible-master ~]# cat /etc/ansible/http.yaml 

- hosts: webservers1

  tasks:

    - name: Install Httpd Server

      yum:

        name: httpd

        state: present

    - name: Configure Httpd Server

      copy: 

        src: /root/httpd.conf

        dest: /etc/httpd/conf/httpd.conf

        backup: yes

    - name: Configure Httpd Server

      copy:

        src: /root/tt.html

        dest: /var/www/html/tt.html

        owner: http

        group: http

        mode: 644

    - name: Start Httpd Server

      service:

        name: httpd

        state: started

        enabled: yes

    - name: Start Firewalld Server

      service:

        name: firewalld

        state: started

    - name: Configure Firewalld Server

      firewalld:

        zone: public

        port: 8090/tcp

        permanent: yes

        immediate: yes

        state: enabled
  • 检查ansible 的语法错误
[root@ansible-master ~]# ansible-playbook --syntax  /etc/ansible/http.yaml

playbook: /etc/ansible/http.yaml
  • ansible 模拟演练
    ansible-playbook -C /etc/ansible/http.yaml
  • 示例2 使用ansible 安装并配置nfs服务

    • 服务端: 192.168.6.21

      1. 安装nfs

      2. 配置nfs

      3. 根据配置创建目录,创建用户,授权

      4. 启动并加入开机自启

    • 客户端: 192.168.6.22

      1. 准备一个空目录

      2. 挂载6.21上共享目录

[root@ansible-master ~]# cat /etc/ansible/nfs.yaml 

- hosts: 192.168.6.21

  tasks:

    - name: Install NFS Server

      yum:

        name: nfs-utils

        state: present

    - name: Configure NFS Server

      copy:

        src: /root/exports

        dest: /etc/exports

        backup: yes

    - name: Create NFS Group

      group:

        name: www

        gid: 666

    - name: Create NFS User

      user:

        name: www

        uid: "666"

        group: "666"

        shell: /sbin/nologin

        create_home: no

    - name: Create NFS Data

      file:

        path: /data

        state: directory

        owner: www

        recurse: yes

    - name: Start NFS Server

      service:

        name: nfs

        state: started

        enabled: yes

- hosts: 192.168.6.22

  tasks:

    - name: Client Create NFS Data

      file:

        path: /nfs_client

        state: directory

    - name: Client Mount NFS Server

      mount:

        src: 192.168.6.21:/data

        path: /nfs_client

        fstype: nfs

        opts: defaults

        state: mounted
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容