ansible如何与django结合(2023年最新整理)

导读:今天首席CTO笔记来给各位分享关于ansible如何与django结合的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

如何在django中使用ansible-playbook命令执行yaml 文件

一、安装

1、安装第三方epel源

centos 5的epel

rpm -ivh

rpm -ivh

17:01:30 # cat /etc/issue

CentOS release 6.5 (Final)

Kernel \r on an \m

由于是6版本所以安装6的epel

yum install ansible

如果需要自定义module或者想阅读源码、使用最新版本,可以去github里下载源码

git clone

17:22:08 # cd /etc/ansible/

root@ip-10-10-10-10:/etc/ansible

17:23:27 # ll

total 12

-rw-r--r-- 1 root root 5113 Dec 29 03:00 ansible.cfg

-rw-r--r-- 1 root root 965 Dec 29 03:00 hosts

其中ansible.cfg是配置文件,hosts是管理主机信息

17:24:44 # cat hosts

172.17.0.2:49154

172.17.0.4:49155

[zabbix]

172.17.0.2:49154

172.17.0.4:49155

[vpn]

172.17.0.10

16:20:57 # ansible 127* -m ping

SSH password:

127.0.0.1 | success {

"changed": false,

"ping": "pong"

}

root@ip-10-10-10-10:/etc/ansible

16:21:05 # ansible 172* -m ping

SSH password:

172.17.0.5 | success {

"changed": false,

"ping": "pong"

}

172.17.0.4 | success {

"changed": false,

"ping": "pong"

}

172.17.0.2 | success {

"changed": false,

"ping": "pong"

}

如果你有多台服务器的话,想并发运行,可以使用-f参数,默认是并发5

11:30:35 # ansible vpn -m shell -a "echo $TERM" -u test --private-key=denglei -K

SSH password:

sudo password [defaults to SSH password]:

172.17.0.10 | success | rc=0

xterm

11:30:44 # ansible vpn -m copy -a "src=/tmp/server dest=/tmp/server" -u test --private-key=denglei -K

SSH password:

sudo password [defaults to SSH password]:

172.17.0.10 | success {

"changed": true,

"dest": "/tmp/server",

"gid": 505,

"group": "test",

"md5sum": "e8b32bc4d7b564ac6075a1418ad8841e",

"mode": "0664",

"owner": "test",

"size": 7,

"src": "/home/test/.ansible/tmp/ansible-1402630447.45-253524136818424/source",

"state": "file",

"uid": 503

}

去客户端查看文件是否传输过来

11:34:57 # ansible vpn -m shell -a "ls -l /tmp/" -u test --private-key=denglei -K

SSH password:

sudo password [defaults to SSH password]:

172.17.0.10 | success | rc=0

total 76

-rw-r--r-- 1 root root 41692 May 21 13:02 config

-rw-r--r-- 1 root root 1228 Jun 12 18:24 install_pptpd_vpn.sh

-rw-rw-r-- 1 test test 7 Jun 13 19:33 server

-rw-r--r-- 1 root root 82 Jun 12 18:21 test.log

-rw-r--r-- 1 root root 290 Jun 12 18:21 test.sh

-rw-r--r-- 1 root root 2444 Apr 28 2012 vpn_centos6.sh

-rw------- 1 root root 727 Jun 10 18:21 yum_save_tx-2014-06-10-18-21UrqDAp.yumtx

-rw-rw-r-- 1 zabbix zabbix 3124 Jun 12 21:32 zabbix_agentd.log

-rw-rw-r-- 1 zabbix zabbix 5 Jun 12 21:32 zabbix_agentd.pid

11:35:09 # ansible vpn -m shell -a "cat /tmp/server" -u test --private-key=denglei -K

SSH password:

sudo password [defaults to SSH password]:

172.17.0.10 | success | rc=0

server

还有另外一个模块file,可以修改用户与权限

13:50:07 # ansible vpn -m shell -a "ls -l /tmp/server" -u test --private-key=denglei -K

SSH password:

sudo password [defaults to SSH password]:

172.17.0.10 | success | rc=0

-rw-rw-r-- 1 test test 7 Jun 13 19:33 /tmp/server

