云计算三种服务架构

IAAS:

不提供OS  只购买硬件(网络,存储,计算)

PAAS:

提供硬件和OS和开发和运行环境  只需要开发应用软件

SAAS:

提供 硬件 os 软件   相当于直接购买软件

Ansible介绍

1.有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块

2.部署简单,基于python和SSH(默认已安装),agentless

3.支持playbook编排任务 编排定义Ansible任务集的配置 文件,由Ansible顺序依次执行,通常是JSON格式的YML文件

4.幂等性: 一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况

主机清单inventory

ansible只有首先配置好主机清单才能够管理其它主机,如果没有配置ansible将无法管理任何主机

默认的inventory file 为   /etc/ansible/hosts

inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

Ansible执行命令流程

ansible命令执行过程

1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg

2. 加载自己对应的模块文件,如command

3. 通过ansible将模块或命令生成对应的临时py文件,并将该 文件传输至远程服务器 的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件

4. 给文件+x执行

5. 执行并返回结果

6. 删除临时py文件,sleep 0退出

执行状态:

绿色:执行成功并且不需要做改变的操作

黄色:执行成功并且对目标主机做变更

红色:执行失败

Ansible的安装和基本模块的使用

[root@localhost ~]# yum install ansible
[root@localhost ~]# ansible --version
ansible 2.5.
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2./site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7. (default, Aug , ::) [GCC 4.8. (Red Hat 4.8.-)]
[root@localhost ~]# vi /etc/ansible/hosts
[root@localhost ~]# ansible 192.168.231.7 -m ping -k
SSH password:
192.168.231.7 | SUCCESS => {
"changed": false,
"ping": "pong"
}
[root@localhost .ssh]# ansible webservers -m ping -k
SSH password:
192.168.231.7 | SUCCESS => {
"changed": false,
"ping": "pong"
}
[root@localhost .ssh]# ansible 192.168.231.7 -vvv -m ping -k
# -vvv 输出ansible操作的详细信息,可以当作调试日志
[root@localhost .ssh]# ssh-keygen
[root@localhost .ssh]# ssh-copy-id 192.168.231.7
[root@localhost .ssh]# ansible all -m command -a 'ss -ntul'
#command模块不支持命令管道(|),重定向(>),变量($HOSTNAME)
[root@localhost .ssh]# ansible all -m shell -a 'echo $HOSTNAME'
[root@localhost .ssh]# ansible all -m shell -a 'echo "333">1ansible.aaa'
192.168.231.7 | SUCCESS | rc= >>
[root@localhost .ssh]# ansible all -a 'echo "333">1ansible.aaa'
192.168.231.7 | SUCCESS | rc= >>
>1ansible.aaa
[root@localhost ~]# ansible all -m fetch -a 'src=/root/guess.sh dest=/root'
#owner mode
#fetch 只能拉取文件,不能拉取目录或者匹配通配符
192.168.231.7 | SUCCESS => {
"changed": true,
"checksum": "656427f4ebbcbb4745fa80fbffc456b88378c4ed",
"dest": "/root/192.168.231.7/root/guess.sh",
"md5sum": "435fe28b40aa89a35f9dc63c7063b1a7",
"remote_checksum": "656427f4ebbcbb4745fa80fbffc456b88378c4ed",
"remote_md5sum": null
}
[root@localhost ~]# ansible all -m file -a 'name=/root/yxh state=directory'
#file模块包括对文件夹的操作
#file不能删除使用通配符批量删除目录下的文件,只能删除整个目录
[root@localhost ~]# ansible all -m shell -a 'rm -fr /data/*'

YAML语法简介

使用#号注释代码

缩进必须是统一的,不能空格和tab混用

缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的

YAML文件内容和Linux系统大小写判断方式保持一致,是区别大小写的,k/v的值均需大小写敏感

k/v的值可同行写也可换行写,同行使用:分隔

v可是个字符串,也可是另一个列表

一个完整的代码块功能需最少元素需包括 name: task

一个name只能包括一个task

YAML文件扩展名通常为yml或yaml

List:   列表,其所有元素均使用  "-"   打头

Dictionary:   字典,通常由多个key与value构成      skill: Elite

也可以将key:value放置于{}中进行表示,   用,分隔多个key:value    {name: Example Developer, job: Developer, skill: Elite}

YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构.

其结构(Structure)通过空格来展示,序列(Sequence)里的项用 "-" 来代表,Map里的键值对用":"分隔

children:       children表示一个序列,   name 和 age 表示序列中的一个数据项

-   name: Jimmy Smith

age: 17

-   name: Jenny Smith

age 13

Playbook介绍

playbook是由一个或多个  "play" 组成的列表

play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色.

所谓task无非是调用ansible的一个module. 将多个play组织在一个playbook中,即可以让它们联同起来按事先编排的机制顺序执行

