Ad-Hoc命令:
所谓Ad-Hoc,简而言之是"临时命令",英文中作为形容词有"特别的,临时"的含义。Ad-Hoc只是官方对Ansible命令的一种称谓。
从功能上讲,Ad-Hoc是相对于Ansible-playbook而言的,Ansible提供两种完成任务方式:一种是Ad-Hoc命令集,即ansible,另一种就是Ansible-playbook了,即命令Ansible-playbook。前者更注重于解决一些简单的或者平时工作中临时遇到的任务,相当于Linux系统命令行下的Shell命令,后者更适合与解决复杂或需固化下来的任务,相当于Linux系统的Shell Scripts。
参考博客:
一、模块:
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=priorityenabled=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-pipansible 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-7crontab -l #列出所有crontabcrontab -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
模块信息:
dayhourminuteweekdaymonthjob #任务user #用户name #描述信息,默认是Nonestate # 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
内容回顾
# centos6service redis start|stop|status|restart|reload #Redis服务开启关闭等chkconfig redis on #设置Redis开机自启动# centos7systemctl status|start|stop|restart|reload redissystemctl enable redis #开机自启动 ss -tnlp # 查看端口 = netstat -tunlpps -ef # 查看进程
模块使用
name # 包名enabled # 开机自启动state # started|stopped|reloaded|restartedansible 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 #组名,属组gidgroups # 附加组groupshome # 家目录位置remove #删除用户的家目录shell # 用户登录的shellsystem # 系统用户uid # 用户id ansible db -m user -a "uid=500 system=yes groups=root name=mysql" # 创建mysql用户,指定用户为系统用户,并指定uid为500,指定附加组为rootansible 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/grouptail -1 /etc/group
模块使用
gid #组的idname #组的名字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 或者 .ymlYAML 认为数据由以下三种结构组成:(每个文档由三种结构混合组成) 标量 (相当于数据类型) 序列 (相当于数组和列表) 键值表(相当于 Map 表)
2、playbook 剧本
[root@centos7 ~]#: ansible-playbook -hUsage: 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}}
传参方式:
第一种传参方式: -eansible-playbook -e user=wusir20 p3.yml第二种传参方式: hosts文件的host后面直接指定,可以是不同的值[db]10.0.0.145 user=alex1110.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文件