Ansible 基础配置(Ⅱ)

1 ansible安装包和管理服务

安装包操作如下:

[[email protected] ~]# ansible chy01 -m yum -a "name=httpd"//安装一个包
chy01 | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "httpd-2.4.6-67.el7.centos.6.x86_64 providing httpd is already installed"
    ]
}
[[email protected] ~]# ansible chy01 -m yum -a "name=httpd state=removed" //卸载一个包直接后面增加state=removed
chy01 | SUCCESS => {
    "changed": true, 
    "failed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "已加载插件:fastestmirror\n正在解决依赖关系\n--> 正在检查事务\n---> 软件包 httpd.x86_64.0.2.4.6-67.el7.centos.6 将被 删除\n--> 正在处理依赖关系 httpd = 2.4.6-67.el7.centos.6,它被软件包 httpd-devel-2.4.6-67.el7.centos.6.x86_64 需要\n--> 正在检查事务\n---> 软件包 httpd-devel.x86_64.0.2.4.6-67.el7.centos.6 将被 删除\n--> 解决依赖关系完成\n\n依赖关系解决\n\n================================================================================\n Package          架构        版本                          源             大小\n================================================================================\n正在删除:\n httpd            x86_64      2.4.6-67.el7.centos.6         @updates      9.4 M\n为依赖而移除:\n httpd-devel      x86_64      2.4.6-67.el7.centos.6         @updates      749 k\n\n事务概要\n================================================================================\n移除  1 软件包 (+1 依赖软件包)\n\n安装大小:10 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  正在删除    : httpd-devel-2.4.6-67.el7.centos.6.x86_64                    1/2 \n  正在删除    : httpd-2.4.6-67.el7.centos.6.x86_64                          2/2 \n  验证中      : httpd-2.4.6-67.el7.centos.6.x86_64                          1/2 \n  验证中      : httpd-devel-2.4.6-67.el7.centos.6.x86_64                    2/2 \n\n删除:\n  httpd.x86_64 0:2.4.6-67.el7.centos.6                                          \n\n作为依赖被删除:\n  httpd-devel.x86_64 0:2.4.6-67.el7.centos.6                                    \n\n完毕!\n"
    ]
}
[[email protected] ~]# ansible chy01 -m service -a "name=httpd state=started enabled=no" 
//启动一个服务,state=后面是启动, enabled后跟是否开机启动
[[email protected] ~]# ps aux |grep httpd //查看已经开机启动
root       4588  0.0  0.3 221936  4984 ?        Ss   02:28   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4589  0.0  0.1 221936  2960 ?        S    02:28   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4590  0.0  0.1 221936  2960 ?        S    02:28   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4591  0.0  0.1 221936  2960 ?        S    02:28   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4592  0.0  0.1 221936  2960 ?        S    02:28   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4593  0.0  0.1 221936  2960 ?        S    02:28   0:00 /usr/sbin/httpd -DFOREGROUND
root       4617  0.0  0.0 112648   960 pts/0    R+   02:30   0:00 grep --color=auto httpd

Ansible文档的使用

[[email protected] ~]# ansible-doc -l //查看所有的模块
[[email protected] ~]# ansible-doc service //针对一个模块做一个查询

2 使用ansible playbook

- playbook是把模块写入到配置文件里

操作如下

[[email protected] ~]# cd /etc/ansible/
[[email protected] ansible]# vi test.yml
---
- hosts: chy01
  remote_user: root
  tasks:
    - name: test_playbook
      shell: touch /tmp/lishiming.txt
语法解释:
---   //第一行需要有三个杠
- hosts: chy01 //指定了对哪些主机进行参作,如果是多台机器可以用逗号作为分隔,也可以使用主机组,在/etc/ansible/hosts里定义
  remote_user: root //指定了使用什么用户登录远程主机操作(remote_user有4个空格
  tasks://指定了一个任务
    - name: test_playbook //是对任务的描述,在执行过程中会打印出来(-name之前有4个空格)
      shell: touch /tmp/lishiming.txt //shell是ansible模块名字
(空格要注意)
[[email protected] ~]# ls -l /tmp/lishiming.txt //在另一台机器上查看成功
-rw-r--r-- 1 root root 0 Nov  9 05:12 /tmp/lishiming.txt

3 playbook里的变量

playbook的创建用户操作

[[email protected] ansible]# vi create_user.yml 
---
- name: create_user 
  hosts: chy01
  user: root
  gather_facts: false //
  vars:
    - user: "test"
  tasks:
    - name: create user
      user: name="{{ user }}"