playbook变量介绍

1.普通(主机)变量   在inventory中定义主机时为其添加主机变量以便于在playbook中使用

[websrvs]

192.168.99.101   http_port=8080  hname=www1

192.168.99.102   http_port=80       hname=www2

2.组变量    组变量是指赋予给指定组内所有主机上的在playbook中可用的变量

[websrvs]

www1.magedu.com

www2.magedu.com

[websrvs:vars]

ntp_server=ntp.magedu.com

nfs_server=nfs.magedu.com

3.命令行指定变量

ansible  websvrs  –e http_port=8000 –m hostname  –a  'name={{ hname }}{{ mark }}{{ http_port }}'

4.在playbook中定义

vars:

- var1: value1

- var2: value2

5.单独使用一个yaml文件定义所有的变量

vi    myvars.yaml

var1: httpd
              var2: vsftpd
              var3: nginx

vi   playbook.yaml

vars_files:

-  myvars.yaml

task:

- name:  install {{  var1  }} package

6.在role中定义

变量的优先级

1. 通过命令行指定变量,优先级最高            ansible-playbook –e varname=value

2. 在playbook中定义的变量

3.普通(主机)变量: 主机组中主机单独定义,优先级高于公共变量

4.公共(组)变量: 针对主机组中所有主机定义统一变量   优先级最低

变量的调用方式

通过  {{ variable_name }}  调用变量,且变量名前后必须有空格,有时用  "{{ variable_name }}" 才生效

yaml文件中的缩进是非常重要的,同一级别的必须写到同一个缩进,否则程序无法运行
yaml里面的task是按照次序依次执行,不会出现执行顺序不同的问题
一个name只能包含一个task(命令模块)
#按照指定的task的顺序依次执行
#ansible的task中相对路径是相对于当前yaml文件的所在目录
[root@localhost playbook]# ansible-playbook test2.yaml PLAY [webservers] *************************************************************************************** TASK [Gathering Facts] **********************************************************************************
ok: [192.168.231.7] TASK [create new file] **********************************************************************************
changed: [192.168.231.7] TASK [create new user] **********************************************************************************
changed: [192.168.231.7] TASK [copy file] ****************************************************************************************
changed: [192.168.231.7] TASK [start httpd] **************************************************************************************
changed: [192.168.231.7] PLAY RECAP **********************************************************************************************
192.168.231.7 : ok= changed= unreachable= failed= [root@localhost playbook]# ansible-playbook test2.yaml --list-tasks playbook: test2.yaml play # (webservers): webservers TAGS: []
tasks:
create new file TAGS: []
create new user TAGS: []
copy file TAGS: []
start httpd TAGS: []
[root@yxh6 conf]# netstat -ntlp | grep httpd
tcp ::: :::* LISTEN /httpd ---
- hosts: webservers
remote_user: root tasks:
- name: install httpd pagckage
yum: name=httpd
tags: installhttpd
- name: copy conf file action
copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
notify: restart httpd service
- name: start httpd service
service: name=httpd state=started enabled=yes
tags: rshttpd

playbook执行顺序

#tags inshttpd,rshttpd
#通过ansible命令单独执行指定标签的task action命令,而不是执行整个playbook.
#多个action可以共用一个标签
[root@localhost playbook]# ansible-playbook -t inshttpd,rshttpd handler.yaml ---
- hosts: webservers
remote_user: root tasks:
- name: install httpd pagckage
yum: name=httpd
tags: installhttpd
- name: copy conf file action
copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
notify: restart httpd service
- name: start httpd service
service: name=httpd state=started enabled=yes
tags: rshttpd

playbook标签

#ansible收集主机信息,同时也可以做为变量传递给playbook中
[root@localhost playbook]# ansible webservers -m setup
[root@localhost playbook]# ansible webservers -m setup -a 'filter=*address*'
#playbook中自定义变量{{ bialiangmin }}
tasks:
- name: install {{ packname }} pagckage
yum: name={{ packname }}
tags: installhttpd #执行的时候传递变量值
[root@localhost playbook]# ansible-playbook -e 'packname=vsftpd' bianliang.yaml
[root@localhost playbook]# ansible-playbook -e 'packname=vsftpd packname2=redis' bianliang.yaml PLAY [webservers] *************************************************************************************** TASK [Gathering Facts] **********************************************************************************
ok: [192.168.231.6] TASK [install vsftpd pagckage] *************************************************************************
changed: [192.168.231.6] PLAY RECAP **********************************************************************************************
192.168.231.6 : ok= changed= unreachable= failed= 变量使用的第二种方式:
- hosts: webservers
remote_user: root
vars:
- packname: httpd
- packname2: vsftpd 变量使用的第三种方式
在/etc/ansible/hosts中定义