server文件是664权限,用户与组都是test

13:51:17 # ansible vpn -m file -a "dest=/tmp/server mode=755 owner=root group=root" -u test --private-key=denglei -K

SSH password:

sudo password [defaults to SSH password]:

172.17.0.10 | success {

"changed": true,

"gid": 0,

"group": "root",

"mode": "0755",

"owner": "root",

"path": "/tmp/server",

"size": 7,

"state": "file",

"uid": 0

}

root@ip-10-10-10-10:/etc/ansible

13:51:31 # ansible vpn -m shell -a "ls -l /tmp/server" -u test --private-key=denglei -K

SSH password:

sudo password [defaults to SSH password]:

172.17.0.10 | success | rc=0

-rwxr-xr-x 1 root root 7 Jun 13 19:33 /tmp/server

14:20:30 # ansible vpn -m yum -a "name=nmap state=installed" -u test --private-key=denglei -K

SSH password:

sudo password [defaults to SSH password]:

172.17.0.10 | success {

"changed": true,

"msg": "",

"rc": 0,

"results": [

"Loaded plugins: fastestmirror, security\nLoading mirror speeds from cached hostfile\n * epel: mirrors.hust.edu.cn\nSetting up Install Process\nResolving Dependencies\n-- Running transaction check\n--- Package nmap.x86_64 2:5.51-3.el6 will be installed\n-- Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n nmap x86_64 2:5.51-3.el6 Base 2.7 M\n\nTransaction Summary\n================================================================================\nInstall 1 Package(s)\n\nTotal download size: 2.7 M\nInstalled size: 9.7 M\nDownloading Packages:\nRunning rpm_check_debug\nRunning Transaction Test\nTransaction Test Succeeded\nRunning Transaction\n\r Installing : 2:nmap-5.51-3.el6.x86_64 1/1 \n\r Verifying : 2:nmap-5.51-3.el6.x86_64 1/1 \n\nInstalled:\n nmap.x86_64 2:5.51-3.el6 \n\nComplete!\n"

]

}

三、playbook配置管理

A.进行一下shell模块操作,测试删除文件

先查看一下客户端的server-test是否存在

[root@puppet ansible]# ansible vpn -m shell -a "ls -l /tmp/server-test" -u test --private-key=/root/denglei -k

SSH password:

172.17.0.10 | success | rc=0

-rw-rw-r-- 1 test test 7 Jun 14 00:37 /tmp/server-test

然后写一个删除的playbook

[root@puppet ansible]# cat test.yml

---

- hosts: vpn

remote_user: test

tasks:

- name: delete /tmp/server-test

shell: rm -rf /tmp/server-test

[root@puppet ansible]# ansible-playbook test.yml --private-key=/root/denglei -k

[WARNING]: The version of gmp you have installed has a known issue regarding

timing vulnerabilities when used with pycrypto. If possible, you should update

it (ie. yum update gmp).

SSH password:

PLAY [vpn] ********************************************************************

GATHERING FACTS ***************************************************************

ok: [172.17.0.10]

TASK: [delete /tmp/server-test] ***********************************************

changed: [172.17.0.10]

PLAY RECAP ********************************************************************

172.17.0.10 : ok=2 changed=1 unreachable=0 failed=0

[root@puppet ansible]# ansible vpn -m shell -a "ls -l /tmp/server-test" -u test --private-key=/root/denglei -k

SSH password:

172.17.0.10 | FAILED | rc=2

ls: cannot access /tmp/server-test: No such file or directory

B.进行一下template模块操作,测试文件传输

[root@puppet ansible]# cat copy.yml

---

- hosts: vpn

remote_user: test

tasks:

- name: copy local server to client /tmp/server-test

template: src=/tmp/server dest=/tmp/server-test

[root@puppet ansible]# ansible-playbook copy.yml --private-key=/root/denglei -k

[WARNING]: The version of gmp you have installed has a known issue regarding

timing vulnerabilities when used with pycrypto. If possible, you should update

it (ie. yum update gmp).

SSH password:

PLAY [vpn] ********************************************************************

GATHERING FACTS ***************************************************************

ok: [172.17.0.10]