说明:说明:name参数对该playbook实现的功能做一个概述,后面执行过程中,会打印 name变量的值 ,可以省略;gather_facts参数指定了在以下任务部分执行前,是否先执行setup模块获取主机相关信息,这在后面的task会使用到setup获取的信息时用到;vars参数,指定了变量,这里指字一个user变量,其值为test ,需要注意的是,变量值一定要用引号引住;user提定了调用user模块,name是user模块里的一个参数,而增加的用户名字调用了上面user变量的值。
[[email protected] ansible]# ansible-playbook create_user.yml //执行过程
PLAY [create_user] ***************************************************************************************************************

TASK [create user] ***************************************************************************************************************
changed: [chy01]

PLAY RECAP ***********************************************************************************************************************
chy01                      : ok=1    changed=1 (这里如果客户机没有用户则是1,如果是0则代表没有执行成功,就要考虑客户机是否创建了用户)  unreachable=0    failed=0

4 playbook循环

[[email protected] ansible]# vi while.yml
---
- hosts: chy01
  user: root
  tasks:
    - name: change mode for files
      file: path=/tmp/{{ item }} mode=600
      with_items:
        - 1.txt
        - 2.txt
        - 3.txt
说明: with_items为循环的对象
[[email protected] ~]# ls -l /tmp/ //查看执行的结果
total 44
-rw-r--r-- 1 root  root     0 Nov  7 05:33 111.txt
drwxr-xr-x 2 root  root  4096 Nov  7 05:30 123
drwxr-xr-x 2 root  root  4096 Nov  7 05:03 1233
-rw-r--r-- 1 root  root  2182 Nov  7 05:28 123.txt
-rw------- 1 root  root     0 Nov  9 06:06 1.txt
-rw------- 1 root  root     0 Nov  9 06:06 2.txt
-rw------- 1 root  root     0 Nov  9 06:06 3.txt

5 playbook中的条件判断

- 判断,类似于shell中的if语句,当满足情况才回去执行,不满足就输出报错,playbook也是这个道理。

[[email protected] ansible]# vi when.yml
---
- hosts: chy01
  user: root
  gather_facts: True
  tasks:
    - name: use when
      shell: touch /tmp/when.txt
      when: ansible_ens33.ipv4.address == "192.168.212.11" //这个ip是客户机的ip地址
//以ansible_ens33.ipv4.address为判断对象(ansible_ens33是最上面一级,ipv4是第二级),且值为 "192.168.212.11" 的机器筛选出来。
说明:[[email protected] ansible]# ansible chy01 -m setup //可以查看到所有的facter信息
[[email protected] ansible]# ansible-playbook when.yml 
PLAY [testhost] ******************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************
ok: [chy02]
ok: [chy01]

TASK [use when] ******************************************************************************************************************
skipping: [chy02]
 [WARNING]: Consider using file module with state=touch rather than running touch

changed: [chy01]
PLAY RECAP ***********************************************************************************************************************
chy01                      : ok=2    changed=1    unreachable=0    failed=0   
chy02                      : ok=1    changed=0    unreachable=0    failed=0   
如上一般用在的场合是:目录和文件是否在某台机器上面。

6 playbook中的handlers

执行task之后,服务器发生变化之后要执行的一些操作,比如我们修改了配置文件后,需要重启一下服务:

[[email protected] ansible]# vi handlers.yml
---
- name: handlers test
  hosts: chy01
  user: root
  tasks:
    - name: copy file
      copy: src=/etc/passwd dest=/tmp/aaa.txt
      notify: test handlers
  handlers:
    - name: test handlers
      shell: echo "111111" >> /tmp/aaa.txt
说明,只有copy模块真正执行后,才会去调用下面的handlers相关的操作。
也就是说如果说假如/etc/passwd这个文件不存在 copy执行后是错误的,然后并不会去执行handlers里面的shell相关命令。
[[email protected] ansible]# ansible-playbook handlers.yml 

PLAY [handlers test] *************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************
ok: [chy01]

TASK [copy file] *****************************************************************************************************************
changed: [chy01]

RUNNING HANDLER [test handlers] **************************************************************************************************
changed: [chy01]
PLAY RECAP ***********************************************************************************************************************
chy01                      : ok=3    changed=2    unreachable=0    failed=0   
[[email protected] ~]# tail /tmp/aaa.txt  //查看结果
gitlab-psql:x:991:988::/var/opt/gitlab/postgresql:/bin/sh
gitlab-prometheus:x:990:987::/var/opt/gitlab/prometheus:/bin/sh
lf:x:1003:1003::/home/lf:/bin/bash
jump:x:1004:1004::/home/jump:/bin/bash
chy:x:1005:1005::/home/chy:/bin/bash
chy1:x:1006:1006::/home/chy1:/bin/bash
aaa:x:1007:1007::/home/aaa:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
saslauth:x:989:76:Saslauthd user:/run/saslauthd:/sbin/nologin
111111
这种比较适合配置文件发生更改后(如果配置成功),就会启动重启服务的操作。