playbook变量

 ---
- hosts: webservers
remote_user: root tasks:
- name: install httpd pagckage
yum: name=httpd
tags: installhttpd
- name: copy conf file action
copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
notify: restart httpd service
- name: start httpd service
service: name=httpd state=started enabled=yes
tags: rshttpd #handlers必须和notify配合使用,两者不能分开使用
handlers:
- name: restart httpd service
service: name=httpd state=restarted
- name: testaction
shell: ls

playbook案例

运维自动化ansible基础的更多相关文章

  1. 自动化运维工具-Ansible基础

    目录 自动化运维工具-Ansible基础 什么是Ansible 同类型软件对比 Ansible的功能及优点 Ansible的架构 Ansible的执行流程 安装Ansible ansible配置文件 ...

  2. 自动化运维工具-Ansible基础及Ansible Ad-Hoc

    第58章 Ansible 目录 第58章 Ansible 一.Ansible基础概述 1.1)什么是Ansible 1.2)Ansible可以完成哪些功能呢?1.3)Ansible特点 1.4)Ans ...

  3. 运维自动化-Ansible

    前言 天天说运维,究竟是干什么的?先看看工作流程呗.一般来说,运维工程师在一家企业里属于个位数的岗位,甚至只有一个.面对生产中NNN台服务器,NN个人员,工作量也是非常大的.所以嘛,图中的我好歹也会配 ...

  4. 自动化运维工具Ansible详细部署 (转载)

    自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...

  5. Ansible运维自动化工具19个常用模块使用实例【转】

    一.模块列表 1.setup 2.ping 3.file 4.copy 5.command 6.shell 7.script 8.cron 9.yum 10.service 11.group 12.u ...

  6. CentOS7Linux中自动化运维工具Ansible的安装,以及通过模块批量管理多台主机

    使用自动化运维工具Ansible集中化管理服务器 Ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet ...

  7. 自动化运维工具Ansible介绍

    一个由 Python 编写的强大的配置管理解决方案.尽管市面上已经有很多可供选择的配置管理解决方案,但他们各有优劣,而 ansible 的特点就在于它的简洁. 让 ansible 在主流的配置管理系统 ...

  8. 运维自动化工具ansible

    企业级自动化运维工具应用实战ansible 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出 ...

  9. 自动化运维工具Ansible

    一.简介 当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务 ...

随机推荐

  1. [Python] 03 - Lists, Dictionaries, Tuples, Set

    Lists 列表 一.基础知识 定义 >>> sList = list("hello") >>> sList ['h', 'e', 'l', ' ...

  2. C++/MFC-线程优先级

    转载: https://blog.csdn.net/qwdpoiguw/article/details/72830426 一.线程优先级(Thread priority ) 简单的说就是(线程)的优先 ...

  3. ALTER SEQUENCE 导致 REPLICAT 延时

    1.查看OGG线程状态 GGSCI (klcoredb-node1) 46> info all Program Status Group Lag at Chkpt Time Since Chkp ...

  4. linux命令之间的分号,&&, ||

    在用linux命令时候, 我们经常需要同时执行多条命令, 那么命令之间该如何分割呢? 分号: 顺序地独立执行各条命令, 彼此之间不关心是否失败, 所有命令都会执行. &&  : 顺序执 ...

  5. Excel制作考勤管理

    一.在选择年月 在选择年月的下拉菜单,有Excel中的——数据——数据有效性——序列——来源(用逗号分开) 二.在Excel中显示今天的时间及时间   函数代码:(="今天是:"& ...

  6. 【2017.12.12】deepin安装U盘制作,支持 BIOS+UEFI,deepin_Recovery+Win PE

    U盘要求为 FAT32,MBR分区表 如果需要放 4GB 大文件,可以分两个分区,第一分区FAT32格式,放启动相关文件,第二个分区用 NTFS 格式,放其它资料. 最新 Win10 支持显示 U盘 ...

  7. 前端基础开发之HTML

    简介:                                                                                1.HTML是什么? htyper ...

  8. 在powerDesigner中通过SQL生成pdm

    在项目需求分析的阶段,通常需要画数据库表的pdm图.有时候会直接画pdm来设计表,有时候是通过其他方式,如用纸和笔去画……当数据库中的表已经建立好了,怎么把数据库中的表导成SQL形式,然后生成pdm图 ...

  9. [No0000E6]C# 判断与循环

    判断语句 语句 描述 if 语句 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成. if...else 语句 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为 ...

  10. CSS 小技巧

    CSS 小技巧 一.边框内圆角 我们在设计例如按钮等控件的时候,会遇到这样的设计:只有内侧有圆角,而边框或者描边的四个角还是保持直角的形状,用以下代码可以轻松的实现. #wrapper { width ...