CICD(三)Ansible常用模块以及案例
时间:2022-07-25
本文章向大家介绍CICD(三)Ansible常用模块以及案例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Ansible常用模块以及案例
常用模块
- file模块: 对目标主机创建目录或者文件,并赋予权限
- name: create a file
file: 'path=/root/aaa.txt state=touch mode=0755 owner=foo group=foo'
- copy模块:实现ansible到目标机之间的文件传输
- name: copy a file
copy: 'remote_src=no src=roles/testbiox/foo.sh dest=/root/foo.sh mode=0644 force=yes'
- stat模块: 获取远程文件的状态信息
- name: check fool.sh exists
stat: 'path=/root/fool.sh'
register: script_stat
- debug模块: 打印执行输出
- debug: msg=fool.sh exists
when: script_stat.stat.exists
- command/shell: 用来执行shell主机命令
- name: run a script
command: "sh /root/foo.sh"
- name: run the scripts
shell: "echo 'test' > /root/foo.txt"
- template: 实现ansible服务端到目标主机的jinja2模板传送
- name: transport template jinja2
template: src=roles/testbox/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf
- package: 调用yum/apt命令
- name: yum install package
yum: pkg=nginx state=latest
- name: yum install package
apt: pkg=nginx state=latest
- service模块: 管理init服务
- name: start nginx service
service: name=nginx state=started
案例
综合上述的所有模块
- 目标机的初始化工作 [root@centos7-node5 ~]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm [root@centos7-node5 ~]# useradd foo [root@centos7-node5 ~]# useradd deploy [root@centos7-node5 ~]# mkdir /etc/nginx
- ansible主机的工作 [root@centos7-node3 ~]# su - deploy [deploy@centos7-node3 ~]$ source .py3-a2.5-env/bin/activate (.py3-a2.5-env) [deploy@centos7-node3 ~]$ source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q (.py3-a2.5-env) [deploy@centos7-node3 ~]$ cd test_playbooks/ (.py3-a2.5-env) [deploy@centos7-node3 test_playbooks]$ mkdir roles/testbox/files (.py3-a2.5-env) [deploy@centos7-node3 test_playbooks]$ vim roles/testbox/files/foo.sh echo "test scripts" (.py3-a2.5-env) [deploy@centos7-node3 test_playbooks]$ vim inventory/testenv #追加 server_name=localhost port=80 user=deploy work_process=2 max_open_file=65505 root=/www
- playbook
(.py3-a2.5-env) [deploy@centos7-node3 test_playbooks]$ mkdir roles/testbox/tempaltes
(.py3-a2.5-env) [deploy@centos7-node3 test_playbooks]$ vim roles/testbox/tempaltes/nginx.conf.j2
user {{ user }};
worker_processes {{ worker_processes }};
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections {{ max_open_file }};
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
server {
listen {{ port }} default_server;
server_name {{ server_name }};
location / {
root {{ root }};
index index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
- yaml文件
(.py3-a2.5-env) [deploy@centos7-node3 ~]$ vim test_playbooks/roles/testbox/tasks/main.yaml
- name: Print server name and user to remote testbox
shell: "echo 'Currently {{ user }} is logging {{ servername }}' >> {{output}}"
- name: create a file
file: 'path=/root/foo.txt state=touch mode=0755 owner=foo group=foo'
- name: copy a file to remote
copy: 'remote_src=no src=roles/testbox/files/foo.sh dest=/root/foo.sh mode=0644 force=yes'
- name: check if foo.sh exists
stat: 'path=/root/foo.sh'
register: script_stat
- debug: msg="foo.sh exists"
when: script_stat.stat.exists
- name: run the script
command: 'sh /root/foo.sh'
- name: write the nginx config file
template: src=roles/testbox/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf
- name: yum install nginx latest
yum: pkg=nginx state=latest
- name: service enable nginx
service: name=nginx state=started
- 执行任务
(.py3-a2.5-env) [deploy@centos7-node3 test_playbooks]$ ansible-playbook -i inventory/testenv deploy.yml
- 在Win10上是用Anaconda搭建TensorFlow开发环境
- A Gentle Introduction to Autocorrelation and Partial Autocorrelation (译文)
- A Gentle Introduction to Applied Machine Learning as a Search Problem (译文)
- 技术创新,基于 React Native 的开源项目 | 码云周刊第 17 期
- How to Use the TimeDistributed Layer for Long Short-Term Memory Networks in Python 译文
- ssctf2017_WriteUp
- CENTOS7.2安装CDH5.10和Kudu1.2(一)
- Docker镜像管理
- 360春秋杯3道web题的简单分析
- Vue 2.0 学习总结,精华全在这里了
- 25.2 安装Docker
- 使用JDBC向Kudu表插入中文字符-cast的秘密
- 使用JDBC向Kudu表插入中文字符-双引号的秘密
- Yarn的JobHistory目录权限问题导致MapReduce作业异常
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python随机打乱列表中的元素
- Python面试题汇总
- lldb 入坑指北(3) - 打印 c++ 实例的虚函数表
- 一文让你彻底搞懂`__str__`和`__repr__`?
- lldb 入坑指北(1) - 给Xcode批量添加启用&禁用断点功能
- Xcode 中的 Workspace、Project、Target 和 Scheme
- 学习Python一年,这次终于弄懂了浅拷贝和深拷贝
- 为速度而生的构建系统 - Ninja
- Python面试题:字符串连接
- Python面试突击
- 我半夜爬了严选的女性文胸数据,发现了惊天秘密
- 二分查找(Python实现)
- 图解JavaScript——代码实现【2】(重点是Promise、Async、发布/订阅原理实现)
- 编译器 bug 系列(1)
- 面试高频:反转链表