Collected Python Pluginを使用して、P4Python APIを使用してPerforceからGraphite Metricsを収集します。 login()コマンドの前に指定されたサーバの指紋をアサートするためにP4_TRUSTコマンドを必要とするsslベースの接続を除いて、すべてが有効です。具体P4Python Perforce APIは、Collected Python(2.7)プラグインとして実行しているときにP4_TRUSTを受け入れません。
:
import collectd
from P4 import P4
def configer(configobj):
collectd.info('Configuring Perforce Plugin')
def initer():
collectd.info('Initializing Perforce Plugin')
def reader():
p4 = P4()
p4.port = "ssl:perforce1.lab.dell.com:1666"
p4.user = "perforce"
p4.charset = 'utf8'
p4.password = "Password"
p4.connect()
p4.run_trust("-i", '60:27:3E:E0:A6:58:8E:13:4F:9E:8C:C8:BF:C3:26:C2:91:2F:78:33')
p4.run_login()
result = p4.run('license', '-u')
collectd.info("User limit is :" + result[0].get('userLimit'))
#
p4.disconnect()
# -- Hook Callbacks, Order is important! ==#
collectd.register_config(configer)
collectd.register_init(initer)
collectd.register_read(reader)
がcollectd.log予想通りcollectdコンテキスト外で実行同じコードを実行
`[2017-04-27 11:33:58] Unhandled python exception in read callback: P4Exception: [P4#run] Errors during command execution("p4 login")
[Error]: "The authenticity of '10.99.248.42:1666' can't be established,\nthis may be your first attempt to connect to this P4PORT.\nThe fingerprint for the key sent to your client is\n60:27:3E:E0:A6:58:8E:13:4F:9E:8C:C8:BF:C3:26:C2:91:2F:78:33\nTo allow connection use the 'p4 trust' command."
[2017-04-27 11:33:58] read-function of plugin `python.PerforceMetrics' failed. Will suspend it for 20.000 seconds.
`
に注意次の実行時エラーになります。
from P4 import P4
import logging
FORMAT = '%(asctime)-15s: %(name)s: %(levelname)s : %(message)s'
logging.basicConfig(format=FORMAT, filename='/var/log/pytest.log', level=logging.INFO)
def reader():
p4 = P4()
p4.port = "ssl:perforce1.cec.lab.emc.com:1666"
p4.user = "perforce"
p4.charset = 'utf8'
p4.password = "Password"
p4.connect()
p4.run_trust("-i", '80:25:3E:E0:A6:58:8E:13:4F:9E:8C:C8:BF:C3:26:C2:91:2F:78:33')
p4.run_login()
result = p4.run('license', '-u')
logging.info ("User limit is :" + result[0].get('userLimit'))
#
p4.disconnect()
reader()
注:「P4 Trust」を必要としないSSL接続は、collectdで正しく動作します。
手がかりや考え方、またはこれにアプローチする方法は?
'p4.run_trust'コマンドが正常に機能していますか? 〜/ .p4trustファイルを見て、コマンドラインから 'p4 trust'を実行したときの見た目と比較して、期待した情報が含まれていることを確認しましたか? –
ブライアン、うん、私はp4信頼が正しく実行されていると確信しています...注:collectdなしで設定された2番目のコード...これは正常に動作します。 PythonプラグインがCollectdデーモンによってロードされたときに失敗し、信頼エラーがスローされます。 BTW ... p4python APIを使用して、.p4trustファイルを使用しない代わりに、指紋を直接 'p4.run_trust(" - i "、'80:25:3E:E0:A6:58:8E :13:4F:9E:8C:C8:BF:C3:26:C2:91:2F:78:33 ') ' –