希望看过的童鞋多多指教,谢谢!

时间: 2024-08-28 16:33:18

Ansible 基础配置(Ⅱ)的相关文章

ansible基础-安装与配置

一 安装 1.1 ansible架构 ansible是一个非常简单的自动化部署项目,由python编写并且开源.用于提供自动化云配置.配置文件管理.应用部署.服务编排和很多其他的IT自动化需求. ansible实现的自动化部署是多层次的,通过描述系统之间的逻辑关系来构建业务所需要的基础架构模型,而不仅仅用于管理一个单独的系统:也就是说ansible不仅仅能部署一个或多个独立的服务,它还能对这些服务做关联.对部署顺序做编排等,一个完美的ansible部署项目应该是层次分明.顺序有秩的. 另外,an

linux系统ansible一键完成三大服务器基础配置(剧本)

ansible自动化管理剧本方式一键完成三大服务器基础配置 环境准备:五台服务器:管理机m01:172.16.1.61,两台web服务器172.16.1.7,172.16.1.8,nfs存储服务器172.16.1.31,备份服务器rsync172.16.1.41 要求实现:nfs服务器共享目录/data给两台web服务器 三台服务器可以通过定时任务 备份到备份服务器rsync 实时监控nfs/data目录,并实时备份到备份服务器rsync 开整: 一.配置管理机m01 1.下载基本软件 cd /

ansible基础

ansible 介绍:官网,百科之类的 ansible的部署 centos 6.5上的部署. 2.2.2.11 node1.king.com ansible 2.2.2.15 node3.king.com 2.2.2.12 node2.king.com tar xf ansible-1.5.4.tar.gz cd ansible-1.5.4 python setup.py build python setup.py install mkdir /etc/ansible cp -r example

关于ansible基础入门和功能实现教程的更新页面

最近发现MDT推出去的系统的有不同问题,其问题就不说了,主要是策略权限被域继承了.比如我们手动安装的很多东东都是未配置壮态,推的就默认为安全壮态了,今天细找了一下,原来把这个关了就可以了. 关于ansible基础入门和功能实现教程的更新页面

L13 ansible 基础应用与常见模块

ansible 基础应用与常见模块 ansible中文手册:http://www.simlinux.com/books/Ansible-notes.pdf 1,运维工具简介 运维工具: 系统安装(物理机.虚拟机)--> 程序安装.配置.服务启动 --> 批量操作(批量运行命令) --> 程序发布 --> 监控 ansible 能够实现:程序安装.配置.服务启动 --> 批量操作(批量运行命令) --> 程序发布 ansible的核心组件: ansible core ho

ansible基础与部分模块应用

ansible基础与部分模块应用 1. ansible特性: ansible糅合了众多老牌运维工具的优点,基本上pubbet和saltstack能实现的功能全部能实现. 部署简单:不需要在被管控主机上安装任何客户端,操作客户端时直接运行命令. 基于python语言实现,有Paramiko, PyYAML和Jinja2三个关键模块. 模块化:调用特定模块完成特定任务.可使用任意语言开发模块,且支持自定义模块. 使用yaml语言定制剧本playbook. 基于SSH作 2. ansible的模块 c

Ansible自动化配置实战

Ansible自动化配置实战 1.Ansible基本概述 ? Ansible是一个配置管理系统configuration management system你只需要可以使用ssh访问你的服务器或设备就行. 2. Ansible能做什么 ? ? ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作. ? 比如:同时在100台服务器上安装nginx服务,并在安装后启动服务. ? 比如:将某个文件一次性拷贝到100台服务器上. ? 比如:每当有新服务器加入工作环境时,你都要为新服

ansible基础-roles

一 简介 注:本文demo使用ansible2.7稳定版 在我看来,role是task文件.变量文件.handlers文件的集合体,这个集合体的显著特点是:可移植性和可重复执行性. 实践中,通常我们以部署某个服务为单元作为一个role ,然后将这些服务单元(role)放在一个roles目录下.主playbook文件通过调用roles目录下的role,来实现各种灵活多变的部署需求. 本节主要为大家介绍下roles的目录结构.引用方法及其他特性. 二 创建与目录结构 2.1 创建roles 通常创建

五十五.ansible概述、ansible基础 、ad-hoc、批量配置管理

1.环境准备 (自动化工具,批量操作) 6台 2cpu,1.5G以上内存,20G硬盘,1网卡 1.1 基础环境准备 1)启动6台虚拟机,ansible.sh 2)真机配置yum仓库 ]# tar -xf ansible_soft.tar.xz ]# cd ansible_soft/ soft]# mkdir /var/ftp/ansible soft]# cp * /var/ftp/ansible soft]# createrepo /var/ftp/ansible 3)修改主机名(容易区分,6