TASK: [copy local server to client /tmp/server-test] **************************

changed: [172.17.0.10]

PLAY RECAP ********************************************************************

172.17.0.10 : ok=2 changed=1 unreachable=0 failed=0

[root@puppet ansible]# ansible vpn -m shell -a "ls -l /tmp/server-test" -u test --private-key=/root/denglei -k

SSH password:

172.17.0.10 | success | rc=0

-rw-rw-r-- 1 test test 7 Jun 14 17:07 /tmp/server-test

C.使用service模块,测试一下服务重启

ansible总结

ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台,它是基于python语言,由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的.

ansible被定义为配置管理工具,配置管理工具通常具有以下功能:

常用的自动化运维工具技术特性比较:

ansible系统由控制主机和被管理主机组成,控制主机不支持windows平台

部署简单, 只需要在控制主机上部署ansible环境,被控制端上只要求安装ssh和python 2.5以上版本,这个对于类unix系统来说相当与无需配置.

Ansible任务执行模式分为以下两种:

ansible配置文件查找顺序

ansible配置文件

ansible 有许多参数,下面我们列出一些常见的参数:

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名。默认的inventory file为/etc/ansible/hosts。

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

Inventory文件格式:

inventory其他的参数

ansible通过ssh实现配置管理、应用部署、任务执行等功能,因此,需要事先配置ansible端能基于密钥认证的方式联系各被管理节点。

ansible命令使用语法:

例如:

可以通过 ansible-doc -l 列出所有可用的module,常用的module有:

ansible -s module-name 可以查看指定module的用法,或者参看 官方帮助文档 :

playbook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联同起来按事先编排的机制同唱一台大戏。

下面是一个简单示例:

playbooks的组成部分

执行过程:

playbook安装配置apache实战

ansilbe自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。

一个roles的案例如下所示:

在playbook中,可以这样使用roles:

也可以向roles传递参数:

也可以用条件来使用roles:

ansible运行playbook时会启动很多ssh连接来执行复制文件,运行命令这样的操作.openssh支持这样一个优化,叫做ssh Multiplexing,当使用这个ssh Multiplexing的时候,多个连接到相同主机的ssh回话会共享相同的TCP连接,这样就只有第一次连接的时候需要进行TCP三次握手.

ansible会默认使用ssh Multiplexing特性,一般不需要更改配置,相关的配置项为:

ansible执行过程中,他会基于调用的模块生成一个python脚本,然后将python脚本复制到主机上,最后执行脚本.ansible支持一个优化,叫做pipelining,在这个模式下ansible执行脚本时并不会去复制它,而是通过管道传递给ssh会话,这会让ansible的ssh会话从2个减少到1个,从而节省时间.

pipelining默认是关闭的, 因为他需要确认被管理主机上的/etc/sudoers文件中的 requiretty 没有启用, 格式如下:

ansible开启pipelining方法, 修改ansible.cfg配置文件:

ansible playbook会默认先收集fact信息,如果不需要fact数据可以在playbook中禁用fact采集:

也可以全局禁用fact采集:

另一种解决方案就是使用fact缓存,目前ansible支持下面几种fact缓存:

JSON文件做fact缓存示例

ansible把采集到的fact写入控制主机的json文件中,如果文件已经存在,那么ansible不会再去主机上采集fact

启用JSON文件缓存,修改ansible.cfg文件:

ansible默认并发数是5,可以用下面两种方法修改并发数:

ansible内置多种云计算相关模块,如aws,openstack,docker等,下图是ansible与docker相关的模块:

通过playbook和dockerfile相结合的方式生成镜像, 示例如下:

ansible可以通过docker模块来操作容器,示例如下:

ansible如何与django结合(2023年最新整理)  第1张

django+nginx+uwsgi+git有哪些自动化部署工具

ansible 可以定义不同的role,比如装python是一个role,安装django是一个role

可以给role的不同步骤定义tag,这样执行时就可以按tag来执行

关键ansible是python写的,用ssh来执行,不需要安装agent!

结语:以上就是首席CTO笔记为大家整理的关于ansible如何与django结合的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-23
下一篇 2023-09-23

相关推荐

发表回复

登录后才能评论