我正在尝试使用下面的Ansible yml文件使用nvm安装节点js版本.
我收到错误,如找不到源"home /home/centos/.nvm/nvm.sh"文件.但如果我通过使用ssh登录机器来做同样的事情,那么它可以正常工作.
- name: Install nvm
git: repo=https://github.com/creationix/nvm.git dest=~/.nvm version={{ nvm.version }}
tags: nvm
- name: Source nvm in ~/.profile
lineinfile: >
dest=~/.profile
line="source ~/.nvm/nvm.sh"
create=yes
tags: nvm
- name: Install node {{ nvm.node_version }}
command: "{{ item }}"
with_items:
- "source /home/centos/.nvm/nvm.sh"
- nvm install {{ nvm.node_version }}
tags: nvm
Run Code Online (Sandbox Code Playgroud)
错误:
failed: [172.29.4.71] (item=source /home/centos/.nvm/nvm.sh) => {"cmd": "source /home/centos/.nvm/nvm.sh", "failed": true, "item": "source /home/centos/.nvm/nvm.sh", "msg": "[Errno 2] No such file or directory", "rc": 2}
failed: [172.29.4.71] (item=nvm …
Run Code Online (Sandbox Code Playgroud) 我正在使用如下的主机文件,
[qa-workstations]
10.39.19.190 ansible_user=test ansible_ssh_pass=test
Run Code Online (Sandbox Code Playgroud)
我使用下面的命令在主机中执行"whoami"命令
root@Svr:~/ansible# ansible all -a "whoami" -i /etc/ansible/host
10.39.19.190 | success | rc=0 >>
root
Run Code Online (Sandbox Code Playgroud)
默认情况下,ansible尝试使用我已登录的用户名,即root而不是我在主机文件中指定的测试用户
当我尝试在ansible cli命令中传递用户名时,它工作正常
root@Svr:~/ansible# ansible all -a "whoami" -i /etc/ansible/host -u test
10.39.19.190 | success | rc=0 >>
test
Run Code Online (Sandbox Code Playgroud)
但是我不可能每次在CLI中传递用户名,因为不同的主机使用不同的用户名.此外,我没有为每个主机生成密钥对,因为主机经常不断更改
使用版本:
ansible 1.5.4
Ubuntu 14.04 LTS
Run Code Online (Sandbox Code Playgroud) 嗨我如何动态生成测试方法列表或文件数量.假设我在json中有file1,file2和filen以及输入值.现在我需要为下面的多个值运行相同的测试,
class Test_File(unittest.TestCase):
def test_$FILE_NAME(self):
return_val = validate_data($FILE_NAME)
assert return_val
Run Code Online (Sandbox Code Playgroud)
我使用以下命令运行py.test来生成html和junit报告
py.test test_rotate.py --tb=long --junit-xml=results.xml --html=results.html -vv
Run Code Online (Sandbox Code Playgroud)
目前我手动定义如下方法,
def test_lease_file(self):
return_val = validate_data(lease_file)
assert return_val
def test_string_file(self):
return_val = validate_data(string_file)
assert return_val
def test_data_file(self):
return_val = validate_data(data_file)
assert return_val
Run Code Online (Sandbox Code Playgroud)
请告诉我如何指定py测试以在报告时动态生成test_came方法.
我期待本博客中提到的确切内容" http://eli.thegreenplace.net/2014/04/02/dynamically-generating-python-test-cases "
但上面的博客使用unittest,如果我使用它,我无法生成html和junit报告
当我们使用如下夹具时,我得到的错误就像需要2个参数一样,
test_case = []
class Memory_utlization(unittest.TestCase):
@classmethod
def setup_class(cls):
fname = "test_order.txt"
with open(fname) as f:
content = f.readlines()
file_names = []
for i in content:
file_names.append(i.strip())
data = tuple(file_names)
test_case.append(data)
logging.info(test_case) # here test_case=[('dhcp_lease.json'),('dns_rpz.json'),]
@pytest.mark.parametrize("test_file",test_case) …
Run Code Online (Sandbox Code Playgroud) 我的django应用程序的views.py如下,
class MemberCreate(generics.CreateAPIView):
queryset = members.objects.all()
serializer_class = MemberSerializer
permission_classes = (permissions.IsAdminUser,)
def create(self, serializer):
''' I wanted to do some stuff with serializer.data here '''
pass
Run Code Online (Sandbox Code Playgroud)
在上面的内容中如果我覆盖了create函数,则返回失败并出现以下错误,即使我没有做任何事情,只是写入传递它失败了,
AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
Run Code Online (Sandbox Code Playgroud) 我有一个views.py如下,
from webapi.permissions import IsOwner
class MemberDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = members.objects.all()
serializer_class = MemberSerializer
permission_classes = (permissions.IsAdminUser,IsOwner)
Run Code Online (Sandbox Code Playgroud)
以下是自定义权限,用于检查用户是否是 webapi.permissions 中的对象,
class IsOwner(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return obj.owner == request.user
Run Code Online (Sandbox Code Playgroud)
现在的问题是检查他是否是管理员用户并授予更新/删除权限,但是如果所有者是用户,它实际上应该授予编辑他数据的权限,但在这种情况下它失败了。
在看到问题“ Django Rest Framework不会让我拥有多个权限”时,我尝试如下,但在我使用时仍然无法正常工作,或者,
class MemberDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = members.objects.all()
serializer_class = MemberSerializer
permission_classes = (Or(permissions.IsAdminUser,IsOwner))
Run Code Online (Sandbox Code Playgroud)
如果我使用 Or 它在运行时因错误而失败,因为“'条件'对象不可迭代”
我有一个测试文件,例如:test_my_api.py
我调用 pytest 使用以下命令开始执行,仅使用特定标记运行测试
pipenv run pytest -m "integration"
Run Code Online (Sandbox Code Playgroud)
现在在我的 test_my_api.py 文件中,我有多个标记为“集成”的函数
我还配置了一个全局变量,如下所示,并在所有方法中使用此全局值 DATA
DATA = get_my_data()
Run Code Online (Sandbox Code Playgroud)
现在我有另一个标记称为“smoke”,现在一些测试用例同时具有标记“smoke”和“integration”。对于烟雾,我需要如下不同的全局数据,
数据 = get_smoke_data()
问题是在运行测试用例时,我无法拆分该测试用例被调用的标记。即用于烟雾或集成。我如何在全球范围内获取此信息?
以前我知道有一个叫做 Mark info 的东西,例如: from _pytest.mark import MarkInfo 但现在已删除。这仅在每个方法中可用我如何在全局级别上获得它
在shell程序中,我想启动一个程序并获取其PID并保存在临时文件中.但是在这里我将在前台启动程序,并且在进程处于运行状态之前不会退出shell
例如:
#!/bin/bash
myprogram &
echo "$!" > /tmp/pid
Run Code Online (Sandbox Code Playgroud)
这工作正常,我能够得到启动过程的pid.但如果我在前期启动该程序,我想知道如何获得pid
例如:
#!/bin/bash
myprogram /// hear some how i wan to know the PID before going to next line
Run Code Online (Sandbox Code Playgroud) 嗨,我正在检查" http://pytest-ordering.readthedocs.org/en/develop/ "按顺序执行pytest
我尝试了以下代码,
import pytest
@pytest.mark.order2
def test_foo():
assert True
@pytest.mark.order1
def test_bar():
assert True
Run Code Online (Sandbox Code Playgroud)
但执行仍然是随机的.有人可以让我知道如何解决它?
您好,需要通过 ssm 代理将文件传输到 ec2 机器。我已经在 ec2 实例中成功安装了 ssm-agent,并且从 UI 中我可以通过“会话管理器”启动会话并登录到该 ec2 机器的 shell。
现在我尝试通过 boto3 并使用以下代码使其自动化,
ssm_client = boto3.client('ssm', 'us-west-2')
resp = client.send_command(
DocumentName="AWS-RunShellScript", # One of AWS' preconfigured documents
Parameters={'commands': ['echo "hello world" >> /tmp/test.txt']},
InstanceIds=['i-xxxxx'],
)
Run Code Online (Sandbox Code Playgroud)
上面的工作正常,我能够在远程计算机中创建一个名为 test.txt 的文件,但他是通过 echo 命令发送的,相反,我需要通过 ssm 代理将文件从本地计算机发送到此删除 ec2 计算机,因此我执行了下列的 ,
使用代理修改“/etc/ssh/ssh_config”,如下所示,
# SSH over Session Manager
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
Run Code Online (Sandbox Code Playgroud)
然后在上面的代码中,我尝试使用下面的代码启动会话,这也成功了。
response = ssm_client.start_session(Target='i-04843lr540028e96a')
Run Code Online (Sandbox Code Playgroud)
现在我不确定如何使用此会话响应或使用此 aws ssm 会话并发送文件
环境描述: 源:EKS 集群中运行的 …
一旦alarm(5)
启动并运行了几秒或几秒钟,在程序中一段时间后如果发生某些动作,我需要再次将警报重置为alarm(5)
.我怎样才能做到这一点?
有警报reset()
吗?
int flag=0;
void alarmhand(int signal)
{
flag=1;
// printf("\n time out");
}
void main()
{
signal(SIGALRM,alarmhand);
alarm (5);
while(1)
{
event_status();
if(flag==1)
break;
}
}
void event_status()
{
int reset;
printf("reset 1=y/2=n :");
scanf("%d",&reset);
if(reset==1)
{
// alarm.reset(5);
// HOW DO I RESET THE ALARM AGAIN TO 5 HERE ??
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个很长的正则表达式。
vpa_pattern = '(VAP) ([0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}): (.*)'
Run Code Online (Sandbox Code Playgroud)
我的匹配组代码如下:
class ReExpr:
def __init__(self):
self.string=None
def search(self,regexp,string):
self.string=string
self.rematch = re.search(regexp, self.string)
return bool(self.rematch)
def group(self,i):
return self.rematch.group(i)
m = ReExpr()
if m.search(vpa_pattern,line):
print m.group(1)
print m.group(2)
print m.group(3)
Run Code Online (Sandbox Code Playgroud)
我尝试通过以下方式使正则表达式模式变为多行,
vpa_pattern = '(VAP) \
([0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}):\
(.*)'
Run Code Online (Sandbox Code Playgroud)
甚至我尝试过:
vpa_pattern = re.compile(('(VAP) \
([0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}):\
(.*)'))
Run Code Online (Sandbox Code Playgroud)
但是上述方法不起作用。对于每个组,在打开和关闭括号后我都有一个空格()。我猜想当我拆分为多行时它不会恢复。
我有很多用 python django 编写的应用程序代码,每个应用程序都使用标准的 python 记录器模块,并且只记录了一个简单的消息字符串。
现在有什么方法可以添加我自己的客户中间件或 django 应用程序,当在他们的方法中调用日志记录时,它应该到达我的函数,我将为日志添加更多值,制作正确的 json 格式,然后写入日志文件。这样在当前的应用程序开发人员不需要做很多改变,除了他需要添加我的 django 应用程序或中间件
我已经定义了所有变量group_vars/all/vars_file.yml
,我的剧本如下:
---
# Top level play site.yml
- hosts: webclient
roles:
- common
- nginx
- nvm
- deploy_web_client
- hosts: appserver
roles:
- common
- gradle
- tomcat
- deploy_sb_war
Run Code Online (Sandbox Code Playgroud)
现在我有3个环境dev / staging / production。根据环境的不同,我曾经在group_vars下更改vars_file.yml,然后运行ansible-play。
有什么办法可以保留3个文件,例如“ group_vars / dev”,“ group_vars / staging”,“ group_vars / production”,并在我的主站点中指定它。yml
我有3个清单文件,如下所示,并根据环境在播放环境中指定清单文件名
[webclient]
10.20.30.40
[appserver]
10.20.30.41
Run Code Online (Sandbox Code Playgroud) python ×4
ansible ×3
django ×3
pytest ×3
amazon-ec2 ×1
ansible-2.x ×1
aws-ssm ×1
boto3 ×1
c ×1
linux ×1
python-3.x ×1
regex ×1
shell ×1