Documentation and examples are quite sparse

Hi!
This seems like a really nice lib and I've tried to use it for a quite simple expression parser, inspired by clarkmcc/cel-rust.
My attempt so far (trying to keep things minimal until I get something working) is the pasted snippet at the bottom.
When running it, it seems to get into some infinite loop but I'm not really sure how to address it? I'm assuming I'm infinitely  recursing down the lhs but I'm also not sure how to express it otherwise?
I've tried looking at the documentation and the examples but I can't really figure out how to map them to my use case. I'd appreciate any kind of help and I'll gladly contribute such a lexer/parser as example/testing back upstream if I get something representable working!
import gleam/io
import gleam/list
import gleam/option.{None, Some}
import gleam/set
import nibble.{type Parser}
import nibble/lexer

type TokenT {
  // Arithmetic
  AddT
  SubT
  MulT
  DivT
  ModT

  // Relation
  LessThanT
  LessThanEqT
  GreaterThanT
  GreaterThanEqT
  EqualsT
  NotEqualsT
  InT

  // Atom
  IntT(Int)
  // AUInt(Int)
  FloatT(Float)
  StringT(String)
  BoolT(Bool)
  NullT

  // Ident
  IdentT(String)

  LParen
  RParen
}

pub type ArithmeticOp {
  Add
  Sub
  Mul
  Div
  Mod
}

pub type RelationOp {
  LessThan
  LessThanEq
  GreaterThan
  GreaterThanEq
  Equals
  NotEquals
  In
}

pub type Atom {
  Int(Int)
  Float(Float)
  // String(String)
  Bool(Bool)
  Null
}

pub type Expression {
  Arithmetic(Expression, ArithmeticOp, Expression)
  Relation(Expression, RelationOp, Expression)
  Atom(Atom)
  Ident(String)
}

type Context {
  // InList
  // InMap
  // InTernary
  InSubExpr
}

fn lexer() {
  let reserved_literals = set.from_list(["false", "in", "null", "true"])
  let reserved_host =
    set.from_list([
      "as", "break", "const", "continue", "else", "for", "function", "if",
      "import", "let", "loop", "package", "namespace", "return", "var", "void",
      "while",
    ])

  let reserved = set.intersection(reserved_literals, reserved_host)

  let grouping = [lexer.token("(", LParen), lexer.token(")", RParen)]
  let arithmetic_op = [
    lexer.token("+", AddT),
    lexer.token("-", SubT),
    lexer.token("*", MulT),
    lexer.token("/", DivT),
    lexer.token("%", ModT),
  ]

  let relation_op = [
    // Relation
    lexer.token("<", LessThanT),
    lexer.token(">", GreaterThanT),
    lexer.token("<=", LessThanEqT),
    lexer.token(">=", GreaterThanEqT),
    lexer.token("==", EqualsT),
    lexer.token("!=", NotEqualsT),
    lexer.token("in", InT),
  ]
  let value = [
    // Value
    lexer.token("true", BoolT(True)),
    lexer.token("false", BoolT(False)),
    lexer.number(IntT, FloatT),
    // lexer.then -> UInt
    lexer.string("\"", StringT),
    lexer.string("'", StringT),
    lexer.token("null", NullT),
  ]

  lexer.simple(
    list.flatten([
      grouping,
      arithmetic_op,
      relation_op,
      value,
      [
        // Identifier
        lexer.identifier("[_a-zA-Z][_a-zA-Z0-9]*", "[^\\s=]", reserved, IdentT),
        // Comments
        lexer.comment("//", fn(_) { Nil }) |> lexer.ignore(),
        // Whitespace
        lexer.whitespace(Nil)
          |> lexer.ignore(),
      ],
    ]),
  )
}

fn parser() -> Parser(Expression, TokenT, Context) {
  use expr <- nibble.do(arith_add_sub_full_parser())
  nibble.succeed(expr)
}

fn arith_add_sub_full_parser() -> Parser(Expression, TokenT, Context) {
  nibble.one_of([arith_add_sub_inner_parser(), arith_mul_div_mod_full_parser()])
}

fn arith_add_sub_inner_parser() -> Parser(Expression, TokenT, Context) {
  use lhs <- nibble.do(nibble.lazy(arith_add_sub_full_parser))
  use op <- nibble.do(op_add_sub_parser())
  use rhs <- nibble.do(arith_mul_div_mod_full_parser())

  nibble.return(Arithmetic(lhs, op, rhs))
}

fn arith_mul_div_mod_full_parser() -> Parser(Expression, TokenT, Context) {
  nibble.one_of([arith_mul_div_mod_inner_parser(), atom_parser()])
}

fn arith_mul_div_mod_inner_parser() -> Parser(Expression, TokenT, Context) {
  use lhs <- nibble.do(nibble.lazy(arith_mul_div_mod_full_parser))
  use op <- nibble.do(op_mul_div_mod_parser())
  use rhs <- nibble.do(atom_parser())

  nibble.return(Arithmetic(lhs, op, rhs))
}

fn op_mul_div_mod_parser() -> Parser(ArithmeticOp, TokenT, Context) {
  use tok <- nibble.take_map("*,/,%")

  case tok {
    MulT -> Some(Mul)
    DivT -> Some(Div)
    ModT -> Some(Mod)
    _ -> None
  }
}

fn op_add_sub_parser() -> Parser(ArithmeticOp, TokenT, Context) {
  use tok <- nibble.take_map("+,-")

  case tok {
    AddT -> Some(Add)
    SubT -> Some(Sub)
    _ -> None
  }
}

fn atom_parser() -> Parser(Expression, TokenT, Context) {
  nibble.backtrackable({
    use t <- nibble.do(nibble.any())

    case t {
      IntT(n) -> nibble.return(Atom(Int(n)))
      FloatT(n) -> nibble.return(Atom(Float(n)))
      BoolT(n) -> nibble.return(Atom(Bool(n)))
      NullT -> nibble.return(Atom(Null))
      _ -> nibble.fail("Expected a literal value")
    }
  })
}

pub fn main() {
  let assert Ok(lexed) = lexer.run("5 + a", lexer())

  let _ =
    nibble.run(lexed, parser())
    |> io.debug

  "done"
}

Howdy! Your parser suffers from a common problem known as "left recursion". This is where you have a parser defined in terms of itself, that recurses before ever consuming any input. The offending parts are here:
fn arith_add_sub_full_parser() -> Parser(Expression, TokenT, Context) {
  nibble.one_of([arith_add_sub_inner_parser(), arith_mul_div_mod_full_parser()])
}

