ansible学习笔记二
Ad-Hoc命令:
所谓Ad-Hoc,简而言之是"临时命令",英文中作为形容词有"特别的,临时"的含义。Ad-Hoc只是官方对Ansible命令的一种称谓。
从功能上讲,Ad-Hoc是相对于Ansible-playbook而言的,Ansible提供两种完成任务方式:一种是Ad-Hoc命令集,即ansible,另一种就是Ansible-playbook了,即命令Ansible-playbook。前者更注重于解决一些简单的或者平时工作中临时遇到的任务,相当于Linux系统命令行下的Shell命令,后者更适合与解决复杂或需固化下来的任务,相当于Linux系统的Shell Scripts。
参考博客:
Ansible 系列之 Ad-Hoc介绍及使用 - 飞走不可(博客园)
一、模块:
1、yum
1.内容补充
1.yum和rpm的区别:
rpm的全称叫redhat package manager,包管理工具
yum可以解决安装包的依赖关系
2.yum源配置
[epel] # [名字]
name=Extra Packages for Enterprise Linux 7 - $basearch #描述信息
baseurl=http://mirrors.aliyun.com/epel/7/$basearch # yum源地址
failovermethod=priority
enabled=1 # 当前yum源是否启用,1代表启用,0代表不启用
gpgcheck=0 # 用来检测gpgkey文件,1代表检测,0表示不检测
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
3.安装包组
yum gruoplist #查询包组信息
yum groupinstall -y "包组名称" #下载安装包组
2.模块使用
- disable_gpg_check # 禁止检查gpgcheck
- disablerepo # 禁用repo源
- enablerepo #启用repo源
- name #包的名称
- state #remove卸载 install安装
ansible web -m yum -a 'name=python2-pip' # 安装python2-pip
ansible web -m yum -a 'name=python2-pip,redis' #用来安装多个包
ansible web -m yum -a 'name="@Development Tools"' # 用来安装包组
2、pip
1.内容回顾
pip freeze > requirements.txt #导出安装的软件包
pip list #列出当前Python环境下的软件包
pip install -r requirements.txt #安装requirements.txt里面所有的依赖包
2.模块使用
chdir # 切换目录
name # 包名
virtualenv # 虚拟环境
ansible web -m pip -a "name=flask"
3、cron
命令格式
* * * * * job 分 时 日 月 周
1 * * * * job 每小时的第一分钟
2/* * * * * job 每隔2分钟做某件事
2 2-18 * * * job 从2点到18点的第二分钟
1 2 * * 0-7 job 星期取值范围是0-7
crontab -l #列出所有crontab
crontab -e #编辑
crontab -r #删除
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
模块信息:
day
hour
minute
weekday
month
job #任务
user #用户
name #描述信息,默认是None
state # absent删除
disabled #是否禁用 =yes禁用
ansible web -m cron -a "minute=26 job='touch /tmp/alex.txt' name=touchfile"
ansible web -m cron -a "minute=26 job='touch /tmp/alex.txt' name=touchfile disabled=yes" # 表示禁用crontab,禁用的时候不可以直接指定名称
ansible web -m cron -a "name=touchfile state=absent" # 删除crontab,可以直接指定名称进行删除
4、service
内容回顾
# centos6
service redis start|stop|status|restart|reload #Redis服务开启关闭等
chkconfig redis on #设置Redis开机自启动
# centos7
systemctl status|start|stop|restart|reload redis
systemctl enable redis #开机自启动
ss -tnlp # 查看端口 = netstat -tunlp
ps -ef # 查看进程
模块使用
name # 包名
enabled # 开机自启动
state # started|stopped|reloaded|restarted
ansible web -m service -a 'name=redis state=started enabled=yes' #启动redis,并设置开机自启动
ansible web -m service -a 'name=redis state=stopped' #关闭redis
5、user
内容回顾
用户分为 管理员 和 普通用户
- 管理员: uid=0(root) gid=0(root)属组 groups=0(root)附加组
- 普通用户分为 可登录用户 和 不可登录用户(系统用户)
- 不可登录用户(系统用户),如mysql,redis,nginx等,shell=/sbin/nologin
- centos7:1-999
- centos6:1-499
- 可以登录用户
- centos7:1000-65535
- centos6:500-65535
$ useradd -h
-d, --home-dir #HOME_DIR 指定家目录
-g, --gid GROUP #指定gid
-G, --groups GROUPS #指定用户的附加组
-r, --system #创建系统用户,创建时uuid是倒序排列
-s, --shell #SHELL 登录shell
-u, --uid UID #指定uid
vi /etc/passwd #查看创建的用户名和UUID等信息
useradd -d /opt/alexsb2 alexsb2 #创建用户时指定家目录
userdel 用户名 #删除用户但不删除家目录
userdel -r alexsb # 删除用户并删除用那个的家目录
模块使用
name #用户名
group #组名,属组gid
groups # 附加组groups
home # 家目录位置
remove #删除用户的家目录
shell # 用户登录的shell
system # 系统用户
uid # 用户id
ansible db -m user -a "uid=500 system=yes groups=root name=mysql" # 创建mysql用户,指定用户为系统用户,并指定uid为500,指定附加组为root
ansible db -m user -a "uid=3000 groups=mysql name=shujuku home=/opt/shujuku shell=/sbin/nologin" # 创建普通用户,并制定用户的家目录和登录shell(不可登录)以及uid,附加组
ansible db -m user -a "name=canglaoshi remove=yes state=absent" # 删除用户
6、group
内容回顾
用户组分为 管理员组 和 普通用户组
管理员组的gid为0
普通用户组gid从999开始递减
$ groupadd -h
-g gid
-r 系统用户组
# 查看用户组:
vi /etc/group
tail -1 /etc/group
模块使用
gid #组的id
name #组的名字
state #状态
system #系统组
ansible web -m group -a "name=alex10" # 用来创建用户组
ansible web -m group -a "name=alex20 system=yes" # 用来创建系统组
ansible web -m group -a "name=alex10 state=absent" # 删除用户组
7、需求
创建wusir20用户组,并指定为系统组
ansible -m group -a "name=wusir20 system=yes"
创建alex30用户,并制定家目录为/opt/alex30,登录shell为/sbin/nologin,并指定附加组为wusir20
ansible -m user -a "name=alex30 home=/opt/alex30 shell=/sbin/nologin groups=wusir20"
复制/etc/fstab文件到/tmp/f
ansible -m copy -a "src=/etc/fstab dest=/tmp/f"
创建/data目录
ansible -m file -a "path=/data state=directory"
安装nginx并启动它,并设置成开机自启动
ansible -m yum -a "name=nginx"
ansible -m service -a "name=nginx state=started enabled=yes"
二、ansible-playbook
简单来说,playbooks 是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署.
Playbooks 可用于声明配置,更强大的地方在于,在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤.并且可以同步或异步的发起任务.
通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列to-do-list
1、yaml格式
格式:
字典:key:value
列表:用-表示
后缀名:.yaml 或者 .yml
YAML 认为数据由以下三种结构组成:(每个文档由三种结构混合组成)
标量 (相当于数据类型)
序列 (相当于数组和列表)
键值表(相当于 Map 表)
2、playbook 剧本
[root@centos7 ~]#: ansible-playbook -h
Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
Runs Ansible playbooks, executing the defined tasks on the targeted hosts.
Options:
--ask-vault-pass ask for vault password
-C, --check don't make any changes; instead, try to predict some
of the changes that may occur
-D, --diff when changing (small) files and templates, show the
differences in those files; works great with --check
-e EXTRA_VARS, --extra-vars=EXTRA_VARS
set additional variables as key=value or YAML/JSON, if
filename prepend with @
--flush-cache clear the fact cache for every host in inventory
--force-handlers run handlers even if a task fails
-f FORKS, --forks=FORKS
specify number of parallel processes to use
(default=5)
-h, --help show this help message and exit
-i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY
-C, --check # 检查但是不做真正改变
-f FORKS, --forks=FORKS # 指定并发
--list-hosts # 列出符合条件的主机
-e EXTRA_VARS, --extra-vars=EXTRA_VARS # 传值
单个tasks
- hosts: web
remote_user: root
tasks:
- name: createuser
user: name=alex30
多个tasks
- hosts: web
remote_user: root
tasks:
- name: createuser
user: name=alex40
- name: creategroup
group: name=alex40
补充:ansible-playbook的特点:幂等性 - 不管执行多少次,得到的结果都是一样的
3、传参
playbook文件:
- hosts: web
remote_user: root
tasks:
- name: create{{ user}}
user: name={{user}}
传参方式:
第一种传参方式: -e
ansible-playbook -e user=wusir20 p3.yml
第二种传参方式: hosts文件的host后面直接指定,可以是不同的值
[db]
10.0.0.145 user=alex11
10.0.0.144 user=alex12
第三种传参方式: hosts文件里面写【组名:vars】
[db:vars]
user=alex71
第四种传参方式: playbook文件里面写vars
- hosts: db
remote_user: root
vars:
- user: alex51
tasks:
- name: create{{ user}}
user: name={{user}}
第五种传参方式: 通过register注册,直接用.stdout来获取值
- hosts: db
remote_user: root
tasks:
- name: installbc
yum: name=bc
- name: sum
shell: echo 20+21|bc
register: sum
- name: echo
shell: echo {{sum}} > /tmp/sum.txt
- name: createuser
user: name=alex{{sum.stdout}}
优先级
-e > playbook > hosts文件
ansible学习笔记二的更多相关文章
- ansible学习笔记一
ansible学习笔记一 参考博客: ansible学习 - 51CTO博客 一.安装 1 .下载epel源 wget -O /etc/yum.repos.d/epel.repo http://mir ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- JMX学习笔记(二)-Notification
Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
随机推荐
- (二)flask-sqlalchemy基本操作
对数据库基本操作 在Flask-SQLAlchemy中,插入.修改.删除操作,均由数据库会话管理. 会话用 db.session 表示.在准备把数据写入数据库前,要先将数据添加到会话中然后调用 db. ...
- 模块---hashlib、configparse、logging
一.hashlib模块 hashlib模块介绍:hashlib这个模块提供了摘要算法,例如 MD5.hsa1 摘要算法又称为哈希算法,它是通过一个函数,把任意长度的数据转换为一个长度固定的数据串,这个 ...
- session会话对象
一.session会话对象介绍: 会话对象让你能够跨请求保持某些参数,它也会在同一个session实例发出的所有请求之间保持cookie. 二.步骤 1.对session对象进行一次实例化 2.进行登 ...
- (点到线段的最短距离)51nod1298 圆与三角形
1298 圆与三角形 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 收起 ...
- linux driver ------ platform模型,驱动开发分析
一.platform总线.设备与驱动 在Linux 2.6 的设备驱动模型中,关心总线.设备和驱动3个实体,总线将设备和驱动绑定.在系统每注册一个设备的时候,会寻找与之匹配的驱动:相反的,在系统每注册 ...
- File的创建
package cn.lijun.demo3; import java.io.File; import java.io.IOException; // 创建文件功能 如果文件已经存在 不再创建 pub ...
- PEP8规范
目录 一 代码编排 二 文档编排 三 空格使用 四 注释 五 文档描述 六 命名规范 七 编码建议 代码编排 1缩进,4个空格,不用tab键(因为可能不同系统tab的空格数不一定) 2每行最大长度79 ...
- 解析:为什么程序员应该有一台Mac个人电脑?
对于开发来讲,使用Mac电脑的好处,下面简单列举几个: 首先,macOS很安全和稳定,Mac 系统的底层是最原始的unix操作系统,很多大型的银行和军工企业都是这个操作系统,安全性很高,基本不需要安装 ...
- Python中集合的操作
Python集合的基本详情 集合是无序的 集合是可变数据类型 集合属于不可哈希范围 集合自动去重 集合的操作 set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} ...
- 网络编程基础【day10】:我是一个进程(三)
本节内容 1.引子 2.进程的诞生 3.线程 4.争吵 一.引子 我听说我的祖先们生活在专用计算机里, 一生只帮助人类做一件事情,比说微积分运算 了.人口统计了 .生成密码.甚至通过织布机印花 ! ...