fn arith_add_sub_inner_parser() -> Parser(Expression, TokenT, Context) {
  use lhs <- nibble.do(nibble.lazy(arith_add_sub_full_parser))

It's pretty easy to see why this hangs if we just say out loud how this code will work:

run arith_add_sub_full_parser
attempt the first parser in the one_of, that's arith_add_sub_inner_parser
the first step is to do arith_add_sub_full_parser
... repeat infinitely without consuming input.

This isn't a problem specific to nibble, its a common trap folks run into when they first start thinking about expression parsers!

The good news is nibble comes with a built in way to handle recursive expressions with binary (and unary) operators, that's that nibble/pratt module. You can read about pratt parsers yourself if you're interested, but suffice to say this is an abstraction specifically there for writing expression parsers ^^ Let's take a look at what your parser would look like if you used it.
First, let's set up the "atomic" parsers, the bits that mostly just consume one token:
fn atom_parser(_) -> Parser(Expression, TokenT, Context) {
  use tok <- nibble.take_map("INT | FLOAT | BOOL | NULL | IDENT")

  case tok {
    IntT(n) -> Int(n) |> Some
    FloatT(n) -> Float |> Some
    // ...
    _ -> None
  }
}

fn arithmetic_operator_parser(op: ArithmeticOperator) -> Parser(...) {
  use tok <- nibble.take_map("+ | - | * | / | %")

  case tok, op {
    AddT, Add -> Some(Add)
    SubT, Sub -> Some(Sub)
    // ...
    _, _ -> None
  }
}

fn arithmetic_binop(op: ArithmeticOperator) -> fn(Expression, Expression) -> Expression {
  fn(lhs, rhs) {
    Arithmetic(lhs, op, rhs)
  }
}

Now, let's use the pratt module to create an expression parser:
fn expression_parser() -> Parser(...) {
  pratt.expression(
    one_of: [atom_parser],
    and_then: [
      pratt.infix_left(6, arithmetic_operator_parser(Add), arithmetic_binop(Add)),
      pratt.infix_left(6, arithmetic_operator_parser(Sub), arithmetic_binop(Sub)),
      pratt.infix_left(7, arithmetic_operator_parser(Mul), arithmetic_binop(Mul)),
      pratt.infix_left(7, arithmetic_operator_parser(Div), arithmetic_binop(Div)),
    ],
    dropping: nibble.succeed(Nil),
  )
}

Somewhat intuitively, we can kind of grok what this does. First take one_of our atoms, and_then construct one of our infix expressions.
Some things to note:

infix_left and infix_right are about operator associativity. That's what behaviour the operator should have when you have a composite expression like 1 + 2 + 3. In a left associative operator, this would be parsed as (1 + 2) + 3.
The number given to each operator is its precedence. When we have an expression like 1 + 2 * 3 we want to make sure it is parsed correctly: without any precedence this expression would parse as (1 + 2) * 3, but if we assign multiplication a higher precedence than addition it is correctly parsed as 1 + (2 * 3)
the dropping is a parser that consumes no input in this case, but it might be a parser that takes whitespace or comments or any other token that is not part of your expression language.

I hope this gets you off on the right foot. If you'd like to solve this without using nibble's pratt parser (specifically if you dont care about operator precedence in this little exercise, it's tricky to roll your own) then the trick to solving your left recursion problem is to make sure you consume some input first before you move on. So you might do:
fn expression_parser() {
  // always consume something
  use lhs <- atom_parser()

  nibble.one_of([
    // try and parse a binop, carry the left hand side
    // through
    binop_expression_parser(lhs),
    // else we just have an atom on its own
    nibble.return(lhs)
  ])
}

fn binop_expression_parser(lhs) {
  use op <- nibble.do(arithmetic_operator_parser())
  use rhs <- nibble.do(nibble.lazy(expression_parser))

  case op {
    Add -> Arithmetic(lhs, Add, rhs)
    // ...
  }
}

fn arithmetic_operator_parser() {
  use tok <- nibble.take_map("+ | - | ... ")

  case tok {
    AddT -> Some(Add)
    // ...
  }
}

Notice how this parser never backtracks. The way nibble works is that as soon as a parser consumes input it will continue down that path until success or failure, and not try anything else even if it is in a one_of. This is important because backtracking in a parser is incredibly expensive. Instead, we factor out the parts that are common and do those first: in this case that means always parsing an atom and only then do we either try to parse a binop or just succeed with the expression.
Another way to think about backtracking is that its a system for arbitrary lookahead. You might see some parsers described as "LR(1)" which means "left-to-right with one token lookahead". Because of how nibble works, when you introduce backtracking it is incredibly easy to end up with a LR(k) parser where k is unbounded: infinite lookahead! Once you throw recursive parsers into the mix you end up with a complexity explosion that will make your parser very slow.

Thank you so much for such a great and extensive answer and explanation ❤
The parser that I linked to (cel-rust) seems to me like the operator precedence is "implicit" through the hierarchy, (relation expression is <relation operator arithmetic_add_sub> or <arithmetic_add_sub> while the arithmetic_add_sub is left recursive the same way but with arithmetic_mul_div for the "base case". My understanding from your answer is that such a left associative (recursive?) parser is not possible to implement the same way with "just" nibble/parser, did I understand you correct?
I'll give pratt another go now that I've gotten a bit more insight and some guiding! I tried it before but got confused when I was supposed to take/consume/discard the Config pratt provides. I'll give that a go first, maybe try some more with the pratt+backtrack-less approach and then get back to you here with how it goes. Again, thank you so much for the amazing answer!

I've gotten a bit further now, I think I made it much more difficult for myself initially by trying to split up the pratt.expression into arithmetic/relation/etc instead of having it in the top level one. I'm now stuck on the ternary expression though, any input on how I can achieve that? I wanted to try the pratt.subexpression but the Context is opaque and I didn't find any other way to construct it? Is it something obvious I'm overlooking?
Currently, I have this (the subexpression obviously doesn't work here, the rest seems to work correctly though!)
fn expression_parser() -> Parser(Expression, lexer.Token, Context) {
  let add = fn(lhs, rhs) { Arithmetic(lhs, Add, rhs) }
  let sub = fn(lhs, rhs) { Arithmetic(lhs, Sub, rhs) }
  let mul = fn(lhs, rhs) { Arithmetic(lhs, Mul, rhs) }
  let div = fn(lhs, rhs) { Arithmetic(lhs, Div, rhs) }
  let mod = fn(lhs, rhs) { Arithmetic(lhs, Mod, rhs) }

  let lte = fn(lhs, rhs) { Relation(lhs, LessThanEq, rhs) }
  let lt = fn(lhs, rhs) { Relation(lhs, LessThan, rhs) }
  let gte = fn(lhs, rhs) { Relation(lhs, GreaterThanEq, rhs) }
  let eq = fn(lhs, rhs) { Relation(lhs, Equals, rhs) }
  let neq = fn(lhs, rhs) { Relation(lhs, NotEquals, rhs) }
  let in = fn(lhs, rhs) { Relation(lhs, In, rhs) }

  let and = fn(lhs, rhs) { Logical(lhs, And, rhs) }
  let or = fn(lhs, rhs) { Logical(lhs, Or, rhs) }

  let not = fn(expr) { Unary(Not, expr) }
  let unary_sub = fn(expr) { Unary(UnarySub, expr) }

  pratt.expression(
    one_of: [
      atom_parser,
      ident_parser,
      parens_parser,
      pratt.prefix(8, nibble.token(lexer.ExclamationMark), not),
      pratt.prefix(8, nibble.token(lexer.Sub), unary_sub),
      pratt.sub_expression(conditional_parser, 2),
    ],
    and_then: [
      pratt.infix_left(7, nibble.token(lexer.Mul), mul),
      pratt.infix_left(7, nibble.token(lexer.Div), div),
      pratt.infix_left(7, nibble.token(lexer.Mod), mod),
      pratt.infix_left(6, nibble.token(lexer.Add), add),
      pratt.infix_left(6, nibble.token(lexer.Sub), sub),
      pratt.infix_left(5, nibble.token(lexer.LessThanEq), lte),
      pratt.infix_left(5, nibble.token(lexer.LessThan), lt),
      pratt.infix_left(5, nibble.token(lexer.GreaterThanEq), gte),
      pratt.infix_left(5, nibble.token(lexer.GreaterThan), gte),
      pratt.infix_left(5, nibble.token(lexer.Equals), eq),
      pratt.infix_left(5, nibble.token(lexer.NotEquals), neq),
      pratt.infix_left(5, nibble.token(lexer.In), in),
      pratt.infix_left(4, nibble.token(lexer.And), and),
      pratt.infix_left(3, nibble.token(lexer.Or), or),
    ],
    dropping: nibble.succeed(Nil),
  )
}

fn conditional_parser() {
  use cond <- nibble.do_in(InSubExpr, nibble.lazy(expression_parser))
  use _ <- nibble.do(nibble.token(lexer.Colon))
  use then <- nibble.do_in(InSubExpr, nibble.lazy(expression_parser))
  use _ <- nibble.do(nibble.token(lexer.QuestionMark))
  use otherwise <- nibble.do_in(InSubExpr, nibble.lazy(expression_parser))

  nibble.return(Ternary(cond, then, otherwise))
}

Also, I'm trying to use the operator precedence from the cel-spec (seemingly same order as the wiki on operator precedence) but the operator precedence in their table seem to be reversed from pratt-s order?


Create data pipeline for sustainability dashboard

The link to where the sample should be stored:
https://github.com/odpi/egeria-samples-api/tree/main/sustainability-dashboard/create-data-pipeline


Yet more obscure stuff

I'd appreciate feedback/ideas on a better name for the new class. Took me a good few hours to figure out what it was doing.

At first glance, this class looks like it's supposed to contain values from BlockPos.toLong(). The MathHelper.log2(60000000) is very suspicious.

@Earthcomputer I believe it's related to LevelPropagator, as that's the only place I can find which uses this type's parent class.
            this.pendingIdUpdatesByLevel[l] = new LongLinkedOpenHashSet(expectedLevelSize, 0.5f){

                protected void rehash(int newN) {
                    if (newN > j) {
                        super.rehash(newN);
                    }
                }
            };

Likely implemented for use here, but left out for some unknown reason.

Yes, I've taken a closer look at the class and I think you're right. I've taken a closer look and noticed the following:

method_35483 returns the same value for block positions in the same 2x2x2 area
method_35486 returns an int depending on which block position we are looking at in that 2x2x2
So we're extending from Long2LongLinkedOpenHashMap. The keys are longs representing the cubes, and the values are bitflags of which blocks are present in each cube.

So not only are values grouped together, values that are geometrically close when converted to a BlockPos are grouped together.


Add support for long focus

For complex tasks I'm working in blocks of 90 minutes (instead of 25) and a break of 15 minutes.
I would like to request support for starting a long focus session.

You can change the focus duration and break duration on settings.

I would like to have a focus duration for 25 and 90. So that I don't have to change the duration in minutes each time I want to make use of an other time period.

Perhaps if there was an option to automatically start the next focus session until the next long break. I often find myself working beyond the time set for the focus session, but I'm so immersed that I don't notice the notification. It would also help if the notification for a long break could be different because there comes a time when you need to move around.


Building whl files

Discussed in https://github.com/PyAV-Org/PyAV/discussions/1361

Originally posted by FanofVS April  1, 2024
After running command 'pip install av', we can find that a whl file is downloaded, and pyav is installed by extracting it.

As we can see, the installation is like this:

I would like to know how to build such a whl file that contains all depended libraries(in the pic above, the ffmpeg libraries under the directory 'av.libs'), so that I can build one with my own ffmpeg version

This should only be a discussion, not an issue.


event for MudSelect, when the list is shown

Our Problem is, that we load the list from the server, in the moment the select is focused to keep a small request size in our application.
My solution would be a OnFocus event in the MudSelect, which is triggered, when the menu is opened.
Implementing the Feature in the MudInput in general would solve a lot of problems in the future.

That is also my Problem

MudSelect now has OnOpened and OnClosed events.
If you have another problem, please comment or open new issue.


Task create returns error 400 due to file name?

Steps to reproduce:
List the minimal actions needed to reproduce the behavior.

Created flux task file called cq-1m.flux

Tried adding task to influx: influx task create --org Symbiot -f .\cq-1m.flux, get the following error: Error: 400 Bad Request: invalid options: loc 1:1-1:4: invalid statement @1:1-1:4:

Created an identical file called tmp.flux, task creation succeeds.

Expected behavior:
Creates a task from file
Actual behavior:
Fails to create a task from a file with a dash in its name?
PS C:\sw\Main\Symbiot\Setup\Release\Symbiot\Symbiot Monitor> influx task ls
ID      Name    Organization ID Organization    Status  Every   Cron    ScriptID
PS C:\sw\Main\Symbiot\Setup\Release\Symbiot\Symbiot Monitor> influx task create --org Symbiot -f .\cq-1m.flux
Error: 400 Bad Request: invalid options: loc 1:1-1:4: invalid statement @1:1-1:4:
PS C:\sw\Main\Symbiot\Setup\Release\Symbiot\Symbiot Monitor> influx task create --org Symbiot -f .\tmp.flux
ID                      Name            Organization ID         Organization    Status  Every   Cron    ScriptID
0accbb2e23ee2000        cq_eve_1m       1ce011d23a3e88ee        Symbiot         active  1m
PS C:\sw\Main\Symbiot\Setup\Release\Symbiot\Symbiot Monitor> compare-object (get-content .\tmp.flux) (get-content .\cq-1m.flux)
PS C:\sw\Main\Symbiot\Setup\Release\Symbiot\Symbiot Monitor> uname -srm
CYGWIN_NT-10.0-19044 3.3.6-341.x86_64 x86_64

Environment info:

System info: CYGWIN_NT-10.0-19044 3.3.6-341.x86_64 x86_64
InfluxDB version: InfluxDB v2.6.1 (git: 9dcf880fe0) build_date: 2022-12-29T15:53:06Z
Other relevant environment details: Container runtime, disk info, etc

Config:
# v2 InfluxDB config file

# storage engine, includes data and wal
engine-path = "C:/Program Files/InfluxData/InfluxDB/engine/"

# boltdb, file-based key-value store for non-time series data
bolt-path = "C:/Program Files/InfluxData/InfluxDB/influxd.bolt"

# sqlite
sqlite-path = "C:/Program Files/InfluxData/InfluxDB/influxd.sqlite"

# v1 name: series-id-set-cache-size
storage-series-id-set-cache-size = 100

# bind address
http-bind-address = ":8086"

# Disable the InfluxDB user interface (UI). The UI is enabled by default.
ui-disabled = false

I was unable to reproduce this in Cygwin, CMD, or Powershell. Is there anything else that could be going on like file permissions, etc that might be different between the two files?

Not sure, I'm unable to replicate it again. Thought the main culprit would be tfvc but its working fine, using the file in question as the task script works fine as well ¯_(ツ)_/¯. It probably is file permission issues, I guess I'll be restarting windows more often.
Thanks for the help.


Build fails when using cargo install

When installing via a local clone, I get a warning/compile error.
$ cargo install --path . -j8 --force
  Installing tealdeer v1.4.1 (~/tools/tealdeer)
    Updating crates.io index
   Compiling tealdeer v1.4.1 (~/tools/tealdeer)
warning: use of deprecated associated function `clap::Arg::<'help>::hidden`: Replaced with `Arg::hide`
   --> src/main.rs:125:9
    |
125 |         hidden = true
    |         ^^^^^^
    |
    = note: `#[warn(deprecated)]` on by default

error[E0599]: no variant or associated item named `HelpRequired` found for enum `AppSettings` in the current scope
  --> src/main.rs:59:31
   |
59 | #[clap(setting = AppSettings::HelpRequired)]
   |                               ^^^^^^^^^^^^ variant or associated item not found in `AppSettings`

For more information about this error, try `rustc --explain E0599`.
warning: `tealdeer` (bin "tldr") generated 1 warning
error: failed to compile `tealdeer v1.4.1 (~/tools/tealdeer)`, intermediate artifacts can be found at `~/tools/tealdeer/target`

Caused by:
  could not compile `tealdeer` due to previous error; 1 warning emitted

tealdeer hash is 1a3624d0116, cargo version:
$ cargo --version
cargo 1.57.0 (b2e52d7ca 2021-10-21)

Huh, that's weird. cargo build and also cargo build --release work fine. Does someone know what's going on?

This is weird: Building (and even cargo run) works fine, but using the command you specified (cargo install --path . -j8 --force) gives me the same error. I can even cargo build and cargo build --release in a fresh clone. While the immediate fix from our side seems straight-forward (just do what the compiler is telling us to), this is still weird. We should probably further investigate or open an issue at clap if we don't find the issue on our part.

Ahh, I found the reason: cargo install ignores the lockfile, and thus implicitly upgrades all dependencies.

Let's still keep this open and fix it though

I'll handle that, since there's a new clap option I wanted to add!

@dbrgn very strange behaviour! Is that documented as a "feature" somewhere or is it a bug in cargo?

I assume it's a feature. If you install from crates.io (which is the default), I believe there is no lockfile being shipped with the crate. If you install from source, you'll apparently have to use --locked if you want to use the lockfile.


Bug in Perl code (and perhaps others): minlen can cause the program to claim input file is not FASTA if there are 0 reads greater than the minimum length

When minlen causes 0 reads to be counted the program claims the input is not FASTA:
$ ./biotool.pl --minlen 1000 ../test_data/*
FILENAME	TOTAL	NUMSEQ	MIN	AVG	MAX
Skipping ../test_data/empty_file - doesn't seem to be FASTA?
Skipping ../test_data/one_sequence.fasta - doesn't seem to be FASTA?
Skipping ../test_data/two_sequence.fasta - doesn't seem to be FASTA?
I haven't tested all the other implementations, but something to watch out for.

Fixed!


fix(attachment) - more option button invoke correctly action on space/enter

Warnings

:warning:
There are no updates provided to CHANGELOG. Ensure there are no publicly visible changes introduced by this PR.

  Generated by :no_entry_sign: dangerJS


Feat/database design and backend improvements

:tada: This PR is included in version 1.1.15 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


connection.IceCandidate += iceCandidate => not working

I have some problem. i made client in javascript. and send offer. and the c# code return the answer.
then the client send candidate using signaling .
and i use this code
step 1: get message with data from the client and parse it using class i made
candidate1 message1 = JsonConvert.DeserializeObject(Message);
step 2:create IceCandidate  from the data came from the client
IceCandidate ic = new IceCandidate(message1.candidate.sdpMid, message1.candidate.sdpMlineindex, message1.candidate.candidate.ToString());
step 3:add IceCandidateto the peerconnection
connection_.AddIceCandidate(ic);
In this point  if i understand correct this should happen
connection.IceCandidate += iceCandidate =>
{
//发送 iceCandidate
};
but it is not.
please tell me what i do wrong
tnx zahi

您好，抱歉英文不好，用中文作答。IceCandidate 事件在设置SetLocalDescription和SetRemoteDescription后才会触发。

tnx
On Tue, Jun 23, 2020 at 7:09 AM 张炼<EMAIL_ADDRESS>wrote:

您好，抱歉英文不好，用中文作答。IceCandidate
事件在设置SetLocalDescription和SetRemoteDescription后才会触发。
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/jatecl/WebrtcSharp/issues/1#issuecomment-647895181,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACDB56QSZ33SP4PKANKRJ53RYATHJANCNFSM4MRD7POQ
.


Enhence testing coverage

Please do not merge yet, I will keep updating. Maybe merge at the end of the iteration

Codecov Report

Merging #118 into master will increase coverage by 0.03%.
The diff coverage is 41.66%.

@@             Coverage Diff              @@
##             master     #118      +/-   ##
============================================
+ Coverage     66.96%   66.99%   +0.03%
- Complexity      533      537       +4
============================================
  Files            97       97
  Lines          1895     1906      +11
  Branches        189      192       +3
============================================
+ Hits           1269     1277       +8
- Misses          567      568       +1
- Partials         59       61       +2

Impacted Files
Coverage Δ
Complexity Δ

src/main/java/seedu/address/model/Model.java
100.00% <ø> (ø)
1.00 <0.00> (ø)

src/main/java/seedu/address/model/Journal.java
76.31% <14.28%> (-14.01%)
13.00 <1.00> (+1.00)
:arrow_down:

...rc/main/java/seedu/address/model/ModelManager.java
91.30% <80.00%> (+5.15%)
29.00 <1.00> (+3.00)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update dff9b3c...816d307. Read the comment docs.


Touching outside the dialog dismiss the dialog

Library Version:
3.1.0
Affected Device(s):
Motorola XT1572
Describe the Bug:
I've a simple input dialog with one EditText,
MaterialDialog(this).show {
            noAutoDismiss()
            title(res = R.string.title_name)
            input()
            positiveButton(R.string.action_save_name)
}

and when I click the outside the dialog, the dialog got dismissed.
To Reproduce:

Create an input dialog with noAutoDismiss and show

MaterialDialog(this).show {
            noAutoDismiss()
            title(res = R.string.title_name)
            input()
            positiveButton(R.string.action_save_name)
}

Touch outside the dialog

Expected Behavior:
The dialog shouldn't dismiss
or Is there any other flag to prevent autoDismiss on outside dialog touch ?

AFAIK, this is the standard behavior of a dialog in android. But you can deny it via cancelOnTouchOutside().

That's what I was searching for. Thanks Simon :)


[Bug]: unable to access internet from php container

Have you already looked into this bug?

[x] I have checked the Troubleshooting Guide
[x] I have checked Release notes for potential migration steps
[x] I have checked existing issues for similar bugs
[x] I have googled this bug already with no luck
[ ] I have not done any of the above

(Optional) Error message
ping: google.com: Temporary failure in name resolution
What went wrong?
Upon trying to reach out from the php container, I am not able to, unless I turn on a VPN.  For example, here are the results of ping and curl` (without the VPN):
$ curl https://www.google.com
  curl: (6) Could not resolve host: www.google.com
$ ping google.com
  ping: google.com: Temporary failure in name resolution
$ dig google.com
  ; <<>> DiG 9.16.33-Debian <<>> google.com
  ;; global options: +cmd
  ;; Got answer:
  ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 30777
  ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
  ;; WARNING: recursion requested but not available

  ;; QUESTION SECTION:
  ;google.com.			IN	A

  ;; Query time: 1205 msec
  ;; SERVER: <IP_ADDRESS>#53(<IP_ADDRESS>)
  ;; WHEN: Wed Oct 04 13:12:23 EST 2023
  ;; MSG SIZE  rcvd: 28

From a different Docker container running php, I am able to reach out from the Docker container to the internet, so I believe this is related to Devilbox somehow.
Here are the Bind container logs for the above commands in case that helps:
04-Oct-2023 18:15:15.471 client @0x7f50bc704160 <IP_ADDRESS>#35120 (www.google.com): query: www.google.com IN AAAA + (<IP_ADDRESS>)
04-Oct-2023 18:15:15.472 client @0x7f50bc5f0240 <IP_ADDRESS>#33362 (www.google.com): query: www.google.com IN A + (<IP_ADDRESS>)
04-Oct-2023 18:15:16.674 timed out resolving 'www.google.com/AAAA/IN': <IP_ADDRESS>#53
04-Oct-2023 18:15:16.674 timed out resolving 'www.google.com/A/IN': <IP_ADDRESS>#53
04-Oct-2023 18:15:16.674 client @0x7f50bc704160 <IP_ADDRESS>#35120 (www.google.com): query failed (timed out) for www.google.com/IN/AAAA at query.c:7724
04-Oct-2023 18:15:16.674 client @0x7f50bc5f0240 <IP_ADDRESS>#33362 (www.google.com): query failed (timed out) for www.google.com/IN/A at query.c:7724
04-Oct-2023 18:15:16.676 client @0x7f50bc704160 <IP_ADDRESS>#40304 (www.google.com): query: www.google.com IN A + (<IP_ADDRESS>)
04-Oct-2023 18:15:16.676 client @0x7f50bc704160 <IP_ADDRESS>#40304 (www.google.com): query failed (SERVFAIL) for www.google.com/IN/A at query.c:7008
04-Oct-2023 18:15:16.676 client @0x7f50bc705150 <IP_ADDRESS>#49222 (www.google.com): query: www.google.com IN AAAA + (<IP_ADDRESS>)
04-Oct-2023 18:15:16.676 client @0x7f50bc705150 <IP_ADDRESS>#49222 (www.google.com): query failed (SERVFAIL) for www.google.com/IN/AAAA at query.c:7008

Since VPN makes this issue go away, I might blame this on my ISP and in fact had tried working with them, and got myself a static IP, but that didn't fix this. However, I noticed that when I try to reach the internet from a different container running php, I am able to just fine, regardless of VPN, so that makes me think this is a problem within Devilbox.
Expected behaviour
I expected that running ping google.com from inside the php container would return results
How can we reproduce the bug?
I am
Host Operating System
Linux
Host Platform (amd64, arm64, other)
amd64
(Linux only) Is SELinux enabled?
Yes, SELinux is enabled
Docker version
Docker version 24.0.6, build ed223bc
Docker Compose version
Docker Compose version v2.21.0-desktop.1
Devilbox version
tag: v2.4.0
Have you removed stopped containers before starting?
Yes
Have you pulled latest Docker images before starting?
Yes
Devilbox start command
docker-compose up -d bind httpd mysql php mailhog

Config: .env file
# I removed the other comments

DEBUG_COMPOSE_ENTRYPOINT=1
DOCKER_LOGS=0
DEVILBOX_PATH=.
LOCAL_LISTEN_ADDR=<IP_ADDRESS>:
TLD_SUFFIX=loc
EXTRA_HOSTS=
NEW_UID=267164627
NEW_GID=701479588
TIMEZONE=EST
DNS_CHECK_TIMEOUT=2
DEVILBOX_UI_SSL_CN=localhost,*.localhost,devilbox,*.devilbox,httpd
DEVILBOX_UI_PROTECT=0
DEVILBOX_UI_PASSWORD=password
DEVILBOX_UI_ENABLE=1
DEVILBOX_VENDOR_PHPMYADMIN_AUTOLOGIN=1
DEVILBOX_VENDOR_PHPPGADMIN_AUTOLOGIN=1
PHP_SERVER=8.1
HTTPD_FLAVOUR=alpine#HTTPD_SERVER=apache-2.2
HTTPD_SERVER=apache-2.4
MYSQL_SERVER=mariadb-10.5
PGSQL_SERVER=14-alpine
REDIS_SERVER=6.0
MEMCD_SERVER=1.6
MONGO_SERVER=4.4
MOUNT_OPTIONS=,cached
HOST_PATH_HTTPD_DATADIR=~/www
HOST_PATH_BACKUPDIR=./backups
HOST_PATH_SSH_DIR=~/.ssh
PHP_MODULES_ENABLE=imagick
PHP_MODULES_DISABLE=pdo_sqlsrv,sqlsrv,rdkafka,swoole
PHP_MAIL_CATCH_ALL=2
HOST_PORT_HTTPD=80
HOST_PORT_HTTPD_SSL=443
HTTPD_HTTP2_ENABLE=1
HTTPD_VHOST_SSL_TYPE=both
HTTPD_DOCROOT_DIR=htdocs
HTTPD_TEMPLATE_DIR=.devilbox
HTTPD_TIMEOUT_TO_PHP_FPM=180
HTTPD_NGINX_WORKER_PROCESSES=auto
HTTPD_NGINX_WORKER_CONNECTIONS=1024
MYSQL_ROOT_PASSWORD=
HOST_PORT_MYSQL=3306
PGSQL_ROOT_USER=postgres
PGSQL_ROOT_PASSWORD=
PGSQL_HOST_AUTH_METHOD=trust
HOST_PORT_PGSQL=5432
HOST_PORT_REDIS=6379
REDIS_ARGS=
HOST_PORT_MEMCD=11211
HOST_PORT_MONGO=27017
HOST_PORT_BIND=53
BIND_DNS_RESOLVER=<IP_ADDRESS>,<IP_ADDRESS>
BIND_DNSSEC_VALIDATE=no
BIND_TTL_TIME=
BIND_REFRESH_TIME=
BIND_RETRY_TIME=
BIND_EXPIRY_TIME=
BIND_MAX_CACHE_TIME=
BIND_LOG_DNS_QUERIES=1
HOST_PORT_MAILHOG=8025
MAILHOG_SERVER=latest

Config: docker-compose.override.yml
# vim: set ft=yaml:
---
version: '2.3'

services:

  # -----------------------------------------------------------------------------------------------
  # MailHog
  # -----------------------------------------------------------------------------------------------
  mailhog:
    image: mailhog/mailhog:${MAILHOG_SERVER:-latest}
    hostname: mailhog
    ports:
      - "${LOCAL_LISTEN_ADDR}${HOST_PORT_MAILHOG:-8025}:8025"
    networks:
      app_net:
        ipv4_address: <IP_ADDRESS>
    depends_on:
      - bind
      - php
      - httpd

Config: ./check-config.sh
# ==============================================================================
# Checking git
# ==============================================================================
[SUCC]  git is clean

# ==============================================================================
# Checking .env file
# ==============================================================================
[SUCC]  .env file exists
[SUCC]  .env file is readable
[SUCC]  All variables are present in .env file
[SUCC]  No variables is duplicated in .env file

# ==============================================================================
# Checking .env file values
# ==============================================================================
[SUCC]  All .env file variables have correct values

# ==============================================================================
# Checking required Devilbox core directories exist
# ==============================================================================
[SUCC]  All PHP cfg/ sub directories are present
[SUCC]  All PHP log/ sub directories are present
[SUCC]  All PHP mod/ sub directories are present
[SUCC]  All HTTPD cfg/ sub directories are present
[SUCC]  All HTTPD log/ sub directories are present

# ==============================================================================
# Checking devilbox core directory permissions
# ==============================================================================
[SUCC]  All devilbox directories have correct permissions
[SUCC]  All devilbox directories have correct uid
[SUCC]  All devilbox directories have correct gid

# ==============================================================================
# Checking devilbox core file permissions
# ==============================================================================
[SUCC]  All devilbox files have correct permissions
[SUCC]  All devilbox files have correct uid
[SUCC]  All devilbox files have correct gid

# ==============================================================================
# Checking projects permissions
# ==============================================================================
[SUCC]  All project dirs have correct permissions
[SUCC]  All project dirs have correct uid
[SUCC]  All project dirs have correct gid

# ==============================================================================
# Checking projects settings
# ==============================================================================
[SUCC]  All projects have valid DNS records
[SUCC]  All projects have valid HTTPD_DOCROOT_DIR

# ==============================================================================
# Checking customizations
# ==============================================================================
[NOTE]  [docker]     Custom docker-compose.override.yml present
[NOTE]  [php.ini]    Custom config present in cfg/php-ini-7.4/
[NOTE]  [php.ini]    Custom config present in cfg/php-ini-8.1/
find: cfg/mariadb-10.8: No such file or directory
find: cfg/mariadb-10.9: No such file or directory
find: cfg/mariadb-10.10: No such file or directory
[NOTE]  [startup]    Custom script present in autostart/

# ==============================================================================
# SUMMARY
# ==============================================================================
[SUCC]  Found no errors
[NOTE]  4 custom configurations applied. If you encounter issues, reset them first.

Log: docker-compose logs
devilbox-mailhog-1  | 2023/10/04 18:24:34 Using in-memory storage
devilbox-bind-1     | [INFO] Debug level: 1
devilbox-mailhog-1  | 2023/10/04 18:24:34 [SMTP] Binding to address: <IP_ADDRESS>:1025
devilbox-mailhog-1  | [HTTP] Binding to address: <IP_ADDRESS>:8025
devilbox-httpd-1    | [INFO] Debug level: 1
devilbox-mailhog-1  | 2023/10/04 18:24:34 Serving under http://<IP_ADDRESS>:8025/
devilbox-httpd-1    | [INFO] Runtime debug: 1
devilbox-mailhog-1  | Creating API v1 with WebPath:
devilbox-mailhog-1  | Creating API v2 with WebPath:
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mysql-1    | 2023-10-04 18:24:34+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.5.19+maria~ubu2004 started.
devilbox-mysql-1    | 2023-10-04 18:24:35+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
devilbox-mysql-1    | 2023-10-04 18:24:35+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.5.19+maria~ubu2004 started.
devilbox-mysql-1    | 2023-10-04 18:24:35+00:00 [Note] [Entrypoint]: MariaDB upgrade information missing, assuming required
devilbox-bind-1     |
devilbox-bind-1     | --------------------------------------------------------------------------------
devilbox-bind-1     | /etc/bind/named.conf
devilbox-httpd-1    | [INFO] Changing user 'www-data' uid to: 267164627
devilbox-httpd-1    | [INFO] Changing group 'www-data' gid to: 701479588
devilbox-httpd-1    | [INFO] Setting container timezone to: EST
devilbox-httpd-1    | [INFO] Docker date set to: Wed Oct  4 13:24:34 EST 2023
devilbox-httpd-1    | [INFO] $DOCKER_LOGS disabled. Logging errors and access to log files inside container.
devilbox-httpd-1    | [INFO] PHP 5.2 compatibility mode: Disabled
devilbox-httpd-1    | [INFO] PHP-FPM: Enabled
devilbox-mysql-1    | 2023-10-04 18:24:35+00:00 [Note] [Entrypoint]: MariaDB upgrade (mysql_upgrade) required, but skipped due to $MARIADB_AUTO_UPGRADE setting
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] Starting MariaDB 10.5.19-MariaDB-1:10.5.19+maria~ubu2004-log source revision f8a85af8ca1c937b8d4f847477bd282f80251cde as process 1
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: Uses event mutexes
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: Number of pools: 1
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] mysqld: O_TMPFILE is not supported on /tmp (disabling future attempts)
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: Using Linux native AIO
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: Initializing buffer pool, total size = 134217728, chunk size = 134217728
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: Completed initialization of buffer pool
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: 128 rollback segments are active.
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: Creating shared tablespace for temporary tables
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: 10.5.19 started; log sequence number<PHONE_NUMBER>; transaction id 1179676
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] Plugin 'FEEDBACK' is disabled.
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] Server socket created on IP: '::'.
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Warning] 'proxies_priv' entry '@% root@mysql' ignored in --skip-name-resolve mode.
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] Reading of all Master_info entries succeeded
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] Added new Master_info '' to hash table
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] mysqld: ready for connections.
devilbox-mysql-1    | Version: '10.5.19-MariaDB-1:10.5.19+maria~ubu2004-log'  socket: '/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
devilbox-mysql-1    | 2023-10-04 18:24:35 0 [Note] InnoDB: Buffer pool(s) load completed at 231004 18:24:35
devilbox-bind-1     | --------------------------------------------------------------------------------
devilbox-bind-1     | include "/etc/bind/named.conf.logging";
devilbox-bind-1     | include "/etc/bind/named.conf.options";
devilbox-bind-1     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
devilbox-bind-1     | [INFO] BIND logging: to stderr via Docker logs
devilbox-bind-1     |
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-bind-1     | --------------------------------------------------------------------------------
devilbox-bind-1     | /etc/bind/named.conf.logging
devilbox-bind-1     | --------------------------------------------------------------------------------
devilbox-bind-1     | logging {
devilbox-bind-1     |     category default { default_stderr; };
devilbox-bind-1     |     category queries { default_stderr; };
devilbox-bind-1     | };
devilbox-bind-1     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
devilbox-mailhog-1  | [APIv1] KEEPALIVE /api/v1/events
devilbox-bind-1     | [INFO] Using default DNS TTL time: 3600 sec
devilbox-bind-1     | [INFO] Using default DNS Refresh time: 1200 sec
devilbox-bind-1     | [INFO] Using default DNS Retry time: 180 sec
devilbox-bind-1     | [INFO] Using default DNS Expiry time: 1209600 sec
devilbox-bind-1     | [INFO] Using default DNS Max Cache time: 10800 sec
devilbox-bind-1     | [INFO] Changing DNS Max Cache size to: 90%
devilbox-bind-1     | [INFO] Not adding any PTR records
devilbox-bind-1     | [INFO] Adding A Record: *.loc -> <IP_ADDRESS>
devilbox-bind-1     | [INFO] Not adding any CNAME records
devilbox-bind-1     | [INFO] $ALLOW_QUERY not set.
devilbox-bind-1     | [INFO] DNS query rules will not be set
devilbox-bind-1     | [INFO] $ALLOW_RECURSION not set.
devilbox-php-1      | [INFO] Debug level: 1
devilbox-php-1      | [INFO] Changing user 'devilbox' uid to: 267164627
devilbox-php-1      | [INFO] Changing group 'devilbox' gid to: 701479588
devilbox-php-1      | [INFO] Setting container timezone to: EST
devilbox-php-1      | [INFO] Setting PHP: timezone=EST
devilbox-php-1      | [INFO] Docker date set to: Wed Oct  4 13:24:33 EST 2023
devilbox-php-1      | [INFO] $DOCKER_LOGS set to 0. Logging to files under: /var/log/php
devilbox-php-1      | [INFO] Make sure to mount this directory in order to view logs
devilbox-php-1      | [INFO] $ENABLE_MAIL set to 2. Enabling postfix catch-all
devilbox-php-1      | [INFO] Forwarding httpd:80 to <IP_ADDRESS>:80 inside this docker.
devilbox-php-1      | [INFO] Forwarding httpd:443 to <IP_ADDRESS>:443 inside this docker.
devilbox-php-1      | [INFO] Forwarding mysql:3306 to <IP_ADDRESS>:3306 inside this docker.
devilbox-php-1      | [INFO] Forwarding pgsql:5432 to <IP_ADDRESS>:5432 inside this docker.
devilbox-php-1      | [INFO] Forwarding redis:6379 to <IP_ADDRESS>:6379 inside this docker.
devilbox-php-1      | [INFO] Forwarding memcd:11211 to <IP_ADDRESS>:11211 inside this docker.
devilbox-php-1      | [INFO] Forwarding mongo:27017 to <IP_ADDRESS>:27017 inside this docker.
devilbox-php-1      | [INFO] Enabling 'socat-80-httpd-80' to be started by supervisord
devilbox-php-1      | [INFO] Enabling 'socat-443-httpd-443' to be started by supervisord
devilbox-php-1      | [INFO] Enabling 'socat-3306-mysql-3306' to be started by supervisord
devilbox-php-1      | [INFO] Enabling 'socat-5432-pgsql-5432' to be started by supervisord
devilbox-php-1      | [INFO] Enabling 'socat-6379-redis-6379' to be started by supervisord
devilbox-php-1      | [INFO] Enabling 'socat-11211-memcd-11211' to be started by supervisord
devilbox-php-1      | [INFO] Enabling 'socat-27017-mongo-27017' to be started by supervisord
devilbox-php-1      | [INFO] Enabling 'rsyslogd' to be started by supervisord
devilbox-php-1      | [INFO] Enabling 'postfix' to be started by supervisord
devilbox-php-1      | [INFO] Enabling 'php-fpm' to be started by supervisord
devilbox-php-1      | [INFO] PHP.ini: jakeparis-php.ini -> /usr/local/etc/php/conf.d/yyy-devilbox-user-runtime-jakeparis-php.ini
devilbox-php-1      | [INFO] PHP.ini: mailhog.ini -> /usr/local/etc/php/conf.d/yyy-devilbox-user-runtime-mailhog.ini
devilbox-php-1      | [INFO] PHP.ini: jakeparis-xdebug.ini -> /usr/local/etc/php/conf.d/yyy-devilbox-user-runtime-jakeparis-xdebug.ini
devilbox-php-1      | [INFO] Enabling the following PHP modules: imagick
devilbox-php-1      |
devilbox-php-1      | warning: imagick (imagick.so) is already loaded!
devilbox-php-1      |
devilbox-php-1      | [INFO] Disabling the following PHP modules: pdo_sqlsrv,sqlsrv,rdkafka,swoole
devilbox-php-1      | [INFO] $MYSQL_BACKUP_USER set for mysqldump-secure. Changing to 'root'
devilbox-php-1      | [INFO] $MYSQL_BACKUP_PASS set for mysqldump-secure. Changing to '******'
devilbox-php-1      | [INFO] $MYSQL_BACKUP_HOST set for mysqldump-secure. Changing to 'mysql'
devilbox-php-1      | Updating certificates in /etc/ssl/certs...
devilbox-php-1      | 1 added, 0 removed; done.
devilbox-php-1      | Running hooks in /etc/ca-certificates/update.d...
devilbox-php-1      | done.
devilbox-php-1      | [INFO] Executing custom startup script: setup-git.sh
devilbox-php-1      | error: key does not contain a section: defaultbranch
devilbox-php-1      | [INFO] Executing custom startup script: use-node-18.18.0.sh
devilbox-php-1      | [INFO] Starting supervisord
devilbox-php-1      | 2023-10-04 13:24:39,365 WARN No file matches via include "/etc/supervisor/custom.d/*.conf"
devilbox-php-1      | 2023-10-04 13:24:39,366 INFO Included extra file "/etc/supervisor/conf.d/php-fpm.conf" during parsing
devilbox-php-1      | 2023-10-04 13:24:39,366 INFO Included extra file "/etc/supervisor/conf.d/postfix.conf" during parsing
devilbox-php-1      | 2023-10-04 13:24:39,366 INFO Included extra file "/etc/supervisor/conf.d/rsyslogd.conf" during parsing
devilbox-bind-1     | [INFO] DNS recursion rules will not be set
devilbox-php-1      | 2023-10-04 13:24:39,366 INFO Included extra file "/etc/supervisor/conf.d/socat-11211-memcd-11211.conf" during parsing
devilbox-php-1      | 2023-10-04 13:24:39,366 INFO Included extra file "/etc/supervisor/conf.d/socat-27017-mongo-27017.conf" during parsing
devilbox-php-1      | 2023-10-04 13:24:39,366 INFO Included extra file "/etc/supervisor/conf.d/socat-3306-mysql-3306.conf" during parsing
devilbox-bind-1     | [INFO] DNSSEC Validation: no
devilbox-httpd-1    | [INFO] PHP-FPM: Server address: <IP_ADDRESS>
devilbox-httpd-1    | [INFO] PHP-FPM: Server port: 9000
devilbox-httpd-1    | [INFO] PHP-FPM: Timeout: 180
devilbox-httpd-1    | [INFO] http2: Enabled
devilbox-php-1      | 2023-10-04 13:24:39,366 INFO Included extra file "/etc/supervisor/conf.d/socat-443-httpd-443.conf" during parsing
devilbox-bind-1     | [INFO] Adding custom DNS forwarder: <IP_ADDRESS>,<IP_ADDRESS>
devilbox-php-1      | 2023-10-04 13:24:39,366 INFO Included extra file "/etc/supervisor/conf.d/socat-5432-pgsql-5432.conf" during parsing
devilbox-httpd-1    | [INFO] Main vhost: Enabled
devilbox-bind-1     |
devilbox-httpd-1    | [INFO] Main vhost: Setting SSL type to: http and https
devilbox-httpd-1    | [INFO] Main vhost: Enable automatic generation of SSL certificates
devilbox-bind-1     | --------------------------------------------------------------------------------
devilbox-bind-1     | /etc/bind/named.conf.options
devilbox-bind-1     | --------------------------------------------------------------------------------
devilbox-bind-1     | options {
devilbox-bind-1     |     directory "/var/cache/bind";
devilbox-bind-1     |     dnssec-validation no;
devilbox-bind-1     |     auth-nxdomain no;    # conform to RFC1035
devilbox-bind-1     |     listen-on-v6 { any; };
devilbox-bind-1     |     max-cache-size 90%;
devilbox-bind-1     |     response-policy { zone "rpz"; };
devilbox-php-1      | 2023-10-04 13:24:39,366 INFO Included extra file "/etc/supervisor/conf.d/socat-6379-redis-6379.conf" during parsing
devilbox-php-1      | 2023-10-04 13:24:39,366 INFO Included extra file "/etc/supervisor/conf.d/socat-80-httpd-80.conf" during parsing
devilbox-php-1      | 2023-10-04 13:24:39,366 INFO Set uid to user 0 succeeded
devilbox-php-1      | 2023-10-04 13:24:39,370 INFO supervisord started with pid 1
devilbox-php-1      | 2023-10-04 13:24:40,374 INFO spawned: 'rsyslogd' with pid 1589
devilbox-php-1      | 2023-10-04 13:24:40,381 INFO spawned: 'php-fpm' with pid 1590
devilbox-php-1      | 2023-10-04 13:24:40,388 INFO spawned: 'postfix' with pid 1591
devilbox-php-1      | 2023-10-04 13:24:40,395 INFO spawned: 'socat-11211-memcd-11211' with pid 1594
devilbox-bind-1     |     forwarders {
devilbox-bind-1     |         <IP_ADDRESS>;
devilbox-bind-1     |         <IP_ADDRESS>;
devilbox-bind-1     |     };
devilbox-php-1      | 2023-10-04 13:24:40,403 INFO spawned: 'socat-27017-mongo-27017' with pid 1596
devilbox-php-1      | 2023-10-04 13:24:40,413 INFO spawned: 'socat-3306-mysql-3306' with pid 1597
devilbox-php-1      | 2023-10-04 13:24:40,425 INFO spawned: 'socat-443-httpd-443' with pid 1598
devilbox-bind-1     | };
devilbox-bind-1     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
devilbox-bind-1     |
devilbox-php-1      | 2023-10-04 13:24:40,430 INFO spawned: 'socat-5432-pgsql-5432' with pid 1599
devilbox-php-1      | 2023-10-04 13:24:40,444 INFO spawned: 'socat-6379-redis-6379' with pid 1600
devilbox-bind-1     | --------------------------------------------------------------------------------
devilbox-bind-1     | /etc/bind/custom/conf/rpz.conf
devilbox-bind-1     | --------------------------------------------------------------------------------
devilbox-bind-1     | zone "rpz" IN {
devilbox-bind-1     |     type master;
devilbox-bind-1     |     allow-transfer { any; };
devilbox-bind-1     |     allow-update { any; };
devilbox-bind-1     |     file "/etc/bind/custom/zone/rpz";
devilbox-bind-1     | };
devilbox-bind-1     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
devilbox-bind-1     |
devilbox-bind-1     | --------------------------------------------------------------------------------
devilbox-bind-1     | /etc/bind/custom/zone/rpz
devilbox-bind-1     | --------------------------------------------------------------------------------
devilbox-bind-1     | $TTL 3600
devilbox-bind-1     | @                               IN   SOA     bind. admin.bind. (
devilbox-php-1      | 2023-10-04 13:24:40,454 INFO spawned: 'socat-80-httpd-80' with pid 1601
devilbox-php-1      | 2023-10-04 13:24:41,606 INFO success: rsyslogd entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
devilbox-php-1      | 2023-10-04 13:24:41,606 INFO success: php-fpm entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
devilbox-php-1      | 2023-10-04 13:24:41,606 INFO success: postfix entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
devilbox-bind-1     |<PHONE_NUMBER>     ; Serial number
devilbox-php-1      | 2023-10-04 13:24:41,606 INFO success: socat-11211-memcd-11211 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
devilbox-php-1      | 2023-10-04 13:24:41,606 INFO success: socat-27017-mongo-27017 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
devilbox-php-1      | 2023-10-04 13:24:41,606 INFO success: socat-3306-mysql-3306 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
devilbox-php-1      | 2023-10-04 13:24:41,606 INFO success: socat-443-httpd-443 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
devilbox-php-1      | 2023-10-04 13:24:41,606 INFO success: socat-5432-pgsql-5432 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
devilbox-php-1      | 2023-10-04 13:24:41,606 INFO success: socat-6379-redis-6379 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
devilbox-php-1      | 2023-10-04 13:24:41,606 INFO success: socat-80-httpd-80 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
devilbox-bind-1     |                                              1200           ; Refresh time
devilbox-bind-1     |                                              180            ; Retry time
devilbox-httpd-1    | [INFO] Main vhost: SSL CN: localhost,*.localhost,devilbox,*.devilbox,httpd
devilbox-httpd-1    | [INFO] $MAIN_VHOST_DOCROOT not specified. Keeping default: htdocs
devilbox-httpd-1    | [INFO] $MAIN_VHOST_TPL not specified. Keeping default: cfg
devilbox-httpd-1    | [INFO] Main vhost: Enabling httpd status page
devilbox-httpd-1    | [INFO] Main vhost: Changing status page alias to: /devilbox-httpd-status
devilbox-httpd-1    | [INFO] Mass vhost: Enabled
devilbox-httpd-1    | [INFO] Mass vhost: Setting SSL type to: http and https
devilbox-httpd-1    | [INFO] Mass vhost: Enable automatic generation of SSL certificates
devilbox-httpd-1    | [INFO] Mass vhost: changing tld to: .loc
devilbox-httpd-1    | [INFO] Mass vhost: changing document root to: htdocs
devilbox-bind-1     |                                              1209600        ; Expiry time
devilbox-bind-1     |                                              10800          ; Negative Cache TTL
devilbox-bind-1     | )
devilbox-bind-1     |
devilbox-httpd-1    | [INFO] Mass vhost: changing template dir to: .devilbox
devilbox-httpd-1    | [INFO] Disabling PHP 5.2 compat mode
devilbox-httpd-1    | [INFO] vhost-gen: no customized template found
devilbox-httpd-1    | vhost-gen: [INFO]  (2023-10-04 13:24:34): Loading configuration file        (-c): /etc/vhost-gen/main.yml
devilbox-bind-1     | ; NS Records
devilbox-bind-1     |                                 IN   NS      bind.
devilbox-httpd-1    | vhost-gen: [INFO]  (2023-10-04 13:24:34): Loading vhost template (global)   (-t): /etc/vhost-gen/templates/apache24.yml
devilbox-httpd-1    | vhost-gen: [INFO]  (2023-10-04 13:24:34): Loading vhost template (override) (-o): /var/www/default/cfg/apache24.yml
devilbox-httpd-1    | vhost-gen: [WARN]  (2023-10-04 13:24:34): Override Vhost template not found: /var/www/default/cfg/apache24.yml
devilbox-httpd-1    | vhost-gen: [INFO]  (2023-10-04 13:24:34): Creating vhost type: https and http (both)
devilbox-httpd-1    | vhost-gen: [INFO]  (2023-10-04 13:24:34): Using vhost name: localhost
devilbox-httpd-1    | vhost-gen: [INFO]  (2023-10-04 13:24:34): Log setting: dir -> True
devilbox-httpd-1    | vhost-gen: [INFO]  (2023-10-04 13:24:34): Log setting: Not specified
devilbox-httpd-1    | vhost-gen: [INFO]  (2023-10-04 13:24:34): Vhost config written to: /etc/httpd/conf.d/localhost.conf
devilbox-httpd-1    | $ openssl req -newkey rsa:2048 -sha256 -nodes -extensions v3_req -config <(echo "[req]
devilbox-httpd-1    | distinguished_name = req_distinguished_name
devilbox-httpd-1    | x509_extensions = v3_req
devilbox-httpd-1    |
devilbox-httpd-1    | [req_distinguished_name]
devilbox-bind-1     |
devilbox-bind-1     | ; Custom Records
devilbox-bind-1     | *.loc                           IN   A       <IP_ADDRESS>
devilbox-bind-1     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
devilbox-bind-1     | [INFO] Starting BIND 9.18.9
devilbox-httpd-1    |
devilbox-httpd-1    | [ v3_req ]
devilbox-bind-1     | 04-Oct-2023 18:24:33.555 managed-keys-zone: loaded serial 0
devilbox-bind-1     | 04-Oct-2023 18:24:33.589 zone rpz/IN: loaded serial<PHONE_NUMBER>
devilbox-bind-1     | 04-Oct-2023 18:24:33.589 rpz: rpz: reload start
devilbox-bind-1     | 04-Oct-2023 18:24:33.589 rpz: rpz: reload done
devilbox-httpd-1    | basicConstraints = critical, CA:FALSE
devilbox-httpd-1    | subjectKeyIdentifier = hash
devilbox-httpd-1    | keyUsage = critical, digitalSignature, keyEncipherment
devilbox-httpd-1    | authorityKeyIdentifier = keyid:always,issuer:always
devilbox-httpd-1    | extendedKeyUsage = serverAuth, clientAuth
devilbox-bind-1     | 04-Oct-2023 18:24:33.590 all zones loaded
devilbox-bind-1     | 04-Oct-2023 18:24:33.591 running
devilbox-bind-1     | 04-Oct-2023 18:24:40.742 client @0x7f9dfc20f2e0 <IP_ADDRESS>#33295 (google.com): query: google.com IN A + (<IP_ADDRESS>)
devilbox-httpd-1    | subjectAltName=${ALT_NAMES}") -keyout /etc/httpd/cert/main/localhost.key -subj '/C=DE/ST=Berlin/L=Berlin/O=Devilbox/OU=Devilbox/CN=localhost/emailAddress=admin@localhost' -out /etc/httpd/cert/main/localhost.csr
devilbox-httpd-1    | $ openssl x509 -req -sha256 -extensions v3_req -extfile <(echo "[req]
devilbox-httpd-1    | distinguished_name = req_distinguished_name
devilbox-httpd-1    | x509_extensions = v3_req
devilbox-httpd-1    |
devilbox-bind-1     | 04-Oct-2023 18:24:40.742 client @0x7f9dfc2102e0 <IP_ADDRESS>#56557 (google.com): query: google.com IN AAAA + (<IP_ADDRESS>)
devilbox-bind-1     | 04-Oct-2023 18:24:41.943 timed out resolving 'google.com/AAAA/IN': <IP_ADDRESS>#53
devilbox-bind-1     | 04-Oct-2023 18:24:41.943 timed out resolving 'google.com/A/IN': <IP_ADDRESS>#53
devilbox-bind-1     | 04-Oct-2023 18:24:41.943 client @0x7f9dfc20f2e0 <IP_ADDRESS>#33295 (google.com): query failed (timed out) for google.com/IN/A at query.c:7724
devilbox-bind-1     | 04-Oct-2023 18:24:41.943 client @0x7f9dfc2102e0 <IP_ADDRESS>#56557 (google.com): query failed (timed out) for google.com/IN/AAAA at query.c:7724
devilbox-bind-1     | 04-Oct-2023 18:24:41.945 client @0x7f9dfc211100 <IP_ADDRESS>#43045 (google.com): query: google.com IN AAAA + (<IP_ADDRESS>)
devilbox-bind-1     | 04-Oct-2023 18:24:41.945 client @0x7f9dfc211100 <IP_ADDRESS>#43045 (google.com): query failed (SERVFAIL) for google.com/IN/AAAA at query.c:7008
devilbox-bind-1     | 04-Oct-2023 18:24:41.945 client @0x7f9dfc20f2e0 <IP_ADDRESS>#58017 (google.com): query: google.com IN A + (<IP_ADDRESS>)
devilbox-bind-1     | 04-Oct-2023 18:24:41.945 client @0x7f9dfc20f2e0 <IP_ADDRESS>#58017 (google.com): query failed (SERVFAIL) for google.com/IN/A at query.c:7008
devilbox-bind-1     | 04-Oct-2023 18:24:43.226 resolver priming query complete: success
devilbox-httpd-1    | [req_distinguished_name]

... logs truncated

(Optional) Additional information
No response

@jakeparis Can you change the BIND_DNS_RESOLVER=<IP_ADDRESS>,<IP_ADDRESS> to BIND_DNS_RESOLVER=<IP_ADDRESS>,<IP_ADDRESS>
Then delete all container and create again.

@vikas5914 Thank you, but that is actually what I already have:
BIND_DNS_RESOLVER=<IP_ADDRESS>,<IP_ADDRESS>

I am having a similar problem, except I keep getting incorrect IP addresses no matter what hostname I try to resolve. I thought I found a workaround by using my router's IP address for "BIND_DNS_RESOLVER" but that's not working either.


ClassNotFoundException and NoClassDefFoundError

Greetings Professor Falken,
I am designing a web application that is run on a tomcat server  allowing users to remotely execute a power shell command, via the click of an html style button,  on a virtual machine that hosts the server. I have used your library (thank you) and am running into an HTTP 500 error. The library seems to work fine when implemented and run in a basic java environment, however when I attempt to integrate it into the web application it is unsuccessful. I have followed your listed documentation to the T, and have taken this final route to contact you personally for assistance. I greatly appreciate any feedback and guidance you may offer. Bellow I have attached some screenshots for reference.
All jars have been added to my build path.

Hello,
That happens because, even when the library exists at compilation time, when the application is running in the server, the library is not available at runtime.
How do you deploy the application? In Tomcat the libraries should be deployed into the WEB-INF/lib directory. Have you checked it? Do you notice that the icons of Powershell library are a little bit different than the others in your Eclipse? I guess you have not imported/configured them properly.
Also you are supposed to have only one version of the library. 1.8 version is ok.
Instead, if you do not know how to deploy it,  you can set it manually in the tomcats lib directory.
Best regards

Thank you greatly for such a timely and helpful response!
Seems as though the 500 error has been resolved after I moved the jar file to my tomcats lib folder on  the VM. According to my console output, the command is successfully being executed as I wish.
I appreciate your time and guidance.
Regards


add OperatorGroup synchronization with NSS CR

This is a placeholder for continuing using NSS CR for RBAC projection under advanced deployment topology(separation of duties)

/retest

Close the PR, OperatorGroup will not be used anymore


Rename media folder - migrate

If this PR needs approval, or if the commits need to be pulled into the private repo, contact @alkohli. Thanks.

@alkohli

Can you review this PR? Note that it's recommended for a PR with so many changes (and file moves) to move the commits to the private repo for full review.
IMPORTANT: When this content is ready to merge, you must add #sign-off in a comment or the approval may get overlooked.

@dansisson - you'll need to fix the validation warnings before we can merge.
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

@dansisson I have pulled the changes into this PR: https://github.com/MicrosoftDocs/azure-stack-docs-pr/pull/14633
I have signed off and PR review is in progress. Once that completes, and I will drop a note, you can go ahead and close this. Thanks!


v1.5 fails with template error but previous versions work

Hey Kamil,
When trying to use the latest release, I get an error:
What If status:

-> Cache miss for What If data.
-> Waiting for response from What If API.
-> Saving What If response to cache.
[Error] An error happened when performing WhatIf operation.
[Error] {
  "code": "InvalidTemplate",
  "message": "Deployment template validation failed: \u0027The value for the template parameter \u0027resourceLocation\u0027 at line \u00271\u0027 and column \u0027180\u0027 is not provided. Please see https://aka.ms/arm-create-parameter-file for usage details.\u0027.",
  "details": null
}
Unhandled exception: System.Exception: An error happened when performing WhatIf operation.
   at ACE.Program.<>c.<<Main>b__2_1>d.MoveNext() in /home/runner/work/arm-estimator/arm-estimator/ace/Program.cs:line 139
--- End of stack trace from previous location ---
   at System.CommandLine.Invocation.AnonymousCommandHandler.InvokeAsync(InvocationContext context)
   at System.CommandLine.Invocation.AnonymousCommandHandler.SyncUsingAsync(InvocationContext context)
   at System.CommandLine.Invocation.AnonymousCommandHandler.Invoke(InvocationContext context)
   at System.CommandLine.Invocation.InvocationPipeline.<>c__DisplayClass4_0.<<BuildInvocationChain>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass17_0.<<UseParseErrorReporting>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass12_0.<<UseHelp>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass22_0.<<UseVersionOption>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass19_0.<<UseTypoCorrections>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<UseSuggestDirective>b__18_0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass16_0.<<UseParseDirective>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<RegisterWithDotnetSuggest>b__5_0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass8_0.<<UseExceptionHandler>b__0>d.MoveNext()

However, what is interesting, is that if I roll back my task to v1.5-beta2 or any previous version, and rerun the pipeline task - it will be fine.
The templates it is scanning against are the same. I have also verified I can run a manual what-if in my CLI terminal OK for these also, and it is successful.
Let me know if you need any other info!

Hey @riosengineer!
Would it be possible to provide:

full command you're running
Bicep code (param definition will suffice)

Hey @riosengineer!
Would it be possible to provide:

full command you're running
Bicep code (param definition will suffice)

Running this task, but I'll switch the wget url between the latest and older versions to test the bicep file.
jobs:
- job: RunNoCache
  displayName: Bicep Estimator
  steps:
  - checkout: self
    fetchDepth: 0
  - task: Bash@3
    inputs:
      targetType: 'inline'
      script: |
        wget https://github.com/TheCloudTheory/arm-estimator/releases/download/v1.5/linux-x64.zip
        unzip linux-x64.zip
        chmod +x ./azure-cost-estimator
      workingDirectory: $(System.DefaultWorkingDirectory)

The bicep code may be more challenging, as it's a corporate template. Do you need the actual main.bicep template, or just the bicepparam file? Thanks

bicepparam obfuscated
using '../main.bicep'

param tags = {
    Application: 'SomeApp'
    CostCenter: 'CC'
    Creator: 'Rios Engineer'
    DeploymentMethod: 'Bicep'
    Entity: 'Contoso'
    Environment: 'Prod'
}

// Shared Components
param sharedSubId = 'someGuid'
param privateDnsZoneRgName = 'rg-uks-shared'
param privateDnsZoneName = 'privatelink.azurewebsites.net'
param privateDnsZoneNameAppConf = 'privatelink.azconfig.io'
param privateDnsZoneNameKv = 'privatelink.vaultcore.azure.net'
param privateDnsZoneNameBlob = 'privatelink.blob.core.windows.net'
//

param env = 'prd'
param app = 'appName'
param vnetName = 'vnet-uks-prd'
param kvName = 'kv-uks-prd'
param appInsightsName = 'appi-uks-prd'
param lawName = 'log-uks-prd'
param appPlanName = 'asp-uks-prd'
param nsgName = 'nsg-uks-prd'
param nsgPeName = 'nsg-uks-prd'
param storageAccountName = 'ssomestorageprd'
param appPlanSkuName = 'P0V3'
param funcName = 'func-uks-prd'
param appConfName = 'ac-uks-prd'
param appConfigSku = 'Standard'
param kvSku = 'standard'
param vnetPrefix = '<IP_ADDRESS>/24'
param integrationSubnetName = 'sn-uks-prd-integrations'
param integrationSubnetPrefix = '<IP_ADDRESS>/27'
param peSubnetName = 'sn-uks-prd-pe'
param peSubnetPrefix = '<IP_ADDRESS>/27'

Main param definitions:
param timeNow string = utcNow('yyyy-MM-ddTHH:mm')

@description('The tags for all resources')
param tags object

@allowed([
  'dev'
  'tst'
  'prd'
])
@description('The name of the environment')
param env string

@description('The name of the application / project')
param app string

@description('The name of the virtual network')
param vnetName string

@description('The name of the key vault')
param kvName string

@description('The name of the application insights')
param appInsightsName string

@description('The name of the log analytics workspace')
param lawName string

@description('The name of the server farm aka app plan')
param appPlanName string

@description('The name of the network security group')
param nsgName string

@description('The name of the network security group private endpoint')
param nsgPeName string

@description('The SKU for the server farm')
param appPlanSkuName string

@description('Storage Account resource name')
param storageAccountName string

@description('The name of the Function app')
param funcName string

@description('The name of the application configuration for Function App')
param appConfName string

@description('The SKU for the application configuration')
param appConfigSku string

@description('Azure resource deployment location')
param location string = resourceGroup().location

@description('The name of the key vault')
param kvSku string

@description('The subscription ID of the private DNS Zone')
param sharedSubId string

@description('The name of the private DNS Zone')
param privateDnsZoneRgName string

@description('The name of the Function private DNS Zone')
param privateDnsZoneName string

@description('The name of the Key Vault private DNS Zone')
param privateDnsZoneNameKv string

@description('The name of the App Config private DNS Zone')
param privateDnsZoneNameAppConf string

@description('The name of the Storage Account blob private DNS Zone')
param privateDnsZoneNameBlob string

@description('The name of the Storage Account file private DNS Zone')
param privateDnsZoneNameFile string

@description('The subnet prefix for the private endpoint')
param peSubnetPrefix string

@description('The integration subnet prefix')
param integrationSubnetPrefix string

@description('The address prefix for the virtual network')
param vnetPrefix string

@description('The name of the integration subnet')
param integrationSubnetName string

@description('The name of the private endpoint subnet')
param peSubnetName string

How's this @kamil-mrzyglod ?

@riosengineer Thanks! I don't see the definition for resourceLocation param and its value in the bicepparam file. Could you please clarify where is it defined?

@riosengineer Thanks! I don't see the definition for resourceLocation param and its value in the bicepparam file. Could you please clarify where is it defined?

param location string = resourceGroup().location it grabs it from the resource group location that is already created. My what-if locally works az deployment group what-if -g bicep-estimator -f main.bicep -p prod.bicepparam

@riosengineer sure, but the error returned from the API states:
Deployment template validation failed: \u0027The value for the template parameter \u0027resourceLocation\u0027 at line \u00271\u0027 and column \u0027180\u0027 is not provided. Please see https://aka.ms/arm-create-parameter-file for usage details.\u0027.

It looks like the template requires resourceLocation parameter which isn't provided. Are you sure the correct template is being provided to ACE?

@riosengineer sure, but the error returned from the API states:
Deployment template validation failed: \u0027The value for the template parameter \u0027resourceLocation\u0027 at line \u00271\u0027 and column \u0027180\u0027 is not provided. Please see https://aka.ms/arm-create-parameter-file for usage details.\u0027.

It looks like the template requires resourceLocation parameter which isn't provided. Are you sure the correct template is being provided to ACE?

I'm pretty sure, I have the pipeline echo the file and param file it is about to use in ACE and it shows the two I am expecting. I actually just amended the template so to include the resource location param but it still fails with that error.
I am running it for two others files, and they have a different API response but it's the same stack trace error:
[Error] {
  "code": "InvalidTemplate",
  "message": "Deployment template validation failed: \u0027The value for the template parameter \u0027tags\u0027 at line \u00271\u0027 and column \u0027242\u0027 is not provided. Please see https://aka.ms/arm-create-parameter-file for usage details.\u0027.",
  "details": null
}```

So I removed the tags object just to test, and when I re-run it just moves onto another param:

```text
[Error] {
  "code": "InvalidTemplate",
  "message": "Deployment template validation failed: \u0027The value for the template parameter \u0027env\u0027 at line \u00271\u0027 and column \u0027241\u0027 is not provided. Please see https://aka.ms/arm-create-parameter-file for usage details.\u0027.",
  "details": null
}```

But if I use any older version, all is OK - it's strange. They compile on with `bicep build`  and also just got an OK response when running `az group validate` to validate the template to ARM ` "provisioningState": "Succeeded",`

I'll try and do more tests to help identify some pattern but I'm pretty sure the templates are ok.

Thanks, will check the test suite, maybe there are false positives.

@riosengineer One more request - could you please paste the full output from ACE when you run the command? I need to check if it's using Bicep CLI or Azure CLI. Is this a managed runner? If so, it may be the same issue I saw in my pipelines.

@riosengineer One more request - could you please paste the full output from ACE when you run the command? I need to check if it's using Bicep CLI or Azure CLI. Is this a managed runner? If so, it may be the same issue I saw in my pipelines.

It is a hosted ADO runner, I use the Azure CLI task, see below:
Starting: AzureCLI
==============================================================================
Task         : Azure CLI
Description  : Run Azure CLI commands against an Azure subscription in a PowerShell Core/Shell script when running on Linux agent or PowerShell/PowerShell Core/Batch script when running on Windows agent.
Version      : 2.244.1
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/azure-cli
==============================================================================
/usr/bin/az --version
azure-cli                         2.63.0

core                              2.63.0
telemetry                          1.1.0

Extensions:
azure-devops                       1.0.1

Dependencies:
msal                              1.30.0
azure-mgmt-resource               23.1.1

Python location '/opt/az/bin/python3'
Extensions directory '/opt/az/azcliextensions'

Python (Linux) 3.11.8 (main, Jul 31 2024, 03:39:39) [GCC 11.4.0]

Legal docs and information: aka.ms/AzureCliLegal

Your CLI is up-to-date.
Setting AZURE_CONFIG_DIR env variable to: /home/vsts/work/_temp/.azclitask
Setting active cloud to: AzureCloud
/usr/bin/az cloud set -n AzureCloud
/usr/bin/az login --service-principal -u *** --tenant REDACTED --allow-no-subscriptions --federated-token ***
[
  {
    "cloudName": "AzureCloud",
    "homeTenantId": "REDACTED",
    "id": "REDACTED",
    "isDefault": true,
    "managedByTenants": [],
    "name": "REDACTED",
    "state": "Enabled",
    "tenantId": "REDACTED",
    "user": {
      "name": "***",
      "type": "servicePrincipal"
    }
  }
]
/usr/bin/az account set --subscription REDACTED
/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command . '/home/vsts/work/_temp/azureclitaskscript1724944576387.ps1'

------------------------------

New version of ACE is available. Current version: 1.5+ec80068943fe61d5d41535e1758a35e75b1effd4, latest version: 1.5
Please update ACE to the latest version.

------------------------------

Run configuration:

-> Scope: ResourceGroup
-> Susbcription Id: REDACTED
-> Resource group: bicep-estimator
-> Template file: REDACTED
-> Deployment mode: Incremental
-> Threshold:
-> Parameters file: prod.bicepparam
-> Currency: GBP
-> Generate JSON output: False
-> Silent mode: False
-> Redirect stdout: False
-> Disabled detailed metrics: False
-> Generate HTML output: False
-> HTML output filename: Not Set
-> Dry run enabled: False
-> Cache disabled: False
-> Cache handler: Local
-> Conversion rate: 1
-> Webhook URL: Disabled

------------------------------

-> Attempting to compile Bicep file using Bicep CLI.
-> Compilation completed!

------------------------------

-> Attempting to compile Bicepparam file using Bicep CLI.
-> Compilation completed!

------------------------------

What If status:

-> Cache miss for What If data.
-> Waiting for response from What If API.
-> Saving What If response to cache.
[Error] An error happened when performing WhatIf operation.
[Error] {
  "code": "InvalidTemplate",
  "message": "Deployment template validation failed: \u0027The value for the template parameter \u0027resourceLocation\u0027 at line \u00271\u0027 and column \u0027180\u0027 is not provided. Please see https://aka.ms/arm-create-parameter-file for usage details.\u0027.",
  "details": null
}

@riosengineer I think I managed to reproduce the error. It seems it's caused by Bicep CLI compilation which generates different schema for parameters than Azure CLI. I'll check what kind of workaround or fix will mitigate the issue for you.

@riosengineer I think I managed to reproduce the error. It seems it's caused by Bicep CLI compilation which generates different schema for parameters than Azure CLI. I'll check what kind of workaround or fix will mitigate the issue for you.

Good to know you could replicate it. Hopefully not too much trouble. Thank you for your work!

Deployment template validation failed: \u0027The value for the template parameter \u0027resourceLocation

Works perfectly! Legend! Thanks Kamil. One more, what's the markdown output syntax? --generateMarkdownOutput true?

@riosengineer --generate-markdown-output and --markdown-output-filename, I'll add them to the Wiki soon.


Hardcode USER_HZ to 100.

See comment in the file for details.

@grobie @joshdevins @beorn7 @brian-brazil

:+1:

:+1:

:+1:
Want @grobie to reply, too...

:+1: :)


491 daniel

Includes the profile page, and the edit user info page with related backend and frontend tests.
closes #386
closes #385

The backend looks good


Don't set an insights object when there is an error in the remote call

Fixes #265
Don't return data from the local service layer when a remote error exists. This keeps with the design logic of error being passed back with the service object. Only one should be non-nil.
Needs Review: @koke

I'm not too familiar with that code but it looks like a simple change. :shipit:

Thanks @koke  :smile:


Json[Reader|Writer].create -> createJson5

The names for creating readers and writers have confused some people because they're accidentally reading/writing json5 when they really don't have a need to.
I recommend renaming .createStrict to createJson and .create to createJson5, but I am open to suggestions.
One alternative would be making quilt-json5 use json by default, and need an extra flag for json5. For example:
var reader = JsonReader.create().json5();

Resolved in ed8d145150d26ecb7ac60f2c1c72c2c0dc1774e3, will release tomorrow if nobody has any last-minute complaints.


Documentation issue [	absence of examples]

I am newbie to go and can't understand how to use this package. Can you please provide basic usage with some examples. Because example you provided is big and hard to understand for me :(. And when I start my own test project I have errors like this:
../../.go/src/github.com/vdobler/chart/imgg/image.go:9:2: cannot find package "github.com/golang/freetype" in any of:
	/usr/lib/go/src/github.com/golang/freetype (from $GOROOT)
	/home/kir/.go/src/github.com/golang/freetype (from $GOPATH)
../../.go/src/github.com/vdobler/chart/imgg/image.go:10:2: cannot find package "github.com/golang/freetype/truetype" in any of:
	/usr/lib/go/src/github.com/golang/freetype/truetype (from $GOROOT)
	/home/kir/.go/src/github.com/golang/freetype/truetype (from $GOPATH)
../../.go/src/github.com/vdobler/chart/imgg/image.go:11:2: cannot find package "github.com/llgcode/draw2d" in any of:
	/usr/lib/go/src/github.com/llgcode/draw2d (from $GOROOT)
	/home/kir/.go/src/github.com/llgcode/draw2d (from $GOPATH)
../../.go/src/github.com/vdobler/chart/imgg/image.go:12:2: cannot find package "github.com/llgcode/draw2d/draw2dimg" in any of:
	/usr/lib/go/src/github.com/llgcode/draw2d/draw2dimg (from $GOROOT)
	/home/kir/.go/src/github.com/llgcode/draw2d/draw2dimg (from $GOPATH)
../../.go/src/github.com/vdobler/chart/imgg/image.go:14:2: cannot find package "golang.org/x/image/draw" in any of:
	/usr/lib/go/src/golang.org/x/image/draw (from $GOROOT)
	/home/kir/.go/src/golang.org/x/image/draw (from $GOPATH)
....

This package won't be able to explain basic usage of Go, so I'll close it.
You have to install the required packages, e.g. via go get like this:
$ go get github.com/golang/freetype github.com/golang/freetype/truetype github.com/llgcode/draw2d github.com/llgcode/draw2d/draw2dimg golang.org/x/image/draw


Manually switching boiler

Hi Robert,
first thanx for your work. I'm happily using your client with Domoticz.
However, I would like to have more control on the heating system. As I can close the loop of the floorheating, and using Zigbee thermostats for the radiators I'm able to control these radiator heating units as well.
My question is, if it is possible (using your implementation) to switch on the boiler without increasing the Setpoint?
Namely, the Setpoint is related to the living room temperature and fiddling with this parameter feels a bit messy.
Thanx for considering.
Regards, Jochem

I've never run across a feature like that, and I doubt it exists. Detaching the boiler state from the setpoint seems to me like a possible recipe for disaster :)
This client is used to control the thermostat, not the boiler. It sounds to me like you want to do the latter. Perhaps the OpenTherm Gateway fits your purpose better?

Thanks Robert for your reply! To be honest, I already doubted if this was possible. However, my preference was not adding OpenTherm equipment to avoid multiple captains steering the ship.
I figured out a work-around. Touching the Nefit Easy physically, only changes the setpoint in rounded of halve values (1 or 0.5). So I can apply fractions to the setpoint value in my script to distinct manual switching the boiler or by domoticz.

Thanks Robert for your reply! To be honest, I already doubted if this was possible. However, my preference was not adding OpenTherm equipment to avoid multiple captains steering the ship.
I figured out a work-around. Touching the Nefit Easy physically, only changes the setpoint in rounded of halve values (1 or 0.5). So I can apply fractions to the setpoint value in my script to distinct manual switching the boiler or by domoticz.


"sonos_group" doesn't update and join doesn't work - both after reboot

Home Assistant release with the issue:
0.98.1

Last working Home Assistant release (if known):
I did several downgrades and at least the join problem seems to be since 0.93.4 with the new pysonos version. The problem with wrong group state seems to exist longer.
Operating environment (Hass.io/Docker/Windows/etc.):
Hass.io on generic Ubuntu (on an Intel NUC)

Component/platform:
https://www.home-assistant.io/components/sonos/

Description of problem:
After reboot the Sonos group state sonos_group is not correct and also joining new speakers to a group doesnt work. When I try to join a speaker, I get this in the log:
[homeassistant.components.sonos.media_player] Timeout waiting for target groups
It only updates the group state when I unjoin a speaker. Then the group state is correct - and I can join speakers again.
Problem-relevant configuration.yaml entries and (fill out even if it seems unimportant):
sonos:
  media_player:
    hosts:
      - 192.168.XX.170
      - 192.168.XX.171
      - 192.168.XX.172
      - 192.168.XX.173
      - 192.168.XX.174
      - 192.168.XX.175
      - 192.168.XX.176
      - 192.168.XX.177

Traceback (if applicable):

Additional information:

First, is it Home Assistant you are rebooting or a Sonos speaker?
Second, do you have problems with discovery (since you are listing all speakers by hand)?

This happens when I reboot Home Assistant.
I had problems with discovery before: Sometimes my speakers didn't reappear after powering them up (most of the speakers are shut down when I'm away) maybe because of my network (mostly wifi in a wifi dense area). Since I added them manually, everything is fine (regarding the missing speakers).

Okay, so it sound like you could have some connectivity issues. However, if this happens consistently it is likely a bug.
 Is it only those two that are IKEA speakers?
Can you describe how the sonos_group values are wrong?

Yes, only these two players are from IKEA. All other players are original SONOS.
After every reboot, it looks like this on my main speaker (Arbeitszimmer): sonos_group: media_player.arbeitszimmer,media_player.kuche,media_player.bad
The group should be containing all speakers.
Interestingly it's always in group with Bad & Küche, but the only difference to the other speakers is the short name. It's a SONOS One and a Play:3. They're not the only ones via wifi. And one of them is always powered and one turns off when I leave the house (this should be irrelevant anyway because non of the speakers get shut down while HA reboots).
Now I also tested with Wohnzimmer as master (usually I only use Arbeitszimmer as master): One time it lost some speakers - and the other time it kept all speakers in group.
FYI: I always check the sonos controller after reboot to verify that the speakers are still connected - regardless was sonos_group says. They are connected every time - and working flawlessly.

If it is that consistent we should be able to fix it, even if it is a bit hard when not seeing it first hand.
Can you do some low-level debug logging? It will be big and contain some unique information (like MAC addresses and playlists, not passwords) so probably better to send it to me privately in Discord.
logger:
 default: info
 logs:
   homeassistant.components.sonos: debug
   pysonos: debug

I've just sent you the log via DM on Discord.

Good news, I was able to reproduce the issue in my setup albeit just intermittently. Are you able to test a fix as a custom component?

Yeah! 👍  Thank you!
I should be able to test it :) (tomorrow)

Great. The branch is here: https://github.com/amelchio/home-assistant/tree/sonos-first-group-race
Let me know if you need help installing it.

Tested: Now it's working flawlessly.
Thank you very much :)

Thanks for testing! The fix is available in 0.98.3 now.


add support for L.mapbox.TileLayer?

We're using a few MapBox tile layers; the MapBox leaflet wrapper extends L.TileLayer to support some additional options and features unique to MapBox's tile server.
Any chance you might consider adding support to extend L.mapbox.tileLayer as well?

Here's a quick stab at it in my fork:
https://github.com/weftio/Leaflet.TileLayer.PouchDBCached/blob/master/L.TileLayer.PouchDBCached.js
I didn't try to get the WMS tile layer part working.

I think the right way to do this should be to extend the base L.TileLayer classby using the mixins pattern available in Leaflet. Will try to research the matter in a few days.

I think that would be helpful. Other plugins also extend tileLayer and could benefit from this caching (and a replication db on our end). Another example is Leaflet-OpenWeatherMap. Their tile server is terribly slow; weather updates from our perspective could be cached for 15min and shared in a replicated couchdb, for example  --- as a sort of tile server proxy, basically.

Personally, I'd set up instances of MapProxy (https://github.com/mapproxy/mapproxy) for that. A CouchDB tileserver seems... unoptimal for the job at hand, I think.

Thanks for the MapProxy tip!

Yeah, mixins are the way to go if we want to not worry about subclasses of L.TileLayer. See bc2a388d

Awesome. :+1:


Update video link in README

The instructional video has been uploaded to the IBM Watson Youtube channel. We should direct people towards that link instead.

Cool. Can you DM the name of the person you worked with from that channel?


Configurable home directory

:+1:
although since bittorrent sync can use arbitrary directories, I recreated it's shared directory at /sdcard/emulated/0/writeily and it seems to be syncing fine between my devices. (ie. issue not a blocker for me at least)

@patcon that's really good to know, actually. Does bittorrent sync require root?

Nope! Only sdcard access was requested, specifically these perms (from the Google Play app page):

Photos/Media/Files

modify or delete the contents of your USB storage
test access to protected storage

Just found this great app and wanted to add my vote for supporting configurable home directory :)

psssst... throw money at him if you like it and you're able to :)
https://play.google.com/store/apps/details?id=me.writeily.donate

Thanks guys :) my phone broke last week so I haven't been able to do much, but I should be able to get back to it later today.

I may give this a shot during the next days. I use syncthing for synching some GTD stuff, and would be cool to keep everything together in the same directory (using syncthing on the writeily folder itself is not a problem, though, so no show stopper here either).

@plafue sure thing! I was going to approach this too, but if you would like to go ahead and code it up, I would encourage it :). It should be quite trivial. I think, the most "tedious" part would be the UI, for which you should be able to use the same directory chooser I use in "Import from Device" or "Move to Folder"

Finished by plafue


Starting Fullscreen

Does chromedp support arguments?
I want to start chrome as fullscreen so I want to send args --start-fullscreen
puppeteer support it like that https://github.com/puppeteer/puppeteer/issues/1762
I don't want to use WindowSize parameter.
Thanks

Okey I found the solution:
After then I inspecting source code I noticed that flags are arguments so
this is the code which does thing I want to do
chromedp.Flag("start-fullscreen", true),


Doubt about increasing samples (Query)

Would it be possible to increase the examples in the Query folder? I noticed that when I put more than 74 .wav files I get this error: "ZeroDivisionError: integer division or module by zero".
So I would like to know if it is possible to increase the samples, thanks again.

Hi,
Yes, theoretically it support the "unlimited" query examples, the maximum number I used is 100.
The error you met is probably not the load problem but the wavfile problem itself, maybe there is a segment/slice of the wavfile contain all zeros? You can find the error code line to see if there is further information.


it doesn't always work well when use a keyword to search

when I use a word that contained in a note I took before for searching, it doesn't match the note sometimes. The app is elegant with a beatiful interface. hope that the author can fix the problem.

Do you have an example?


Elasticsearch Master - Cannot resolved elasticsearch-master-headless

Chart version:
latest
Kubernetes version:
1.12.7
Kubernetes provider: E.g. GKE (Google Kubernetes Engine)
Bare Metal
Helm Version:
2.14
Values.yaml:
elasticsearch-master:
  enabled: true
  nodeSelector: {role: elasticsearch}
  roles:
    master: "true"
    ingest: "false"
    data: "false"

Describe the bug:
After successfully deploying the 3 masters, I have removed one to test recovery, but the master node cannot recover.
The service is running and the other masters are running successfully but the deleted pod cannot resolve the headless DNS (or any for that matter):
Steps to reproduce:

Helm install chart
Wait for all masters to start (2/2)
Delete a pod
Pod will sit in 1/2 state, unable to resolve any hosts.

Expected behavior:
The pod should recover successfully.
Provide logs and/or server output (if relevant):
"stacktrace": ["java.net.UnknownHostException: elasticsearch-master-headless",
"at java.net.InetAddress$CachedAddresses.get(InetAddress.java:797) ~[?:?]",
"at java.net.InetAddress.getAllByName0(InetAddress.java:1505) ~[?:?]",
"at java.net.InetAddress.getAllByName(InetAddress.java:1364) ~[?:?]",
"at java.net.InetAddress.getAllByName(InetAddress.java:1298) ~[?:?]",
"at org.elasticsearch.transport.TcpTransport.parse(TcpTransport.java:536) ~[elasticsearch-7.1.0.jar:7.1.0]",
"at org.elasticsearch.transport.TcpTransport.addressesFromString(TcpTransport.java:489) ~[elasticsearch-7.1.0.jar:7.1.0]",
"at org.elasticsearch.transport.TransportService.addressesFromString(TransportService.java:744) ~[elasticsearch-7.1.0.jar:7.1.0]",
"at org.elasticsearch.discovery.SeedHostsResolver.lambda$resolveHostsLists$0(SeedHostsResolver.java:143) ~[elasticsearch-7.1.0.jar:7.1.0]",
"at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]",
"at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:681) ~[elasticsearch-7.1.0.jar:7.1.0]",
"at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]",
"at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]",
"at java.lang.Thread.run(Thread.java:835) [?:?]"] }
{"type": "server", "timestamp": "2019-06-02T08:44:01,706+0000", "level": "WARN", "component": "o.e.d.SeedHostsResolver", "cluster.name": "elasticsearch", "node.name": "elasticsearch-master-0",  "message": "failed to resolve host [elasticsearch-master-headless]" ,

Hey @DandyDeveloper!
This is a weird one. If it wasn't possible for the headless service to be resolvable then it shouldn't be possible for the cluster to form at all. So this is an odd place for it to start failing.
For what its worth I can't reproduce this on GKE (it would also be caught by our automated integration tests). It's also possible for the cluster to recover from deleting all the pods at once which I have tested a lot.
Some questions from my side:

Can you give me the spec for one of the pods? I want to see if maybe your bare metal provider is injecting any funny DNS settings. I'd like to see the output of kubectl get pod elasticsearch-master-0 -o yaml
The output of the helm release. helm get elasticsearch-master
Can you check whether or not the Elasticsearch cluster is actually forming properly? By running curl localhost:9200/_cluster/health?pretty=true from inside of one of the pods.
"Pod will sit in 1/2 state, unable to resolve any hosts.". Is this when the pod is shutting down or starting back up again?
Output of ping elasticsearch-master-headless run form within one of the running containers.

@Crazybus Sorry for not getting this to you sooner. I actually had a look at the specific node this was running against and it was infact an issue with the node itself.
Everything on the node was effective unable to resolve because it wasn't appropriately provisioned to access the kube router.
After fixing this and killing the pod, it started to behave. The data node also came up successfully. Sorry to have wasted your time with this.

Great to hear and thank you for following up!

same problem here ? how do u fix this?

@100cm As mentioned before, our problem was onprom networking issue, nothing to do with the chart itself.

I faced same issue. In my case, firewalld blocks DNS request. Disabling firewalld (or permit 53/udp,tcp) fixes this issue.